fix: params page cfg=None + hot-reload config chaque jour

dashboard/app.py:
  load_sim_config() retourne None (pas {}) quand le fichier est absent
  — {} est falsy en Python, masquait le formulaire même quand la config
  était chargeable mais vide. None est explicitement distinguable.
  load_all_modes() charge toujours depuis sim_001.json (référence 5 modes)
  — sim_002 n'a qu'un seul mode dans son bloc 'modes', le tableau comparatif
  était vide pour S2.
  {% if cfg is not none %} dans le template au lieu de {% if cfg %}
  Message d'avertissement sous le bouton save : prise en compte au prochain jour
  Message d'erreur précis si fichier introuvable (path + hint mount Docker)
  /params/save: vérification if cfg is None

run.py:
  Hot-reload config à chaque tick==0 (frontière de jour) :
    cfg.load(config_path, session_id=SESSION_ID)
    effective_mode mis à jour depuis la config rechargée
    tick_sleep recalculé (TICK_SLEEP_SEC env var prime toujours)
  → Changer mode/drain/encounter via dashboard prend effet le jour suivant
    sans redémarrer le process
This commit is contained in:
Corback
2026-06-16 08:25:59 +00:00
parent dd985c868c
commit 99bd77e18b
2 changed files with 30 additions and 9 deletions
+5 -1
View File
@@ -77,8 +77,12 @@ def run(config_path: str | None = None):
day, current_tick = tick_engine.next_tick(day, current_tick)
# Réinit world_state au début de chaque nouveau jour
# Début d'un nouveau jour : hot-reload config depuis le JSON (permet les changements dashboard)
if current_tick == 0:
cfg.load(config_path, session_id=SESSION_ID)
effective_mode = cfg.mode() or db_mode
tick_sleep = float(os.getenv("TICK_SLEEP_SEC",
cfg.get("tick", {}).get("tick_sleep_sec", tick_sleep)))
_init_world_state(SESSION_ID, day)
except KeyboardInterrupt: