Skip to content

test(seo): guard llms.txt, llms-full.txt and index.html metadata against the curriculum - #416

Merged
thierryvm merged 2 commits into
mainfrom
test/public-counters-guard
Oct 2, 2026
Merged

thierryvm merged 2 commits into
mainfrom
test/public-counters-guard

Conversation

@thierryvm

@thierryvm thierryvm commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

Summary

Phase 5d, lot 0b. The files that describe the curriculum to AI assistants and search engines (public/llms.txt, public/llms-full.txt) and the "11 modules" in the index.html metadata were checked by no test.

  • src/test/publicCounters.test.ts compares them with curriculum.ts:
    • llms.txt: module and lesson counts, each module's title, and every lesson URL of each module, in order;
    • llms-full.txt: the same counts, each module's title and lesson count, and each lesson's title and URL in the tables;
    • index.html: every "N modules" and "N leçons".
  • Its first run found 10 stale lesson titles in llms-full.txt (one GitHub lesson and nine AI lessons, renamed since). They now match the curriculum.
  • Mutation check: changing a count in each of the three files turns the matching guard red (5 failures), then the files were restored.
  • CHANGELOG, STORY, plan, ROADMAP (lots 0 and 0b ticked) and the delivery checklist updated.

Gates run locally: tsc clean, lint clean, vitest 3030 passed / 20 skipped, build OK.

🤖 Generated with Claude Code

Résumé par Sourcery

Maintenir synchronisées les descriptions publiques du programme avec le programme source et éviter que des métadonnées obsolètes liées au SEO et à l’assistant IA ne passent inaperçues.

Corrections de bugs :

  • Corriger 10 titres de leçons obsolètes dans public/llms-full.txt afin que les descriptions du programme restent exactes.

Améliorations :

  • Ajouter des contrôles qui comparent les métadonnées du programme dans llms.txt, llms-full.txt et index.html avec le programme source, notamment le nombre de modules et de leçons, les titres, les URL et l’ordre.

Documentation :

  • Mettre à jour le changelog, l’histoire du projet, la feuille de route, le plan et la liste de contrôle de livraison du programme afin de documenter les nouveaux contrôles de cohérence du contenu public et le lot de livraison terminé.

Tests :

  • Ajouter des tests validés par mutation couvrant le nombre de leçons, les métadonnées des modules et des leçons, ainsi que les URL des leçons dans le contenu public destiné au SEO et à l’assistant IA.
Original summary in English

Résumé par Sourcery

Maintenir synchronisées avec le programme source les descriptions publiques du programme utilisées par les moteurs de recherche et les assistants IA.

Correctifs :

  • Corriger 10 titres de leçons obsolètes dans public/llms-full.txt afin que la description publique du programme corresponde au programme actuel.

Améliorations :

  • Ajouter des contrôles de cohérence pour le nombre d’éléments, les métadonnées des modules et des leçons, l’ordre et les URL dans les métadonnées de llms.txt, llms-full.txt et index.html.

Documentation :

  • Mettre à jour le journal des modifications, l’historique du projet, la feuille de route, le plan et la liste de contrôle de livraison afin d’y consigner les nouveaux contrôles du contenu public et l’achèvement du lot de livraison du programme.

Tests :

  • Ajouter des tests qui vérifient les fichiers publics du programme et les métadonnées de la page d’accueil par rapport au programme source.
Original summary in English

Summary by Sourcery

Keep the public curriculum descriptions used by search engines and AI assistants synchronized with the source curriculum.

Bug Fixes:

  • Correct 10 outdated lesson titles in public/llms-full.txt so the public curriculum description matches the current curriculum.

Enhancements:

  • Add consistency guards for curriculum counts, module and lesson metadata, ordering, and URLs across llms.txt, llms-full.txt, and index.html metadata.

Documentation:

  • Update the changelog, project history, roadmap, plan, and delivery checklist to record the new public-content checks and completion of the curriculum delivery lot.

Tests:

  • Add tests that verify public curriculum files and homepage metadata against the source curriculum.

…nst the curriculum

The files that describe the curriculum to AI assistants and search engines
had no test. A new guard compares them with curriculum.ts: module and lesson
counts, module titles, and each lesson's title and URL, in order.

Its first run found 10 lesson titles in llms-full.txt that had been renamed
since (one GitHub lesson, nine AI lessons); they now match the curriculum.
Mutating a count in each file turns the matching guard red.

Phase 5d, lot 0b.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
terminal-learning Ready Ready Preview Oct 2, 2026 5:32pm UTC

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @thierryvm, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 1 day and 2 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Oct 2, 2026

Copy link
Copy Markdown

Guide du reviewer

Cette PR ajoute un garde-fou Vitest piloté par le curriculum, qui maintient la synchronisation de llms.txt, llms-full.txt et de toutes les métadonnées pertinentes des modules/leçons de index.html avec le curriculum source, corrige dix titres de leçons obsolètes détectés par le garde-fou et met à jour la documentation de livraison.

Diagramme de séquence de l’exécution du garde-fou des métadonnées du curriculum

sequenceDiagram
    participant Test as publicCounters.test.ts
    participant Curriculum as curriculum.ts
    participant LLMs as public/llms.txt
    participant Full as public/llms-full.txt
    participant Index as index.html
    Test->>Curriculum: Lire les données des modules et des leçons
    Test->>LLMs: Vérifier les nombres, les titres et les URL des leçons
    Test->>Full: Vérifier les nombres, les titres des leçons et les URL
    Test->>Index: Vérifier les nombres de métadonnées des modules et des leçons
    alt les métadonnées correspondent au curriculum
        Test-->>Test: Les tests Vitest réussissent
    else métadonnées obsolètes détectées
        Test-->>Test: Les tests Vitest échouent
    end
Loading

Diagramme de flux des vérifications de cohérence des métadonnées du curriculum

flowchart LR
    Curriculum[curriculum.ts]
    Guard[src/test/publicCounters.test.ts]
    LLMs[public/llms.txt]
    Full[public/llms-full.txt]
    Index[index.html metadata]
    Result{Tous les nombres, titres et URL correspondent}
    Curriculum --> Guard
    LLMs --> Guard
    Full --> Guard
    Index --> Guard
    Guard --> Result
    Result -->|pass| CI[CI verte]
    Result -->|fail| Fix[Mettre à jour les métadonnées publiques]
Loading

Modifications au niveau des fichiers

Modification Détails Fichiers
Ajout d’une couverture de régression basée sur le curriculum pour le contenu public destiné à l’IA/aux moteurs de recherche et les métadonnées de la page d’accueil.
  • Lit la source du curriculum et les fichiers publics depuis le disque.
  • Valide les totaux des modules et des leçons, l’ordre et les titres des modules, ainsi que les URL des leçons dans llms.txt.
  • Valide les titres et nombres de modules, ainsi que les titres et URL des leçons dans llms-full.txt.
  • Valide chaque occurrence du nombre de modules et de leçons dans les métadonnées de index.html.
  • Utilise des vérifications par mutation pour confirmer que des compteurs incorrects entraînent des échecs.
src/test/publicCounters.test.ts
Synchronisation de l’export complet du curriculum de l’assistant IA avec les leçons renommées.
  • Mise à jour de dix titres de leçons obsolètes tout en préservant leurs liens vers le curriculum et la structure des tableaux.
public/llms-full.txt
Enregistrement de l’achèvement de la phase 5d, lot 0b, et mise à jour de la documentation de livraison du projet.
  • Documentation des nouveaux garde-fous et des corrections de titres obsolètes dans le journal des modifications et l’historique du projet.
  • Marquage des lots 0 et 0b comme terminés dans la feuille de route et le plan.
  • Ajout de publicCounters aux exigences de test de la checklist de livraison du curriculum.
CHANGELOG.md
STORY.md
docs/ROADMAP.md
docs/plan.md
docs/processes/curriculum-delivery-checklist.md

Conseils et commandes

Interagir avec Sourcery

  • Déclencher une nouvelle review : commentez @sourcery-ai review sur la pull request.
  • Poursuivre les discussions : répondez directement aux commentaires de review de Sourcery.
  • Générer une issue GitHub à partir d’un commentaire de review : demandez à Sourcery de créer une issue à partir d’un commentaire de review en y répondant. Vous pouvez également répondre à un commentaire de review avec @sourcery-ai issue pour créer une issue à partir de celui-ci.
  • Générer un titre de pull request : écrivez @sourcery-ai n’importe où dans le titre de la pull request pour générer un titre à tout moment. Vous pouvez également commenter @sourcery-ai title sur la pull request pour générer à nouveau le titre à tout moment.
  • Générer un résumé de pull request : écrivez @sourcery-ai summary n’importe où dans le corps de la pull request pour générer un résumé de PR à tout moment, exactement à l’endroit souhaité. Vous pouvez également commenter @sourcery-ai summary sur la pull request pour générer à nouveau le résumé à tout moment.
  • Générer le guide du reviewer : commentez @sourcery-ai guide sur la pull request pour générer à nouveau le guide du reviewer à tout moment.
  • Résoudre tous les commentaires de Sourcery : commentez @sourcery-ai resolve sur la pull request pour résoudre tous les commentaires de Sourcery. Cette commande est utile si vous avez déjà traité tous les commentaires et ne souhaitez plus les voir.
  • Ignorer toutes les reviews de Sourcery : commentez @sourcery-ai dismiss sur la pull request pour ignorer toutes les reviews existantes de Sourcery. Cette commande est particulièrement utile si vous souhaitez repartir de zéro avec une nouvelle review : n’oubliez pas de commenter @sourcery-ai review pour déclencher une nouvelle review !

Personnaliser votre expérience

Accédez à votre tableau de bord pour :

  • Activer ou désactiver des fonctionnalités de review telles que le résumé de pull request généré par Sourcery, le guide du reviewer, et d’autres fonctionnalités.
  • Modifier la langue des reviews.
  • Ajouter, supprimer ou modifier des instructions de review personnalisées.
  • Ajuster d’autres paramètres de review.

Obtenir de l’aide

Original review guide in English

Reviewer's Guide

This PR adds a curriculum-driven Vitest guard that keeps llms.txt, llms-full.txt, and all relevant index.html module/lesson metadata synchronized with the source curriculum, fixes ten stale lesson titles found by the guard, and updates delivery documentation.

Sequence diagram for curriculum metadata guard execution

sequenceDiagram
    participant Test as publicCounters.test.ts
    participant Curriculum as curriculum.ts
    participant LLMs as public/llms.txt
    participant Full as public/llms-full.txt
    participant Index as index.html
    Test->>Curriculum: Read module and lesson data
    Test->>LLMs: Check counts titles and lesson URLs
    Test->>Full: Check counts titles lesson titles and URLs
    Test->>Index: Check module and lesson metadata counts
    alt metadata matches curriculum
        Test-->>Test: Vitest tests pass
    else stale metadata detected
        Test-->>Test: Vitest tests fail
    end
Loading

Flow diagram for curriculum metadata consistency checks

flowchart LR
    Curriculum[curriculum.ts]
    Guard[src/test/publicCounters.test.ts]
    LLMs[public/llms.txt]
    Full[public/llms-full.txt]
    Index[index.html metadata]
    Result{All counts titles and URLs match}
    Curriculum --> Guard
    LLMs --> Guard
    Full --> Guard
    Index --> Guard
    Guard --> Result
    Result -->|pass| CI[CI green]
    Result -->|fail| Fix[Update public metadata]
Loading

File-Level Changes

Change Details Files
Added curriculum-backed regression coverage for public AI/search-engine content and homepage metadata.
  • Reads the curriculum source and public files from disk.
  • Validates module and lesson totals, module ordering/titles, and lesson URLs in llms.txt.
  • Validates module titles/counts plus lesson titles and URLs in llms-full.txt.
  • Validates every module and lesson count occurrence in index.html metadata.
  • Uses mutation checks to confirm incorrect counters cause failures.
src/test/publicCounters.test.ts
Synchronized the full AI-assistant curriculum export with renamed lessons.
  • Updated ten stale lesson titles while preserving their curriculum links and table structure.
public/llms-full.txt
Recorded completion of Phase 5d Lot 0b and updated project delivery documentation.
  • Documented the new guards and stale-title fixes in the changelog and project story.
  • Marked Lots 0 and 0b complete in the roadmap and plan.
  • Added publicCounters to the curriculum delivery checklist test requirements.
CHANGELOG.md
STORY.md
docs/ROADMAP.md
docs/plan.md
docs/processes/curriculum-delivery-checklist.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thierryvm
thierryvm merged commit b68d583 into main Oct 2, 2026
4 checks passed
@thierryvm
thierryvm deleted the test/public-counters-guard branch October 2, 2026 17:35

This branch was successfully deployed

1 active deployment
Preview — 66cc28e2 Deployed Oct 2, 2026 by vercel[bot]
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