Skip to content

feat(tooling,#8889): passe de rattrapage LLM des archives RooSync sans résumé (--summarize) - #19049

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/8889-archive-summary-backfill
Oct 4, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/8889-archive-summary-backfill

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling -- lane myia-po-2027:CoursIA -- prev: LIGHT/notebook-python #18986

Summary

Ferme le critère d'acceptation restant de #8889 : la passe de rattrapage LLM elle-même (critère 2 du body), sur l'organe de détection déjà mergé en #17261. Nouveau mode --summarize dans scripts/roosync_archive_backfill.py (extension de l'organe existant plutôt que fichier neuf — règle « mettre à jour plutôt que créer ») :

  • pour chaque archive *-fallback.md de la fenêtre (plus récentes d'abord, --limit/--days, défauts 10/30 jours conformes aux bornes du body), demande un résumé à un endpoint OpenAI-compatible (--base-url/--model, défaut = condenseur vLLM:5002 du body ; testé ici sur Ollama qwen2.5:7b-instruct-q4_K_M) ;
  • insère le bloc ## Résumé (backfill) des N messages archivés avant le premier séparateur --- du corps, avec ligne de provenance (backfilledAt, backfillModel) ;
  • bascule llmGenerated: false → true et fallbackTruncation: true → false ;
  • s'arrête au premier échec LLM (exit 2 si rien traité, exit 1 si partiel) — jamais de martèlement d'un service en boot ;
  • --dry-run : candidates sans appel LLM ni écriture.

Acceptance #8889, critère par critère

Critère du body État
1. Détection via frontmatter, pas le nom seul Déjà couvert #17261 (réutilisé tel quel : detect_fallback_archives)
2. Archive re-résumée : llmGenerated: true + contenu intact, seul le bloc résumé ajouté Couvert ici — test test_summarize_flips_flags_and_inserts_block.assert la région messages verbatim byte-identique avant/après
3. Idempotent : deux passes = zéro changement Couvert — les archives traitées sortent du prédicat de détection (test_summarize_idempotent_second_pass_noop) + garde in-file sur le marqueur de bloc
4. Jamais dans le chemin d'un append Couvert par construction — CLI autonome, l'auto-condensation n'est pas touchée (aucun import/chemin partagé)
5. Compteur avant/après sur le stock réel Voir § Passe live ci-dessous

Tests

python -m pytest scripts/tests/test_roosync_archive_backfill.py -q → 19 passed (12 existants intacts + 7 nouveaux : flags/bloc/verbatim, idempotence, exit 2 injoignable, arrêt mi-passe exit 1, fenêtre jours, dry-run sans LLM ni écriture, corps sans séparateur).

Passe live (stock réel, GDrive partagé)

Mesure au 2026-10-04T02:29Z (GDrive partagé, fenêtre --days 30) :

  • Avant : 496 fallback détectées (428 dans la fenêtre) — le stock croît avec les wedges : 537 à la date de l'issue → 403 le 2026-10-01 → 496 à la passe.
  • Passe bornée --limit 6 sur Ollama local : 6/6 OK — résumés de 1637 à 2139 caractères (Argumentum ×2, Maintenance, CoursIA-2 ×2, 2025-Epita-IS), frontmatter basculé + provenance backfilledAt/backfillModel sur chaque fichier (exemple vérifié sur disque : workspace-Maintenance-2026-10-03T10-54-02-fallback.md).
  • Après : 490 fallback détectées (422 dans la fenêtre), re-scan post-passe — les 6 traitées sont sorties du prédicat de détection : idempotence mesurée sur stock réel.
  • Région messages verbatim byte-identique avant/après : verrouillée par test unitaire et vérifiée à l'œil sur l'archive Maintenance.

Le stock restant (490) se résorbe par relances de l'organe mergé (borne conseillée 10/passe) ; note opérationnelle : les archives d'octobre portent fallbackError: qwen3.8-flash / glm-4.7 budget-exhausted — la pile condenseur a évolué depuis le body de l'issue ; les flags --base-url/--model couvrent tout endpoint OpenAI-compatible, le défaut reste celui documenté dans #8889.

Verdict SOTA

SOTA-OK — vrai LLM local (Ollama qwen2.5:7b-instruct-q4_K_M, 32k ctx) pour la passe live ; le défaut CLI reste le condenseur canonique du body (vLLM:5002, injoignable sur cette lane au moment de la passe — l'organe est endpoint-agnostique par design). Aucune sortie fabriquée : chaque résumé écrit vient d'une complétion réelle.

Hors scope (inchangé)

Stabilisation vLLM (watchdogs dédiés), dashboard vivant, format d'archive existant.

Closes #8889

🤖 Generated with Claude Code

…s resume (--summarize)

Etend l'organe #17261 : mode --summarize borne (limit/days, plus recentes
d'abord), endpoint OpenAI-compatible (vLLM par defaut, teste sur Ollama
qwen2.5:7b), bloc resume insere avant les messages verbatim, bascule
llmGenerated/fallbackTruncation + provenance backfilledAt/backfillModel,
arret au premier echec LLM (exit 2/1), --dry-run sans ecriture. 7 tests
nouveaux (19/19 verts) ; passe live 6/6 sur stock reel GDrive : 496 -> 490.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA-2
pr: 19049
head: 0970229
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 6cc22c3054d5613ebf774fa0a291715c9a2b8eddccaec461c57368aa0f488b39
diff-files: 2
diff-additions: 384
diff-deletions: 5
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Substance (ai-01:CoursIA-2, 2026-10-04) :

  • Surfaces : 1 commentaire (bot), 0 review, 0 threads inline. Tete commitee 02:33:14Z ; PR gate success @04:53:16Z = DWELL passe (2h20 ecoulees).
  • B.0 : organe rc=0 (aucune remarque vivante).
  • Scope : 2 fichiers — scripts/roosync_archive_backfill.py +223/−5, scripts/tests/test_roosync_archive_backfill.py +161 — exactement le titre : passe de rattrapage sans resume (--summarize off par defaut), RooSync dashboards : ~11.6% des archives (537/4615) n'ont jamais recu de resume — organe de backfill #8889.
  • Domaine : tooling Python, tests self-contenus ; CI verte au fold.
  • Verdict : READY — sans review preexistante, ce dossier tierce EST l'attestation ; lecture finale au coordinateur.

@github-actions github-actions Bot added the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@myia-ai-01
myia-ai-01 merged commit e5a8920 into main Oct 4, 2026
19 of 20 checks passed
@jsboige
jsboige deleted the feature/8889-archive-summary-backfill branch October 7, 2026 07:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RooSync dashboards : ~11.6% des archives (537/4615) n'ont jamais recu de resume — organe de backfill

2 participants