fix(extract-document-markdown): cadrage d'un appel d'une page, niveaux de titres déterministes - #495
Merged
Manolbh merged 1 commit intoAug 3, 2026
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 surpageCount(pages vues par CET appel) — donctotalRanges > 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 surpageCount. 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.1sur une page,# 2.2sur 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🤖 Generated with Claude Code
https://claude.ai/code/session_01NtVk6Cd5PUw8oW2aDEdh4u