How to do a cherry-pick that includes multiple commits?

Yes. Git lets you cherry-pick multiple commits in several ways.

### Cherry-pick specific commits

```bash
git cherry-pick <commit1> <commit2> <commit3>
```

Example:

```bash
git cherry-pick a1b2c3 d4e5f6 789abcd
```

Git applies them in the order you provide.

---

### Cherry-pick a range of commits

You can cherry-pick consecutive commits using a range:

```bash
git cherry-pick <start_commit>^..<end_commit>
```

Example:

```bash
git cherry-pick a1b2c3^..d4e5f6
```

That includes:

* `a1b2c3`

🦑 Git - Rebase ff-only workflow

# Fiche ponctuelle — Rebase + merge fast-forward (workflow git linéaire)

**Contexte de capture :** session memory-grep, Phase 1a (intégration de la feature branch sur main), 2026-04-28.
Question utilisateur : explication pédagogique du rebase, du merge fast-forward, et du combo `rebase + --ff-only` figé dans le CLAUDE.md projet.

---

## TL;DR

| Opération | Effet |
|-----------|-------|
| **Merge 3-way** (`git merge`) | Crée un commit de merge avec 2 parents. Historique non-linéaire. |
| **Fas

📖 Terminology - Smoke Test

# Fiche ponctuelle — La terminologie "smoke test"

**Contexte de capture :** session memory-grep, Phase 1a (smoke test pytest), 2026-04-28.
Question utilisateur : explication précise de la terminologie "smoke test" et de ses nuances avec les autres types de tests.

---

## TL;DR

Un **smoke test** est un test minimal qui vérifie qu'un système nouvellement assemblé "ne prend pas feu" au premier lancement.

- **Origine** : ingénierie matérielle (électronique, plomberie, chaudières)
- **Logiciel** 

15.9: Board.java : addMove

  private void addMove(List<int[]> validMoves, int row, int col) {
        try {
            if (cellValues[row][col] == "") {
                if (row >= 0 && row < BOARDSIZE && col >= 0 && col < BOARDSIZE) {
                    validMoves.add(new int[]{row, col});
                    validMovesCells[row][col] = "1";
                    Log.d(TAG, "addMove: [" + row + ":" + col + "]");
                }
            }
        }
        catch(Exception e)
        {
            Log.d(TA

15.8: Board.java : getValidMoves

 private void getValidMoves(int row,
                               int col,
                               PieceType pieceType,
                               PlayerColor turn) {
        validMoves = new ArrayList<>();

        int direction = (turn == PlayerColor.RED) ? 1 : -1;

        if(pieceType == PieceType.REGULAR)
        {
            addMove(validMoves, row + direction, col-1);
            addMove(validMoves, row + direction, col+1);

            // Handle jumped a piece

15.7: Board.java : setValidMoves

 private void setValidMoves(PlayerColor turn) {
        try{
            validMovesCells = new String[BOARDSIZE][BOARDSIZE];
            getValidMoves(highlightedRow, highlightedCol, PieceType.REGULAR, turn);
        }
        catch(Exception e)
        {
            Log.e(TAG, "setValidMoves: " + e.getMessage());
        }
    }

15.6: Board.java : hitTest

   public String hitTest(Point point,
                          PlayerColor turn,
                          Context context) {
        String result = "-1";
        for (int row = 0; row < cells[0].length; row++)
        {
            for (int col = 0; col < cells[1].length; col++)
            {
                highlights[row][col] = "0";
                if(cellValues[row][col] == "")
                {
                    //Log.d(TAG, "hitTest: Empty at [" + row + "," + col + "]");
 

15.5: Board.java : drawTurn

private void drawTurn(Canvas canvas, Rect rect, int color) {
        Paint paint = new Paint();
        paint.setColor(color);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);

        int x = rect.centerX();
        int y = rect.centerY();

        canvas.drawCircle(x, y, SIZE * .35f, paint);

    }

agent-skills

---
name: web-artifacts-builder
description: Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
license: Complete terms in LICENSE.txt
---

# Web Artifacts Builder

To build powerful frontend claude.ai artifacts, follow these steps:
1. Initialize the fr

15.4: Board.java: Draw

public void Draw(Canvas canvas){
        Log.d(TAG, "Draw: Start");
        Paint paint = new Paint();
        paint.setColor(Color.LTGRAY);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);

        Paint paintYellow = new Paint();
        paintYellow.setColor(Color.YELLOW);
        paintYellow.setStyle(Paint.Style.STROKE);
        paintYellow.setStrokeWidth(10);

        Paint paintMoves = new Paint();
        paintMoves.setColor(Color.CYAN);
        paintMoves.setStyle(Paint.S

15.3: Board.java : clearCellValues

 private void clearCellValues()
    {
        for(int row = 0; row < cells[0].length; row++)
        {
            for(int col = 0;  col < cells[1].length; col++)
            {
                cellValues[row][col] = "";
            }
        }
    }

15.2: Board.java : initCellValues

private void initCellValues() {
        for(int row = 0; row < cells[0].length; row++)
        {
            for(int col = 0;  col < cells[1].length; col++)
            {
                if(row < 3) {
                    // Placing the red pieces
                    if ((row + col) % 2 == 0)
                        cellValues[row][col] = PlayerColor.RED.toString();
                    else
                        cellValues[row][col] = "";
                }
                else if (r

15.1: MainActivity.java

package edu.fvtc.checkers;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowMetrics;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annot

🤖 CC - Commands VS Skills

# Fiche ponctuelle — Commands vs Skills : anatomie et décision de migration

**Contexte** : fiche produite pendant la Phase 4 de l'audit, Point 4/6 — conceptuelle pure. La mécanique de conversion pas-à-pas fera l'objet d'une fiche séparée, produite après un premier exercice pratique.

---

## 1. Le choix dont il s'agit

Claude Code propose deux mécanismes pour définir des "capacités" invocables :

- **Commands** (`.claude/commands/X.md`)
- **Skills** (`.claude/skills/X/SKILL.md`)

Depuis la conv

🐍 🧪 Tester une CLI Python via subprocess.run (test d'intégration bout-en-bout)

# Fiche ponctuelle — Tester une CLI Python via `subprocess.run` (test d'intégration bout-en-bout)

**Contexte de capture :** session memory-grep, Phase 1a (smoke test pytest), 2026-04-28.
Question utilisateur : explication détaillée du helper `_run_memgrep` qui invoque la CLI dans un subprocess isolé pour les tests d'intégration.

---

## TL;DR

Pour tester une CLI Python qui lit le filesystem (`Path.home()`, etc.) sans toucher l'environnement réel de l'utilisateur, le pattern canonique est :

`

🐍 📦 Python packaging - __main__.py VS __init__.py

# Fiche ponctuelle — `__init__.py` vs `__main__.py` dans un package Python

**Contexte de capture :** session memory-grep, Phase 1a (bootstrap CLI), 2026-04-28.
Question utilisateur : différence et rôles précis des deux fichiers, après leur création par `uv init` puis personnalisation.

---

## TL;DR

| Fichier | Rôle |
|---------|------|
| `__init__.py` | **Identité et API publique** du package : marqueur "ceci est un package", point d'entrée des imports, exposition de l'API, métadonnées (`__ve