Handoff
Une session vierge fait un meilleur QA et une meilleure revue que la session qui a implémenté — moins de contexte, pas d'attachement au code. C'est une pratique délibérée, et elle tient ou tombe avec le handoff. Cette compétence rend chacun d'eux aussi bon.
Principes de fonctionnement
- Les faits sont vérifiés, pas mémorisés. Chaque compte, chemin et identifiant dans le bloc provient d'une commande exécutée maintenant :
git rev-list --count origin/<branche>..HEAD,git worktree list,ls QA-<slug>.md, les identifiants de fixtures extraits du fichier QA. Un handoff qui dit "3 commits peuvent ne pas être poussés" alors que le compte est de 5 envoie la session suivante sur une fausse piste. - Le lecteur n'a que le bloc. Pas de "como vimos", pas de référence à ce chat. Nommez la compétence à invoquer, le fichier à lire, la commande à exécuter.
- Chat par défaut. Le bloc est rendu dans le chat à l'intérieur d'un bloc de code délimité pour copier-coller. Un fichier
HANDOFF-<slug>.md(un fichier racine éphémère,profile.ephemeral_patterns: gitignoré, jamais commité) uniquement lorsque l'utilisateur demande un fichier ou que le bloc dépasse ~60 lignes. - Les étapes affectant la production sont nommées, avec la raison. Pas "attention à l'étape 8" mais ce qu'elle écrit où et pourquoi elle ne peut pas être annulée.
- Discipline PII comme partout : identifiants et prénoms ; les e-mails sont des identifiants de travail et peuvent apparaître ; jamais de numéro de sécurité sociale, téléphone ou adresse.
Quand l'utiliser
- La clôture de
cdv-finalize(il imprime lui-même le handoff QA, en utilisant ce modèle). - L'utilisateur demande une invite pour continuer une investigation, effectuer une revue ou exécuter un QA dans une autre session.
- Une session est sur le point d'être abandonnée parce que son contexte a gonflé (compaction imminente, "ça devient long").
Flux de travail
Étape 0 — Charger le profil et l'extension
- Lire
.claude/harness/profile.yamlet, quand présent,.claude/harness/profile.local.yaml(ses clés gagnent). Siprofile.yamlest manquant, arrêtez et dites-le : cette compétence a besoin du profil cdv-harness du dépôt, et elle ne devine jamais les valeurs. - Lire
<profile.extension_dir>/cdv-handoff.mdquand il existe. L'extension ne fait qu'ajouter ou restreindre ; là où elle et cette compétence diffèrent, l'extension gagne pour ce dépôt. Ci-dessous,profile.<clé>est une valeur du profil. Une clé manquante ounonesignifie que le dépôt n'a pas cette chose : sautez l'étape qui en a besoin.
Étape 1 — Déterminer le type et rassembler les faits (tout en lecture seule)
Type ∈ qa | review | investigation | continue-implementation. Ensuite, exécutez et conservez la sortie brute :
git branch --show-current
git worktree list --porcelain
git rev-list --count origin/<branche>..HEAD 2>/dev/null # commits non poussés ('?' si pas de remote)
git rev-list --count HEAD..origin/<profile.default_branch> # derrière la branche par défaut
git status --porcelain | grep -v '^??' # fichiers suivis non commités
ls QA-<slug>.md STATE-<slug>.md <slug>-pr.md decisions-<slug>.md 2>/dev/null
grep -n 'PRODUCTION-AFFECTING' QA-<slug>.md 2>/dev/null
Pour qa : les fixtures proviennent des propres étapes du fichier QA (identifiants + libellés d'affichage, comme cdv-interactive-qa en a besoin). Pour review : l'identifiant du ticket via cdv-code-review/scripts/resolve-ticket-id.sh et si un <profile.pr_review_dir_prefix><TICKET>/ existe déjà. Pour investigation : le bloc d'hypothèses et le tableau de preuves du rapport de cdv-debug, textuellement. Pour continue-implementation : les statuts de phase de STATE-<slug>.md, son ## Finalize seed et si ## Verificação existe.
Étape 2 — Rendre le bloc
Bloc de code délimité, dans profile.language_ui (les titres de section en PT-BR ci-dessous restent tels quels), dans cet ordre ; supprimez une section seulement quand elle est vraiment vide, et dites-le (Sem fixtures pré-consultadas.) :
<VERBE> da branch <branche> (<une phrase sur ce qu'elle livre>).
ONDE ESTÁ O CÓDIGO
- <chemin du worktree | checkout principal `profile.main_checkout`>
- <N> commits en avance sur origin/<profile.default_branch> ; <M> commits NON poussés (vérifiez : git rev-list --count origin/<branche>..HEAD)
- <fichiers suivis non commités, ou "árvore limpa">
ARMADILHA DO AMBIENTE (uniquement quand le code est dans un worktree et `profile.worktree_runner` n'est pas `none`)
- Le worktree n'a pas l'environnement du checkout principal (dépendances, `.env`) ; `profile.cmd_container_exec` teste le checkout principal, pas celui-ci.
- Toute passerelle par : <profile.worktree_runner> <worktree> <commande de test> <filtre>
- Pour le QA à l'écran : amener la branche avec <profile.bring_branch_script> --check <branche> puis sans --check. S'il refuse, ARRÊTEZ et demandez — c'est le WIP d'une autre session. Jamais git stash.
- Baseline actuelle : <N passed (M assertions)>, formateur <PASS>, analyse statique <OK>.
O QUE FAZER
- Invoquez la compétence <cdv-interactive-qa | cdv-code-review | cdv-debug | cdv-plan-feature>.
- <plan/fichier à lire, avec chemin> | <identifiant du ticket> | <rapport à partir duquel démarrer>
FIXTURES REAIS (validadas em <date>)
- <entité> <id> (<libellé comme à l'écran>) — <état qui importe>
- ...
PASSOS QUE ESCREVEM FORA DO LOCAL [PRODUCTION-AFFECTING]
- Étape <n> : écrit <quoi> dans <système externe, depuis `profile.production_writing_integrations`> ; irréversible parce que <raison>. Seul l'utilisateur exécute, après avoir confirmé <quoi>.
- (ou) Nenhum — tout est lecture ou écriture uniquement dans la base locale.
CONTEXTO QUE MUDA A EXPECTATIVA
- <le ou les deux faits qui ressembleraient autrement à des bugs : "la commande d'exportation sort avec exit 0 par décision", "l'exportation ne tourne qu'à l'aube — tester avec la commande manuelle est attendu">
NÃO FAÇA
- Ne changez pas la branche du checkout principal par-dessus le WIP d'autrui ; n'utilisez pas git stash.
- <tout ce que l'utilisateur a exclu : "ne pas investiguer les deux enregistrements dupliqués">
<VERBE> est Rode o QA interativo, Faça o code review, Continue a investigação ou Continue a implementação.
Étape 3 — Auto-vérification avant d'imprimer
- Chaque nombre provient d'une commande de l'Étape 1 (réexécutez-la si l'arbre a changé).
- Chaque chemin existe (
ls). - Aucune phrase n'a besoin de ce chat pour être comprise.
- La section PRODUCTION-AFFECTING est présente (avec du contenu ou avec "Nenhum").
Composition
cdv-finalize— imprime le typeqaà sa clôture en utilisant ce modèle ; lorsque cette compétence est invoquée seule après une finalisation, réutilisez les nombres du rapport d'état au lieu de les redériver.cdv-interactive-qa,cdv-code-review,cdv-debug,cdv-plan-feature— les destinataires. Le bloc nomme lequel invoquer.cdv-code-reviewmode tiers — un handoff de revue pour la PR d'un collègue le dit explicitement (branche de tiers : sans apply-review).
Exemple (type qa, condensé)
Rode o QA interativo da branch fix/export-stale-file (l'export écrivait le fichier d'hier
après une nouvelle exécution manuelle ; maintenant il enregistre le fichier du jour et supprime le précédent).
ONDE ESTÁ O CÓDIGO
- worktree .claude-worktrees/export-stale-file
- 5 commits en avance sur origin/<branche par défaut> ; 2 NON poussés (git rev-list --count origin/fix/export-stale-file..HEAD)
- arbre propre
ARMADILHA DO AMBIENTE
- Worktree sans environnement du checkout principal : passerelles par l'exécuteur de worktree ; pour l'écran, le script pour amener la branche avec --check d'abord.
- Baseline : suite de tests verte, formateur PASS, analyse statique OK.
O QUE FAZER
- Invoquez cdv-interactive-qa ; plan dans QA-export-stale-file.md (6 étapes).
FIXTURES REAIS (validées à la date du handoff)
- rapport 7 (Vendas — semaine) — exporté hier, l'ancien fichier existe encore (le cas à réparer)
- rapport 8 (Estoque — semaine) — jamais exporté (le cas propre)
PASSOS QUE ESCREVEM FORA DO LOCAL
- Étape 4 : le one-off LIT l'API externe réelle (un appel par article) pour vérifier les totaux ; il n'écrit jamais dedans. Si quelque chose suggère une écriture, arrêtez.
- Aucun autre — l'export n'écrit que sur le disque local.
CONTEXTO QUE MUDA A EXPECTATIVA
- L'export ne tourne qu'à l'aube — tester avec la commande manuelle est attendu.
NÃO FAÇA
- Ne changez pas la branche du checkout principal par-dessus le WIP d'autrui ; n'utilisez pas git stash.