Skip to content

Planificateur : mieux répartir les tâches substantielles (cap souple 3/jour)#178

Merged
Cyril-CB merged 2 commits into
mainfrom
claude/task-manager-time-blocking-3vbbam
Jul 1, 2026
Merged

Planificateur : mieux répartir les tâches substantielles (cap souple 3/jour)#178
Cyril-CB merged 2 commits into
mainfrom
claude/task-manager-time-blocking-3vbbam

Conversation

@Cyril-CB

@Cyril-CB Cyril-CB commented Jul 1, 2026

Copy link
Copy Markdown
Owner

Objectif

Bien étaler la charge plutôt que de tout regrouper dès qu'un créneau se libère (puis n'avoir plus rien à faire ensuite).

Règle ajoutée

Le moteur répartit désormais en priorité selon le nombre de tâches substantielles (≥ 1 h) par jour, et non plus seulement selon les minutes : il remplit d'abord les jours qui en comptent le moins.

  • Cap souple de 3 tâches d'au moins 1 h par jour ; le seuil monte naturellement à 4, 5… quand tous les jours possibles sont déjà pleins.
  • Sauf contrainte d'échéance ou d'événement fixe : la fenêtre imposée par la deadline reste respectée (le cap ne bloque jamais un placement, il ne fait qu'orienter la répartition).
  • Les tâches < 1 h et les événements fixes ne comptent pas dans ce plafond.

Exemple (vérifié)

  • 10 tâches d'1 h avec échéance à J+2 (3 jours ouvrés) → 4 / 3 / 3 (remplissage à 3, puis un seul jour monte à 4).
  • 6 tâches d'1 h sans échéance → 1 par jour sur 6 jours (bien étalé, aucun regroupement).

Détails techniques

  • _PlanJour comptabilise les minutes par tâche (taches_min) et expose nb_substantielles(exclure=...).
  • Clé de tri du placement (sécables comme non sécables) = (nb_substantielles, charge, jour) : d'abord le jour le moins « chargé en tâches », puis le moins chargé en minutes, puis le plus tôt.
  • Constante SEUIL_TACHE_SUBSTANTIELLE = 60 min.

Tests

  • test_engine_repartition_cap_taches_substantielles (cap 3 puis escalade à 4 sur échéance serrée).
  • test_engine_repartition_etale_sans_echeance (1/jour sans échéance).
  • 640 tests au vert (python3 -m pytest).

🤖 Generated with Claude Code

https://claude.ai/code/session_014HMmo12Zzmj91wAzVeKMf5


Generated by Claude Code

…3/jour)

Le moteur repartit desormais en priorite selon le NOMBRE de taches
substantielles (>= 1 h) par jour, et non plus seulement selon les minutes :
il remplit d'abord les jours qui en comptent le moins. Le seuil de 3 taches
d'au moins une heure par jour monte naturellement a 4, 5... quand tous les
jours possibles sont deja pleins, tout en respectant la fenetre imposee par
l'echeance ou les evenements fixes.

Objectif : bien etaler la charge plutot que de tout regrouper des qu'un
creneau se libere puis n'avoir plus rien a faire ensuite.

- _PlanJour compte les minutes par tache (taches_min) et expose
  nb_substantielles() ; cle de tri de placement = (nb_substantielles, charge,
  jour) pour secables comme non secables.
- Les taches < 1 h et les evenements fixes ne comptent pas dans ce plafond.
- Tests : cap 3 puis escalade a 4 sur echeance serree ; etalement 1/jour sans
  echeance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014HMmo12Zzmj91wAzVeKMf5
@Cyril-CB Cyril-CB marked this pull request as ready for review July 1, 2026 00:56

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 347119cfc2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread planificateur_engine.py Outdated
…(P2)

En excluant la tache en cours du comptage des taches substantielles, un jour
ayant deja recu un premier morceau de cette tache paraissait « vide » (0 tache
substantielle) et continuait de passer devant les jours portant une autre
tache, quelle que soit sa charge. Une longue mission secable pouvait donc se
concentrer sur un seul jour au lieu de s'etaler, contournant la nouvelle regle
de repartition et l'equilibrage des longues missions.

Correctif : nb_substantielles() compte desormais toutes les taches (y compris
celle en cours). Un jour ou la tache a deja pose un morceau parait « plus
rempli », ce qui pousse ses morceaux suivants a s'etaler.

Test ajoute : une mission de 6h s'etale bien sur 3 jours meme quand 2 des 3
jours portent deja une autre tache.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014HMmo12Zzmj91wAzVeKMf5
@Cyril-CB Cyril-CB merged commit 6be3fdc into main Jul 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants