Repository navigation
fix(ci,#18668): soft_deadlock_detector test date-dependant — horloge _now() injectable - #18846
Conversation
…_now() injectable Le test_main_json_and_fail_on_findings_rc2 ancre ses fixtures au NOW dur 2026-10-01 12:00Z mais main() lisait datetime.now() reel : 24 h apres la redaction, le churn (commentaires humains a <24 h de NOW) sort de la fenetre --window-hours, la conjonction OPEN+age+churn+commit se brise et rc vaut 0 au lieu de 2. Mesure sur main le 2026-10-02 : meme fixture, analyze(now fixture) = 1 finding, analyze(now reel) = 0. Fix : helper _now() dans le detecteur (meme pattern d'injection que _default_runner) + monkeypatch vers NOW dans le test. 17/17 verts. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Trivial-diff advisory (#15740, non bloquant). |
|
[ADJOINT PREFLIGHT] Verdict BLOCKED -- champ bloquant :
Dossier emis par l'adjoint |
|
[ADJOINT PREFLIGHT] Ce dossier remplace le commentaire 5953025958, périmé à la relecture du parent. Relecture parent : tête inchangée, OPEN et MERGEABLE ; 19 noms de checks terminés, PR gate failure résiduel, B.0 rc=0. Body, diff, deux commentaires bots et dossier antérieur lus ; 0 review et 0 thread. Scope conforme : helper horloge injectable et monkeypatch du test, sans notebook ni prose pédagogique. |
|
[ADJOINT PREFLIGHT] |
Update-branch post-merge #18846 : apporte le fix sdd (_now() injectable) — le test rc2 vieux de la base restait rouge sur cette branche alors que main est fixe. C'etait le SEUL rouge residuel de cette PR (tree-lock fix + gate provider verts par ailleurs). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Grain: MED/guard — lane myia-po-2024:CoursIA-2 — prev: MED/genai #18844
Summary
Réparation d'un rouge de jambe
Scripts & Notebook-Tools Testsapparu sur main le 2026-10-02 (observé sur la PR #18798, reproduit sur main local avant tout geste) :test_main_json_and_fail_on_findings_rc2échoue avecassert main(...) == 2rendu0. See #15511 (EPIC porteur de l'organe, P2), defect introduit par #18668.Cause mesurée
Le test ancre ses fixtures à
NOW = datetime(2026, 10, 1, 12, 0, 0, tzinfo=utc)(codé dur), maismain()du détecteur lisaitdatetime.now(timezone.utc)réel. La conjonction #15511 P2 exige « churn commentaires humains > 5/dans la fenêtre 24 h » : 24 h après la rédaction du test, les commentaires des fixtures (datés relativement au NOW dur) sortent de la fenêtre mesurée au now réel → 0 finding → rc 0 ≠ 2.Preuve de divergence (reproduit avant le fix, même fixture
_pr(14821, 120, comments=_humans(7))) :analyze(prs, NOW_fixture)→ 1 findinganalyze(prs, datetime.now())→ 0 findingLe test était mécaniquement condamné à rougir chaque jour — il a été introduit vert le 2026-10-01 au soir (#18668) et a cassé au premier passage du 2026-10-02.
Fix
scripts/ci/soft_deadlock_detector.py: helper_now()(défautdatetime.now(timezone.utc), docstring documentant le piège) etmain()lit_now(). Même pattern d'injection que_default_runnerdéjà établi dans ce module.scripts/tests/test_soft_deadlock_detector.py:monkeypatch.setattr(sdd, "_now", lambda: NOW)dans le test demain(), avec commentaire de mesure datée.test_main_operational_failure_rc1(l'autre test passant parmain()) ne dépend pas de l'horloge (panne gh → rc 1) — pas de patch nécessaire.Validation
python -m pytest scripts/tests/test_soft_deadlock_detector.py -q→ 17 passed sur la branche.1 failed in 0.36s) — base-inherited, pas porté par une PR en cours.soft_deadlock_detector.py --helprc 0.🤖 Generated with Claude Code