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-10-13
Fixed
- Le détachement d’un conteneur flottant ou caché sur un astéroïde ou une épave enregistre désormais uniquement le conteneur en SQL, sans réécrire le JSON du secteur ni prendre le verrou de secteur associé à cette sauvegarde. Contrat API inchangé ; aucune migration nécessaire.
- API **v148** : les en-têtes
X-RateLimit-Limit,X-RateLimit-RemainingetX-RateLimit-Resetaccompagnent désormais aussi les erreurs produites par exception après admission par le limiteur, ces requêtes ayant déjà consommé du quota. Les réponses 429 conservent ces en-têtes etRetry-After. Les requêtes rejetées avant le limiteur ou traitées avec un limiteur indisponible ou désactivé restent sans en-têtes de quota. Documentation OpenAPI et version publique synchronisées ; aucune migration nécessaire.
2026-10-12
Changed
- API **v147** :
POST /api/others/fleets/{fleetId}/moveaccepteexcludeShipIds, une liste facultative d’identifiants publics de vaisseaux à exclure, y compris le vaisseau-mère. Les membres exclus sont renvoyés dansignoredavec le motifexcluded, sans toucher à leur carburant, auxiliaires ou actions en cours. Liste vide ou absente : comportement habituel ; doublons sans effet supplémentaire et identifiants absents de la flotte ignorés. Une liste mal formée est rejetée en HTTP 400 avant tout déplacement. Documentation OpenAPI et version publique synchronisées ; aucune migration nécessaire. - API **v146** : la fabrication d’un vaisseau Others standard (
standard_ship) passe de sept à trois jours (259 200 secondes) pour les nouvelles constructions. Les constructions déjà planifiées conservent leur échéance. Documentation OpenAPI et version publique synchronisées ; aucune migration nécessaire.
2026-10-11
Added
- Suivi interne de l'activité du joueur dans
players.last_game_action_at: les requêtes authentifiées par session ou clé API en POST, PATCH, PUT et DELETE actualisent la date UTC après une réponse 2xx, y compris les écritures sans changement effectif. Les GET, erreurs, connexions seules et événements du scheduler ne comptent pas. Aucun champ public ajouté ; contrat API inchangé (v145). - Migration explicite
php scripts/one-shot-scripts/migrate-player-last-game-action.php --database-config=PATH --apply, à appliquer avant le déploiement du code ; simulation par défaut et réexécution sans écrasement des dates. Les comptes existants commencent àNULL, sans reconstruction d'historique. Le document de cadrage du vampirisme retient la protection fondée uniquement sur ces écritures ; le pillage et son seuil restent à implémenter.
2026-10-05
Changed
- API **v145** : suppression de la limite de 10 secteurs par déplacement des flottes et vaisseaux Others. Les trajets directs de longue distance sont acceptés ; leur durée reste calculée selon la distance de chaque vaisseau. Le motif
target_out_of_rangene s’applique plus aux déplacements Others. Documentation OpenAPI et version publique synchronisées ; aucune migration nécessaire.
Fixed
- Alertes Others d’onde d’anomalie : génération des identifiants canoniques
oalert_suivis de 20 caractères hexadécimaux, comme les autres alertes, pour éviter le rejet HTTP 400 de l’acquittement par le journal spectateur dedefense_etoile. Contrat API inchangé (v144). - Migration explicite
scripts/one-shot-scripts/migrate-others-anomaly-alert-ids.phppour les identifiants erronés existants : simulation par défaut, filtre facultatif--fleet-id, sauvegarde obligatoire avec--apply --backup=NEW_FILE, contrôle des collisions et conservation de tous les autres champs, dont le statut de lecture. Déployer le générateur corrigé avant application. Les alertes déjà journalisées sous leur ancien identifiant pourront être journalisées une nouvelle fois avant acquittement.
2026-10-04
Fixed
- API **v144** : les scans de secteur privilégient les capteurs normaux parmi les sondes joignables aussi proches ou plus proches que la sonde par défaut, avant de départager par distance. Une sonde en accélération ne masque plus le scan d’une sonde stationnaire à distance égale. Les scans dégradés, y compris ceux du secteur courant, renseignent systématiquement
scutCoverageStatuset les réseaux connus, afin d’éviter un faux affichage « SCUT coverage: no ». Les règles de confidentialité des réseaux inconnus restent appliquées. Versions OpenAPI synchronisées ; aucune migration de données nécessaire.
2026-09-30
Fixed
- Téléportation de debug :
scripts/teleport-probe.phptransmet désormais les améliorations installées au service de déplacement, afin de respecter la protection contre les poussières intersectorielles. Le script affiche également l’état réel de la sonde après l’arrivée, y compris sa destruction. Aucun changement du contrat API. - API **v143** : documentation complète de l’action Others
planet_harvest: réponse de création, schémas d’action et de résultat, étapes et durées, échéancesendsAt, annulation avec récolte partielle, répartition des ressources et erreurs. Exemples d’acceptation, d’annulation et de résultat, schéma dédié intégré au suivi des actions ; aucun changement du fonctionnement de la récolte. - API **v142** : les demandes d’annulation de déplacement et de récolte Others exposent désormais le statut réel
cancel_requested, auparavant présenté commequeued. Le scheduler conserve la responsabilité de finaliser l’annulation. Documentation des réponses202des deux endpointsDELETEet du suivi des actions mise à jour ; versions OpenAPI synchronisées.
2026-09-29
Added
- API **v141** : les Mannies d’un conteneur perdu accidentellement deviennent abandonnées à l’intérieur, sans duplication ni perte d’identité ou de cargaison. Elles quittent le pool de la sonde et leurs tâches sont annulées avec les restitutions prévues pour ces tâches. Le dernier conteneur hébergeant des Mannies à bord reste protégé ; un Manny dans un autre conteneur attaché, y compris le stockage interne, autorise la perte. La protection est revérifiée lors de la rupture. Le détachement volontaire d’un conteneur occupé reste interdit.
- Inspection :
containerReport.manniesrévèle les occupants et les scans locaux du joueur exposent ensuiteabandonedMannies. Ils n’apparaissent pas comme objets dérivants séparés. Rattacher le conteneur recrute tous ses occupants ;mannyIdsurrecover-storage-containerpermet d’en récupérer un seul. Réservation exclusive du conteneur, attente de place et résolution des noms en doublon. Formulaire WebUI de récupération individuelle après inspection. - Migration explicite :
php scripts/one-shot-scripts/migrate-detached-container-mannies.php --database-config=PATH --apply, API et workers arrêtés. Simulation par défaut ; création des relations SQL d’occupation et d’inspection, sans déplacement des Mannies existantes. À appliquer avant le déploiement du code.
Fixed
- Minage Manny : un ordre destiné à la sonde attend désormais son retour dans le secteur et la fin de son déplacement avant de prélever et livrer les ressources, même avec une liaison SCUT. Le minage vers un conteneur détaché continue à distance sans faire embarquer la Manny sur une sonde en transit. Correction du comportement, sans nouveau champ API ni migration.
- WebUI : les relais SCUT ne sont plus proposés comme supports de waypoints, leur installation sur ces relais n’étant pas prise en charge. Version des fichiers statiques renouvelée pour actualiser le menu après déploiement.
2026-09-27
Fixed
- API **v140** : documentation de la réponse de
POST /api/others/fleets/{fleetId}/move(actions,ignored,blocked), des actions acceptées, des motifs de refus individuels et des erreurs HTTP, avec exemples de résultats partiels ou sans déplacement accepté. Comportement du déplacement inchangé. - Les rapports d’inspection des dépôts Others, avant et après ouverture, ainsi que les alertes d’onde émises à leur ouverture sont désormais rédigés en anglais. Aucun changement du contrat API ; les alertes déjà enregistrées restent inchangées.
- Préparations de missiles échouées : les historiques de tir libèrent leur référence au missile d’inventaire, côté sondes comme côté Others. Un missile conservé après la disparition d’une cible peut ainsi être réutilisé sans erreur de clé étrangère ni Manny bloqué à 100 %. Aucun changement du contrat API ; les données historiques déjà affectées nécessitent une réparation séparée.
- Script ciblé
scripts/one-shot-scripts/requeue-bonsi-missile-preparations.php: nettoyage des trois anciennes références et remise en file des trois préparations bloquées de Bonsi, avec simulation par défaut, vérifications d’identité et sauvegarde obligatoire avant application.
2026-09-24
Changed
- Persistance Others O0–F0 : SQL réparti entre repositories d’actions, inventaires, production, mouvements, combat et destructions ; service transactionnel d’idempotence HTTP et suppression de
OthersRepository::pdo(). Aucun changement de schéma de réponse ni de version API (v139). - Épaves, unités dormantes, largages, extractions et abandons de Mannies : intentions SQL durables, publication après commit et reprise idempotente des fichiers de secteur. Migration explicite
scripts/one-shot-scripts/migrate-others-persistence.phpà exécuter avec les commandes et workers arrêtés ; procédure dansdocs/others-persistence-operations.md. - Contrôle d’architecture par tokens PHP, budgets des collections et tests de panne/concurrence sur SQLite et MariaDB.
Fixed
- Achèvements Others concurrents : verrous et relecture des acteurs/actions/cibles, rejet des événements d’une ancienne étape, unicité des sorties de fabrication, débits, projectiles, dégâts et compteurs de destruction.
- Les interruptions de transferts d’inventaire et de carburant libèrent les réservations des porteurs survivants. Les refus individuels d’un mouvement de flotte disposent d’un point de sauvegarde transactionnel.
Added
- API **v139** :
POST /api/others/ships/{shipId}/inventory/jettisonspermet de larguer une quantité non réservée de ressource (en ECE, y compris le deutérium d’inventaire) ou un missile non réservé. Les ressources sont abandonnées ; le missile devient un objet dérivant récupérable dans le secteur courant. La commande renvoie l’inventaire actualisé, accepteIdempotency-Keyet refuse les vaisseaux en transit. Le réservoir de propulsion n’est pas concerné.
2026-09-23
Fixed
- Largage d’un conteneur contenant une archive biologique dans le secteur d’origine d’une mission Oracle : la planète et le conteneur sont enregistrés ensemble, sans conflit de révision qui laisse le Manny bloqué à 100 %. Aucun changement du contrat API.
- Script
scripts/one-shot-scripts/requeue-failed-oracle-container-drop.phppour remettre en file, après déploiement du correctif, un largage Oracle resté en échec avec ce conflit ; simulation par défaut et vérifications de l’événement, de la mission et de l’absence de conteneur livré. - API **v138** : documentation du corps JSON obligatoire de
POST /api/others/ships/{shipId}/harvest, avec les champs requistargetObjectIdetauxiliaryCount(entier supérieur ou égal à 1), leurs descriptions et un exemple. Le comportement de l’endpoint reste inchangé.
2026-09-22
Changed
- Stockages de secteur : extraction de la persistance des transferts, réservations, inventaires, effets et diffusions dans des repositories dédiés. Le gestionnaire de transaction ne connaît plus les tables métier ; l’ordre des verrous, les transitions conditionnelles et les unités atomiques restent communs aux commandes, workers et interruptions. Aucun changement du contrat API.
- Consommation des ressources d’une sonde : chargement groupé des stocks disponibles et débits conditionnels par lots de 200 conteneurs. Le parcours complet supprime les lectures par conteneur et borne désormais son coût SQLite à
3 + 3 × ceil(N / 200)requêtes.
Fixed
- Reprises des effets et diffusions de stockage : la persistance des tentatives, curseurs, livraisons et acquittements est isolée des services, avec conservation des intentions avant publication JSON et du rejeu idempotent après une coupure.
2026-09-21
Fixed
- WebUI
/alerts: « Tout marquer lu » prend aussi en compte les avertissements de secteur (containers détachés, sondes et marque-pages), avec le même acquittement local que leur bouton individuel. Le bouton fonctionne même sans alerte persistante ; la suppression reste limitée aux alertes persistantes. - WebUI : renouvellement de la version des fichiers statiques pour charger le JavaScript des actions groupées d’alertes après déploiement, même lorsque le navigateur conserve les anciens scripts en cache.
Added
- API **v137** : mode
hidden_on_dormant_constructpour cacher un conteneur sur une épave de vaisseau-mère Others, même épuisée. Découverte par inspection ou minage, stockage et récupération comme les caches sur astéroïdes ; minage vers la cache sans trajet lorsqu’elle est sur l’épave exploitée. Le deutérium reste exclu des conteneurs. Formulaires et affichages WebUI adaptés ; les autres structures dormantes ne sont pas des cibles de pose valides.
- WebUI
/alerts: pictogrammes « Tout marquer lu » et « Supprimer toutes les alertes » avant le bouton de rafraîchissement, pour les alertes persistantes de la sonde sélectionnée. Libellés accessibles en français et en anglais, désactivation pendant le traitement et actualisation de la liste et des indicateurs de navigation après l’action.
2026-09-20
Added
- API **v136** : ajout de
POST /api/probe/{probeId}/alerts/mark-all-readetDELETE /api/probe/{probeId}/alerts, avec variantes pour la sonde par défaut. Marquage de toutes les alertes persistantes non lues ou suppression de toutes les alertes persistantes de la sonde, tous types confondus ; réponses200avecmarkedReadCountoudeletedCount, à zéro si aucune alerte n’est concernée. Les alertes déjà lues conservent leurs horodatages et les autres sondes restent inchangées.
- WebUI : affichage de l’intégrité en pourcentage parmi les métriques de la page sonde (
/et/{probeId}), actualisée avec la télémétrie existante.
Fixed
- Migration corrective
scripts/one-shot-scripts/requeue-mothership-e4-stranded-missiles.php: remise en file des 18 impacts restés en échec surothers_swarm_participantsaprès la réparation du missile fatal du vaisseau mèremother_e4e6495132d2b1db10f7. Vérification des identités et de la destruction de la cible, transaction, simulation par défaut et sauvegarde obligatoire avant application. Le scheduler résout ensuite ces missiles selon les règles courantes de perte de cible, sans modification du contrat API.
2026-09-18
Changed
- Contrôle Others « défense étoile — attente » : les gardiens des dépôts conservent leurs tirs, lasers et interceptions sans aucun repli tactique. Une réaction mobilise toute la flotte vers le dépôt, y compris les navettes, l'éclaireur et les gardiens des autres dépôts ; les missions et relèves sont suspendues, les vaisseaux indisponibles rejoignent dès que possible par étapes. La défense centrale prend le relais dès l'arrivée du vaisseau mère. Après l'arrivée de toute la flotte survivante, aucun redéploiement pendant au moins deux heures, puis tant qu'une menace centrale, notamment une sonde, reste détectée. Alerte et délai conservés uniquement en mémoire, sans reprise après redémarrage. Aucun changement du contrat API.
2026-09-16
Fixed
- Migration corrective
scripts/one-shot-scripts/requeue-failed-mining-storage-waits.php: répare les événements de minage passés en échec faute dewaitingForSpaceSinceaprès un déploiement sans la migration v132. Initialise le délai depuis la fin historique du minage et remet les événements en file ; les rappels demandés depuis l'échec restent des retours, sans reprise du minage annulé. Sélection limitée à l'erreur concernée, transaction avec verrouillage des lignes, sauvegarde obligatoire via--backup=NEW_FILE, simulation via--dry-runet choix de base via--database-config=PATH. Les attentes dépassant sept jours suivent la règle d'expiration existante à la reprise du scheduler.
Changed
- API **v135** :
POST /api/probe/{probeId}/mannies/tasksaccepte désormaisignite_missile, avecpayload.targetIdobligatoire etpayload.missileItemIdfacultatif. Chaque résultat reprend la réponse unitaire (manny,missile,missileItemId,targetId). Les missiles sont réservés dans l'ordre du lot ; tout rejet annule l'ensemble des tâches, réservations et événements planifiés du lot.
- API **v134** : la réponse
POST /api/probe/{probeId}/mannies/{mannyId}/ignite_missileexpose désormais la Manny sélectionnée dansmanny, tout en conservantmissileItemIdettargetIdau niveau de la réponse, ainsi que le détailmissile.
Fixed
- Destruction des vaisseaux Others : suppression des références de participation aux moissons avant celle des auxiliaires, embarqués, déployés ou devenus dormants après interruption d'un chantier de dépôt. Les anciennes moissons conservent leurs résultats ; leurs références ne bloquent plus les impacts mortels par une erreur de clé étrangère. La destruction du vaisseau mère peut ainsi terminer la dissolution de sa flotte. Aucun événement de production n'est rejoué automatiquement.
2026-09-15
Added
- API **v133** :
POST /api/others/alerts/mark-readmarque lues de 1 à 500 alertes désignées paralertIds, en une seule requête. Le lot est atomique, limité aux alertes du compte et renvoie les alertes dans l'ordre demandé ; tout identifiant inconnu ou étranger refuse l'ensemble sans modification. Les doublons sont refusés et les alertes déjà lues conservent leurs horodatages lors des nouvelles tentatives.
Fixed
- API **v132** : les Mannies dont le minage attend une place en stockage exposent désormais
task.waitingForSpaceSinceet appliquent le délai d'abandon de sept jours. Une livraison débloquée avant l'échéance termine normalement ; à l'échéance, la tâche est annulée sans extraire ni créditer les ressources encore en attente. La Manny abandonne sa cargaison éventuelle et rentre si sa sonde est dans le même secteur et dispose de 0,05 ECE pour elle ; sinon elle devientabandonedet récupérable dans son secteur. Les nouvelles tentatives du scheduler ne réinitialisent pas le délai. - Migration explicite
scripts/one-shot-scripts/migrate-manny-blocked-mining-timeouts.php: initialise l'attente des minages déjà bloqués depuis leur ancienne échéance de fin, préserve les horodatages existants et remet ces événements à échéance pour traitement. Disponible avec--dry-runet--database-config=PATH; suspendre les workers du scheduler pendant l'application, puis déployer le code et les redémarrer. Les tâches dépassant déjà sept jours seront traitées dès la reprise.
Changed
- Contrôle Others « défense étoile — attente » : ajout d'un journal spectateur automatique
scripts/others_control/logs/{mothership-id}.log(UTF-8, rotation à 10 Mio, cinq archives). Sélection explicite des moissons, productions, combats, transferts, réparations, navettes, relèves et déménagements, en complément de la sortie de diagnostic. Collecte des alertes non lues toutes les cinq minutes, filtrage par historique persistant des vaisseaux de la flotte, écriture durable puis acquittement viaPOST /api/others/alerts/mark-readpar lots de 500. Reprises et erreurs d'écriture couvertes sans requêtes de suivi supplémentaires pour les résultats de jeu. - Contrôle Others « défense étoile — attente » : moisson continue jusqu'à épuisement des planètes moissonnables du secteur, y compris lorsque les objectifs de production et la réserve sont complets ou que trois chantiers sont déjà actifs. Les constructions restent limitées à trois simultanément et démarrent dès qu'un vaisseau est finançable, en préservant la réserve de 10 auxiliaires et 10 missiles.
- Déchargement Others déclenché sous 40 ECE libres après réception des arrivées réservées, avec une cible de 50 % d'occupation. Dépôts et navettes exportent les excédents après protection de la réserve et d'un budget consommable pour les trois prochains vaisseaux. Les chargements réévaluent ces protections ; l'absence d'excédent ou de transporteur est signalée sans interdire la production.
- Navettes Others : rappel persistant d'une sentinelle voisine admissible lorsqu'aucun transporteur local ne convient, même sous menace à son poste, avec vérification du carburant de retour et de l'autonomie vers le dépôt. Exclusion de la formation dès le rappel et libération après la mission ; plusieurs rotations peuvent poursuivre le déchargement vers sa cible.
2026-09-14
Fixed
- Version publique de l’API portée à **131**, synchronisée avec les deux documents OpenAPI et l’exemple de
GET /api/version(issue #63). Cette version rend détectables les ajouts au contrat restés sous 130, notamment les quatre endpoints de consultation et de transfert des stockages du secteur. La règle projet impose désormais un incrément pour toute évolution du contrat, même additive ; les tests vérifient la cohérence des versions publiées. GET /api/sector: les secteurs déjà visités sans sonde locale ne révèlent plus les vaisseaux Others ni les missiles présents en temps réel. La visibilité utilise la sonde qui fournit le scan, y compris une sonde secondaire joignable par SCUT, et exige des capteurs normaux.- Documentation OpenAPI : déplacement du paragraphe sur
GET /api/others/fleets/{fleetId}/known-depotsdu contrat général versdocs/openapi-others.yaml, où figurent déjà la définition de l’endpoint et son schéma de réponse.
Added
- Contrôle Others « défense étoile — attente » : l’objectif logistique est porté à 30 auxiliaires et jusqu’à 20 auxiliaires embarqués peuvent participer simultanément à une moisson ; la réserve de ressources équivalente à 10 auxiliaires reste inchangée.
- Contrôle Others « défense étoile — attente » : les missiles visant le vaisseau mère déclenchent la défense centrale, même sans sonde ni Manny locale. Les autres vaisseaux de la flotte présents dans le secteur tentent une interception prioritaire, avec un seul missile par missile entrant et suivi des tirs pour éviter les doublons entre cycles. Les missiles visant d'autres vaisseaux sont ignorés par la défense centrale.
- Contrôle Others « défense étoile — attente » : quatre gardiens persistants par secteur de dépôt connu de la flotte, avec les réactions tactiques des sentinelles. Relève par un vaisseau disponible strictement mieux armé en missiles, retour de l'ancien gardien après l'arrivée du remplaçant, trajets par étapes et exclusion des navettes. Les gardiens restent aux dépôts lors des déménagements et poursuivent leur surveillance pendant le transit du vaisseau mère.
- Contrôle Others « défense étoile — attente » : déménagement automatique après épuisement des planètes locales. Choix prioritaire d’un voisin occupé moissonnable, puis exploration successive de la couronne à distance 2 par un vaisseau local ou une sentinelle ; retour sous 4 points de deutérium et reprise après le plein. Recherche et destination persistantes, attente des auxiliaires et navettes en cours, puis déplacement de toute la flotte et reprise de la formation après son arrivée complète.
POST /api/probe/{probeId}/atomic-printer/craft: champ optionnelmannyIdpour choisir la Manny assistante. Elle doit appartenir à la sonde, être libre et à bord ; sinon la fabrication est refusée. Sans ce champ, la première Manny disponible reste sélectionnée automatiquement.- Contrôle Others « défense étoile — attente » : désengorgement automatique des cales pleines par construction de dépôt, dépôt local de la moitié des ressources disponibles ou navettes vers le dépôt connu le plus proche. Chargement proportionnel à la capacité libre, ravitaillement aller-retour, trajets par étapes, déchargement et retour suivis dans un journal persistant. Plusieurs navettes peuvent partir successivement et restent exclues de la formation défensive jusqu'à leur retour.
GET /api/others/fleets/{fleetId}/known-depots: liste des secteurs de dépôts de germination découverts par une flotte, en coordonnées relatives au secteur d’origine du propriétaire. Chaque arrivée de vaisseau dans un secteur contenant un dépôt terminé, ou chaque construction de dépôt achevée par un auxiliaire de la flotte, mémorise ce secteur une seule fois dansothers_known_depots, indépendamment des autres flottes. La connaissance persiste après le départ ; une construction en cours ou interrompue n’ajoute aucune découverte.- Migration explicite
scripts/one-shot-scripts/migrate-others-known-depots.php: création de la table sans reconstitution des découvertes passées ; les découvertes commencent aux prochaines arrivées ou constructions achevées.
2026-09-13
Added
- Contrôle Others « défense étoile — attente » : réparation automatique des vaisseaux par un auxiliaire embarqué, livraison du complément de métaux depuis le vaisseau mère aux vaisseaux endommagés présents dans son secteur, et relève des sentinelles endommagées par un vaisseau intact armé. Les réparations précèdent la production, les actions en cours évitent les doublons après redémarrage et les vaisseaux endommagés restent au centre jusqu’à leur remise en état.
POST /api/others/ships/{shipId}/auxiliaries/{auxiliaryId}/repair: réparation du vaisseau par un auxiliaire libre embarqué, avecintegrityPercentexprimé en points entiers. Coût et durée reprennent la configuration Manny (par défaut 0,01 ECE de métaux et 600 secondes par point), avec plafonnement à l’intégrité manquante, débit immédiat et restauration différée. L’action expose le devis et le résultat, accepte une clé d’idempotence et se suit viaGET /api/others/actions/{actionId}.
2026-09-12
Fixed
- Documentation OpenAPI des dépôts Others : schémas des actions de construction, dépôt et retrait, du manifeste et des résultats livrés/perdus/libérés, également référencés par le GET de suivi. Les réponses de transfert Manny utilisent le schéma
Manny, dont les tâches incluent désormaistransferring_sector_storage.
2026-09-11
Changed
- Transferts Manny entre container embarqué et stockage du secteur : le deutérium est exclu de
POST /api/probe/{probeId}/mannies/{mannyId}/storage-transfers, dans les deux sens. Sa présence dans les ressources entraîne un refus400 bad_requestsans réservation ; le formulaire ne le propose plus. Le ravitaillement du réservoir dispose désormais de son endpoint dédié.
Fixed
- Contrôle Others « défense étoile — attente » : activation effective de la défense centrale lors de la présence d'une sonde ou d'une Manny auprès du vaisseau mère. Les sentinelles sont rappelées, quatre missiles sont maintenus par sonde et les Mannies sont réparties entre des verrouillages laser distincts, avec suivi des actions et des projectiles visibles pour éviter les doublons.
- WebUI des stockages du secteur :
/sector-storageet les formulaires Manny résolvent désormais l’identifiant réel de la sonde par défaut avant d’appeler les endpoints canoniques qui exigent{probeId}, au lieu d’aboutir surEndpoint not found. - Destruction des sondes par missile, laser, astéroïde ou usure intersectorielle : suppression de la sonde perdue et basculement de l’instance par défaut vers la sonde survivante la plus proche, avec alerte identifiant la sonde et la cause. La perte d’un drone conserve la sonde par défaut ; l’exploration est préservée.
- Nettoyage des sondes détruites : détachement des références de l’historique des missiles, annulation des préparations et suppression du journal de bord pour respecter les clés étrangères ; les missiles déjà en vol poursuivent leur trajectoire.
- Réinstanciation dans une nouvelle sonde réservée à la perte de l’unique sonde du joueur. Le script explicite
scripts/delete-probe.phpaccepte les nouvelles causes pour réparer les pertes déjà présentes en base.
Added
- Contrôle Others :
build_germination_depot.pylance ponctuellement la construction d’un dépôt dans le secteur courant d’un vaisseau mère, avec le premier auxiliaire embarqué libre et une URL d’API configurable. - Statistiques publiques : ajout de « Secteurs occupés par les Others » juste après les secteurs visités. Le compteur généré par
scripts/generate-stats.phpcompte les secteurs distincts contenant au moins un vaisseau Others non détruit, hors vaisseaux retirés ou en transit.
- WebUI
/sector-storage: chaque ressource et objet disponible propose désormais une action de récupération, avec sélection d’une Manny libre, du container embarqué de destination et de la quantité pour les ressources. Le deutérium utilise directement le ravitaillement du réservoir et conserve le plafonnement à sa capacité restante. - Endpoint
POST /api/probe/{probeId}/mannies/{mannyId}/transfer-deuterium-from-external-storage: transfert de deutérium brut d’un stockage extérieur vers le réservoir, à raison de 100 points par ECE. Un aller-retour dure toujours 10 minutes (5 + 5), avec plafonnement explicite à la capacité restante, réservations, idempotence et règlement des interruptions sans duplication. - WebUI Manny : formulaire de ravitaillement depuis un stockage extérieur avec lecture du deutérium disponible, état du réservoir, aperçu de la conversion et du plafonnement, durée annoncée et envoi idempotent vers l’endpoint dédié.
- WebUI
/sector-storage: page hors navigation principale, accessible depuis le bouton secondaire « Stockages du secteur » de/inventories, permettant de sélectionner un container à la dérive, un container caché déjà découvert ou un stockage Others ouvert dans le secteur courant, puis d’en consulter les ressources et les objets avec pagination.
- Dépôts de germination construits par les auxiliaires Others : stockage partagé persistant, transferts par charges de 2 ECE, progression d’inspection propre à chaque sonde et diffusion mondiale durable lors de l’ouverture.
- Logistique Manny : consultation paginée et transferts de ressources ou d’objets entiers entre un container embarqué et un stockage du secteur accessible, avec suivi durable et interface dédiée dans les actions existantes.
- Réservations communes, conservation des identités et métadonnées, règlement unique des interruptions, journal des effets secteur et protection des fichiers contre les écritures périmées.
- Migration explicite
migrate-sector-storage.php, audit en lecture seuleaudit-sector-storage.phpet tests de concurrence SQLite/MariaDB. Procédure de bascule et de reprise dansdocs/sector-storage-operations.md.
2026-09-10
Added
- Script administratif ponctuel
relocate-inactive-others-fleet-to-origin.php: rappel des auxiliaires libres et déplacement immédiat d’une flotte Others inactive à l’origine, avec simulation par défaut, transaction et conservation des états initiaux dans l’audit opérateur.
2026-09-08
Changed
- Contrôle Others « défense étoile — attente » : une fois les objectifs logistiques atteints, le vaisseau mère construit des vaisseaux standards avec les ressources excédant sa réserve de reconstruction et ses auxiliaires embarqués libres. Le plafond de trois constructions simultanées tient compte des crafts actifs renvoyés par l’API, y compris après redémarrage ; les autres fonctions continuent.
- Contrôle Others « défense étoile — attente » : le vaisseau mère ravitaille par auxiliaires les vaisseaux de sa flotte présents dans son secteur, dans la limite du carburant disponible. Chaque nouvelle vague attend la fin effective de tous les transferts de deutérium actifs dans la flotte, y compris après redémarrage, puis recalcule les besoins depuis l’API ; les autres fonctions de défense et de logistique continuent.
- Documentation OpenAPI Others : précision du contrat existant de transfert de deutérium entre réservoirs (requête, unités, arrondi, conditions, réservations, durée, réponse et codes d’erreur), du suivi des actions et de l’idempotence. Les limites de la télémétrie publique sont explicitées.
2026-09-04
Changed
- Contrôle Others « défense étoile — attente » : les deux observations d'activité attribuable à une sonde sont désormais interrogées toutes les 20 secondes pour chaque sentinelle en poste, tandis que la réconciliation générale conserve son plafond de 300 secondes.
- Moissons Others : après la consommation opérationnelle de 10 %, le deutérium conservé remplit désormais en priorité le réservoir du vaisseau coordinateur à raison de 100 points par ECE ; seule la quantité excédentaire rejoint la soute, sans empiéter sur la capacité réservée aux transferts de carburant en cours. Le résultat de l’action détaille cette répartition.
- Destruction d’un vaisseau mère Others : une épave persistante et minable apparaît désormais dans son secteur, reçoit toutes les matières premières encore présentes dans sa soute et met ses missiles compatibles à la dérive pour récupération par une Manny. Toutes les sondes physiquement présentes sont alertées de la cause et peuvent inspecter les restes.
- Amélioration de sonde
Relativistic Path Clearing: l’inspection d’une épave de vaisseau mère débloque ce blueprint au niveau du joueur ; son installation sur une sonde coûte deux circuits intégrés et supprime uniquement sa perte d’intégrité due aux poussières intersectorielles, sans neutraliser collisions, containers fragiles, armes, astéroïdes ou trous noirs. - Statistiques publiques : ajout du podium des chasseurs d’Others, classé par nombre total de vaisseaux Others détruits, et du podium des éradicateurs d’Others, consacré aux destructions de vaisseaux mères ; les deux classements sont agrégés par joueur possédant au moins une sonde publique et disponibles en français et en anglais.
- Contrôle Others « défense étoile — attente » : l’objectif de 60 missiles porte désormais sur toute la flotte. Le vaisseau mère conserve une réserve de 10 missiles et répartit son surplus par vagues équitables entre les vaisseaux locaux, dans la limite de 3 par vaisseau ; une sentinelle voisine vide peut être relevée par un vaisseau local armé, sans interrompre un engagement tactique et avec départ du remplaçant avant le rappel.
- Documentation OpenAPI Others :
POST /api/others/ships/{shipId}/inventory-transfersdécrit désormais ses payloads canoniques de transfert de ressources et d’items, ainsi que les réponses de création et de consultation d’un transfert. - Outil de développement :
scripts/add-inventory-item.phpaccepte désormais--others-ship-id=<id-public>pour injecter des ressources ou des items dans la soute d’un vaisseau Others, avec contrôle de capacité et encombrement canonique de 2 ECE pour ses missiles.
2026-09-03
Fixed
- Les fins de moisson, de craft, de transfert et de tir Others libèrent désormais leurs réservations avec une expression SQL commune à SQLite et MariaDB ; elles ne restent plus bloquées sur l'emploi scalaire incompatible de
MAX(0, ...). Un script ponctuel permet de réarmer les événements déjà tombés en échec sur cette erreur. - Le lancement des crafts et les transferts de ressources Others utilisent désormais un cast numérique commun à SQLite et MariaDB, au lieu de provoquer une erreur 500 sur MariaDB avec
CAST(... AS REAL).
Changed
- Contrôle Others « défense étoile — attente » : l'état initial détaille désormais, pour chaque vaisseau, l'occupation et les réservations de la soute, les ressources disponibles et les objets regroupés par type.
Added
- Les joueurs disposent désormais de compteurs persistants pour les vaisseaux Others détruits, dont un compteur dédié aux vaisseaux-mères. Une destruction par missile de sonde ou astéroïde motorisé est attribuée au propriétaire de la sonde, sans compter les bâtiments seulement retirés lors de la dissolution d'une flotte.
2026-09-02
Changed
- Interface
/sensors: les vaisseaux Others et les sondes étrangères détectés indiquent désormais leur état précis dans la fiche du secteur et, pour les sondes, dans l’alerte de présence. Un vaisseau Others qui coordonne une moisson est explicitement signalé « en orbite basse — moisson planétaire en cours » ; les API de scan exposentlow_orbit, les états de déplacement et détectent correctement une sonde en décélération dans son secteur d’arrivée. - Contrôle Others « défense étoile — attente » : au lancement, le script affiche désormais un récapitulatif de chaque vaisseau de la flotte avec sa position relative, son état, ses auxiliaires totaux et déployés, ses missiles et son éventuel mouvement en cours.
2026-09-01
Changed
- Interface :
/inventoriespropose désormais systématiquement les panneaux solaires et les missiles dans les règles de stockage par container, même lorsque l’inventaire n’en contient aucun exemplaire. - API v130 / scans Others :
GET /api/others/sectorexpose désormaisharvestablesur chaque représentation de planète lorsqu'un vaisseau actif de la flotte est présent dans le secteur. Le booléen vauttrueuniquement si la planète contient encore strictement plus de 5 ECE de ressources ; il reste absent des scans Others non locaux et de tous les endpoints dédiés aux sondes. - Contrôle Others « défense étoile — attente » : le vaisseau mère mène désormais en parallèle des fenêtres de moisson d'une heure, relançant les actions canoniques achevées sans interrompre une action longue. Il fabrique prioritairement jusqu'à 20 auxiliaires puis 60 missiles avec les assistants restants, avant de constituer les matières premières nécessaires à 10 auxiliaires et 10 missiles supplémentaires.
- Combat Others : l’alerte locale signalant qu’une Manny exposée est verrouillée par un laser précise désormais le nom de la Manny ciblée.
- Contrôle Others « défense étoile — attente » : l’ancien script monolithique est désormais un point d’entrée mince vers un paquet Python séparant configuration, contrat HTTP, géométrie FCC, observations, événements, engagements, dangers et formation. Ses tests sont répartis par responsabilité et conservent les scénarios tactiques existants.
2026-08-31
Changed
- Interface :
/sensorsidentifie désormais les détectionslarge_shipetshipcomme des vaisseaux Others et ajoute au résumé du secteur la composition de la flotte présente. - 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.