Skip to content

fix(extract-document-markdown): cadrage d'un appel d'une page, niveaux de titres déterministes - #495

Merged
Manolbh merged 1 commit into
mainfrom
fix/extract-document-markdown-single-page-label-heading-levels
Aug 3, 2026
Merged

fix(extract-document-markdown): cadrage d'un appel d'une page, niveaux de titres déterministes#495
Manolbh merged 1 commit into
mainfrom
fix/extract-document-markdown-single-page-label-heading-levels

Conversation

@Manolbh

@Manolbh Manolbh commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Résumé

Deux défauts établis par essais répétés (3 exécutions identiques) sur le même document réel de trois pages, avec le code actuellement déployé.

D1 — le libellé d'extrait fait perdre les figures. À taille de lot par défaut (1 page/appel), un document de 3 pages fait 3 appels. La condition qui choisissait entre le libellé « extrait » (avec restriction) et le libellé « document complet » portait sur totalRanges (nombre total d'appels du job), pas sur pageCount (pages vues par CET appel) — donc totalRanges > 1 était toujours vrai dès que le document a plus d'une page, et la page 3, pourtant seule dans son propre appel, recevait quand même l'étiquette « ceci est un extrait [...] Transcris uniquement ce qui est présent dans cet extrait. ». La même page importée seule (sans ce libellé) décrivait fidèlement ses six figures ; avec le libellé, plus aucune. La condition porte désormais sur pageCount. Le repère de position (quelle page, sur combien au total) reste envoyé dans tous les cas — il n'a aucun effet restrictif documenté. Le libellé multi-pages reste rigoureusement inchangé, mot pour mot (verrouillé par test).

D2 — les niveaux de titres divergent d'une page à l'autre. Sur les trois exécutions, sans exception : ## 2.1 sur une page, # 2.2 sur la suivante — deux sections de même rang. Cause structurelle : à une page par appel, les appels partent en parallèle et aucun ne voit le résultat des autres. Ajoute une règle calculable page par page et envoyée sans condition de nombre de pages : le niveau d'un titre se déduit du nombre de segments de sa numérotation (« 2.1 » → ##, « 2.1.3 » → ###, « 2. » → #), un fait imprimé sur la page elle-même, identique quel que soit le découpage. Angle mort assumé et documenté en commentaire : un titre non numéroté qui n'ouvre pas le document retombe sur un niveau par défaut (##), ce qui peut ne pas refléter la vraie hiérarchie d'un document entièrement dépourvu de numérotation — limite inhérente à une règle strictement page-locale.

Aucun changement de modèle, taille de lot, concurrence, schéma JSON, numérotation serveur des pages, réconciliation, ou assemblage final. Le garde-fou générique du chantier précédent (qui vérifie qu'aucune consigne ne peut être omise du fait du nombre de pages) couvre la nouvelle règle sans modification.

Test plan

  • npm test : 1925 → 1932 tests, 0 échec avant/après
  • Nouveau test verrouillant mot pour mot le libellé multi-pages inchangé
  • Nouveaux tests sur le libellé single-page (position conservée, extrait/restriction absents)
  • Nouveaux tests sur le contenu et l'envoi inconditionnel de la règle de niveaux de titres
  • À vérifier après déploiement sur le document réel de 3 pages : figures de la page 3 présentes, niveaux de titres cohérents entre pages, pas de régression sur l'assemblage/numérotation

🤖 Generated with Claude Code

https://claude.ai/code/session_01NtVk6Cd5PUw8oW2aDEdh4u

…rait, niveaux de titres déterministes

Constaté sur trois exécutions identiques d'un document réel de trois pages : la page 3, seule dans
son appel (chunk size 1 par défaut), perdait toutes ses figures dès lors qu'elle recevait le libellé
« ceci est un extrait [...] Transcris uniquement ce qui est présent dans cet extrait. » — la même
page importée seule, sans ce libellé, décrivait fidèlement ses six figures. La condition qui
déclenchait ce libellé portait sur totalRanges (nombre total d'appels du job) au lieu de pageCount
(pages vues par CET appel) ; elle porte désormais sur pageCount, en conservant le repère de position
(quelle page, sur combien au total) qui n'a lui aucun effet restrictif documenté. Le libellé
multi-pages reste rigoureusement inchangé, mot pour mot.

Constaté aussi, sans exception sur les trois mêmes exécutions : des titres de même rang recevaient des
niveaux Markdown différents d'une page à l'autre (## puis #), les appels étant parallèles et sans
visibilité sur le résultat des autres. Ajoute une règle envoyée sans condition de nombre de pages :
le niveau d'un titre se déduit du nombre de segments de sa numérotation, un fait imprimé sur la page
elle-même, calculable et identique quel que soit le découpage en lots.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NtVk6Cd5PUw8oW2aDEdh4u
@Manolbh
Manolbh merged commit 67305d5 into main Aug 3, 2026
2 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.

1 participant