# Quiz — Session 6 : Claude Code & CI/CD

**Programme :** Applied AI — Niveau Avancé — Instructeur : Yann Isola
**Format :** 10 QCM (questionnaire à choix multiples) — une seule bonne réponse par question — durée conseillée : 12 minutes.
**Niveau :** profondeur certification *Claude Certified Architect* — plusieurs questions sont des scénarios de jugement.

---

**Q1. Qu'est-ce qui distingue fondamentalement Claude Code d'un assistant de chat qui parle de code ?**

- A. Il utilise un modèle plus grand, spécialisé en programmation
- B. C'est un agent : il boucle — lit des fichiers, modifie, exécute des commandes, observe les résultats et corrige — dans un périmètre de permissions défini par l'utilisateur
- C. Il fonctionne entièrement hors ligne, sans appel au modèle
- D. Il ne peut travailler que sur un seul fichier à la fois

**Q2. Quel est le rôle du fichier `CLAUDE.md` ?**

- A. C'est le journal des conversations passées avec Claude Code
- B. C'est le fichier de configuration des permissions d'outils
- C. C'est un fichier d'instructions projet chargé automatiquement au début de chaque session : vue d'ensemble, conventions, commandes courantes, pièges connus
- D. C'est le fichier où Claude Code écrit ses plans avant de les exécuter

**Q3. La commande `/init` de Claude Code…**

- A. Réinitialise toutes les permissions à leurs valeurs par défaut
- B. Inspecte le dépôt et génère un premier brouillon de `CLAUDE.md`, que l'équipe doit ensuite retravailler
- C. Initialise un nouveau dépôt Git vide
- D. Efface le contexte de la conversation en cours

**Q4. Dans `.claude/settings.json`, l'entrée `"Bash(npm test:*)"` dans la liste `allow` signifie :**

- A. Toutes les commandes shell sont autorisées si npm est installé
- B. Les commandes commençant par `npm test` sont autorisées sans confirmation ; les autres commandes `Bash` restent soumises au régime normal (confirmation, ou refus en headless)
- C. La commande `npm test` est interdite
- D. Claude Code lancera `npm test` automatiquement après chaque modification

**Q5. Scénario : un pipeline CI utilise Claude Code en mode headless pour de la revue de PR (lecture du diff, production d'un commentaire). Quel jeu de permissions un architecte doit-il retenir ?**

- A. Tous les outils autorisés, pour éviter les blocages en pleine nuit
- B. `Read`, `Glob`, `Grep`, `LS`, plus les variantes `Bash(git diff:*)`/`Bash(git log:*)` — et rien d'autre : ni écriture, ni `WebFetch`, ni shell libre
- C. Uniquement `Write`, pour rédiger le commentaire de revue
- D. `Bash` sans restriction, car la CI est déjà un environnement isolé

**Q6. Quelle est la différence de nature entre une règle écrite dans `CLAUDE.md` et un hook `PreToolCall` ?**

- A. Aucune : les deux garantissent le même niveau de contrôle
- B. Le `CLAUDE.md` est plus fiable car il est lu à chaque session
- C. L'instruction de prompt est probabiliste (le modèle la suit presque toujours) ; le hook est déterministe (du code qui s'exécute à chaque fois et peut bloquer l'appel) — les exigences de sécurité vont dans les hooks ou les permissions
- D. Les hooks ne fonctionnent qu'en mode headless, `CLAUDE.md` qu'en mode interactif

**Q7. L'équipe veut que chaque fichier modifié par Claude Code soit immédiatement reformaté par le formateur maison, sans exception. Quel mécanisme ?**

- A. Une instruction en gras dans `CLAUDE.md`
- B. Un hook `PreToolCall` qui bloque toutes les éditions
- C. Un hook `PostToolCall` filtré sur les outils d'édition (`Edit`, `MultiEdit`, `Write`), qui lance le formateur après chaque modification
- D. Un hook `Stop` qui reformate tout le dépôt à la fin de la session

**Q8. En mode headless (`claude -p "..."`), que se passe-t-il quand Claude Code veut utiliser un outil non autorisé par la configuration ?**

- A. Une fenêtre de confirmation s'affiche sur le runner CI
- B. L'outil est automatiquement autorisé après 30 secondes sans réponse
- C. L'action est refusée — il n'y a personne pour confirmer — et la tâche peut rester incomplète : d'où la nécessité de pré-calibrer les permissions au strict nécessaire de la tâche
- D. Claude Code bascule automatiquement en mode interactif

**Q9. Scénario : un job CI de génération de tests dispose de `Write` et tourne sur un runner contenant des secrets de déploiement. La PR analysée provient d'un contributeur externe. Quel est le risque principal et sa mitigation prioritaire ?**

- A. Aucun risque : le modèle refuse toujours les instructions malveillantes
- B. L'injection de prompt : le code de la PR peut contenir des instructions cachées que l'agent lira ; mitigation : permissions minimales (limiter `Write`, aucun outil réseau, pas de shell libre), hooks de garde-fou, et isolation du runner vis-à-vis des secrets
- C. Le dépassement de quota d'API, qu'on résout en augmentant le timeout
- D. La lenteur du modèle, qu'on résout avec un modèle plus rapide

**Q10. À quoi servent respectivement `/compact` et `/cost` en session interactive longue ?**

- A. `/compact` réduit la taille des fichiers du projet ; `/cost` affiche le prix de l'abonnement
- B. `/compact` compresse l'historique de conversation (résumé) pour libérer du contexte et maintenir la qualité ; `/cost` affiche la consommation de tokens et le coût de la session — deux réflexes de maîtrise des sessions longues, complétés par le prompt caching qui facture les préfixes stables à tarif réduit ⚠ (taux : voir grille tarifaire du jour)
- C. `/compact` fusionne les commits Git ; `/cost` estime le temps de développement économisé
- D. Les deux commandes ne sont disponibles qu'en mode headless

---

## Corrigé et commentaires

| # | Réponse | Commentaire certification |
|---|---|---|
| Q1 | **B** | Le mot-clé est *agentique* : boucle action → observation → correction, sous permissions. |
| Q2 | **C** | `CLAUDE.md` = mémoire contextuelle permanente et versionnée du projet. Structure canonique : vue d'ensemble, conventions, commandes, gotchas. |
| Q3 | **B** | `/init` produit un *brouillon*. À l'examen, méfiez-vous des réponses qui présentent une génération automatique comme un livrable final. |
| Q4 | **B** | Les motifs d'auto-acceptation sont par préfixe de commande. Le `deny` l'emporte toujours sur le `allow`. |
| Q5 | **B** | Moindre privilège : une revue lit, elle n'écrit pas. Chaque outil superflu élargit la surface d'attaque (notamment face à l'injection de prompt). |
| Q6 | **C** | LA distinction d'architecte de la session : persuasion (prompt) vs capacité (permissions) vs contrôle (hooks). |
| Q7 | **C** | « Après chaque modification » → `PostToolCall` filtré. `Stop` (D) est trop tardif et ne couvre pas les vérifications intermédiaires. |
| Q8 | **C** | Conséquence directe de l'absence d'humain dans la boucle. Question quasi certaine à l'examen sous une forme ou une autre. |
| Q9 | **B** | Le contenu tiers lu par l'agent est un vecteur d'injection. La défense n'est pas la confiance dans le modèle mais la réduction du périmètre : permissions, hooks, isolation des secrets. |
| Q10 | **B** | Gestion des sessions longues : contexte (`/compact`), visibilité coûts (`/cost`), économie structurelle (prompt caching). |

**Seuil de préparation certification : 8/10.** En dessous, retravailler en priorité les questions Q5, Q6, Q8, Q9 (jugement d'architecte).
