Skip to content

fix(run-analysis): dériver les blocs d'architecture professorale du Markdown - #491

Merged
Manolbh merged 1 commit into
mainfrom
fix/professoral-architecture-markdown-source
Aug 2, 2026
Merged

fix(run-analysis): dériver les blocs d'architecture professorale du Markdown#491
Manolbh merged 1 commit into
mainfrom
fix/professoral-architecture-markdown-source

Conversation

@Manolbh

@Manolbh Manolbh commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Résumé

  • Les blocs d'architecture professorale (chapter_professoral_architecture_blocks) étaient dérivés de analysis_runs.raw_text (texte brut du PDF, heuristiques), alors que la transcription Markdown (document_markdown) est la source canonique lue par generate-course-v3 et generate-atomic-knowledge. Les offsets stockés n'étaient donc interprétables que dans un texte que plus aucun consommateur en aval ne lit.
  • _shared/professoral-document-structure.ts (nouveau, module pur) construit désormais la hiérarchie et la provenance de page depuis le Markdown : titres ATX (#) avec repli heuristique conservé (aucune transcription réelle disponible pour garantir un usage systématique de la syntaxe ATX), et marqueurs <!-- source-page: N --> réels au lieu de pages devinées.
  • Le découpage en pages (splitMarkdownIntoPages) est mutualisé dans _shared/markdown-pages.ts (déplacé depuis generate-atomic-knowledge/page-chunks.ts, qui le ré-exporte à l'identique — tests inchangés, comportement inchangé).
  • _shared/professoral-architecture.ts : version bumpée v1v2 et extraction_metadata.source_text_kind = "document_markdown" sur chaque bloc, pour qu'un consommateur futur sache sans deviner à quel texte les offsets d'un bloc se rapportent — important car les blocs déjà en base (v1, offsets texte brut) et les nouveaux (v2, offsets Markdown) coexisteront le temps des ré-analyses.
  • run-analysis/index.ts : vérifie la disponibilité de document_markdown (statut done) avant de construire les blocs professoraux ; les ignore avec un diagnostic explicite (skipped_document_markdown_not_ready / skipped_document_markdown_failed) si la transcription n'est pas prête, sans jamais retomber sur le texte brut. L'ancrage des connaissances élémentaires sur raw_text (mécanisme distinct, buildSourceAnchorForAtomicKnowledge) reste inchangé.

Impact production

  • Edge Function déployée : ce changement modifie la nature des données écrites dans chapter_professoral_architecture_blocks à partir du prochain déploiement. Aucune migration nécessaire (colonnes déjà existantes). Aucun déploiement exécuté depuis cette session.
  • Les blocs déjà en base (v1, coordonnées texte brut) ne sont pas touchés rétroactivement ; ils sont remplacés document par document au fil des ré-analyses.

Test plan

  • npm test : 1904 tests, 0 échec (1881 avant ce changement)
  • Tests de comportement réels ajoutés pour professoral-document-structure.ts (hiérarchie par niveaux ATX, provenance de page, extrait conforme aux offsets, repli heuristique, mode diaporama vs continu)
  • Tests ajoutés garantissant qu'aucun bloc n'est produit sans transcription Markdown, et que version/métadonnées identifient la source des coordonnées
  • Tests existants adaptés (ancrage devenu ambigu par la 2ᵉ lecture de document_markdown) plutôt que supprimés
  • À vérifier après déploiement : ré-analyser un document réel (slides et handout) et inspecter extraction_metadata pour confirmer la proportion de titres ATX réels

https://claude.ai/code/session_019dz6K24hpfgRmdX8zZ182S

…arkdown

Les blocs d'architecture professorale étaient construits depuis
analysis_runs.raw_text (heuristiques sur texte brut), alors que la
transcription Markdown est la source canonique lue par generate-course-v3 et
generate-atomic-knowledge. Les offsets stockés n'étaient donc interprétables
que dans un texte que plus aucun consommateur ne lit, et rien ne garantissait
que la transcription soit prête au moment où run-analysis construisait ces
blocs.

- _shared/professoral-document-structure.ts (nouveau) : construit la
  hiérarchie et la provenance de page depuis le Markdown (titres ATX avec
  repli heuristique, marqueurs <!-- source-page: N --> réels), sans plus
  deviner les frontières de page.
- _shared/markdown-pages.ts (nouveau) : découpage en pages mutualisé depuis
  generate-atomic-knowledge/page-chunks.ts (ré-exporté à l'identique, tests
  inchangés) pour éviter de le réimplémenter.
- _shared/professoral-architecture.ts : version bumpée v1->v2 et
  extraction_metadata.source_text_kind="document_markdown" sur chaque bloc,
  pour qu'un consommateur sache sans deviner à quel texte ses offsets se
  rapportent.
- run-analysis/index.ts : vérifie la disponibilité de document_markdown avant
  de construire les blocs ; les ignore avec un diagnostic explicite
  (skipped_document_markdown_not_ready/failed) si la transcription n'est pas
  prête, sans jamais retomber sur le texte brut. L'ancrage des connaissances
  élémentaires sur raw_text reste inchangé (mécanisme distinct).

npm test : 1904 tests, 0 échec (1881 avant ce changement).

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