Introduksjon
Din første decide-hook
AlfaDu lager en commit-msg-hook som spør den lokale modellen om commit-meldingen forklarer hvorfor endringen ble gjort. Hooken advarer, men stopper aldri commiten.
Du trenger en lokal modell som kjører, enten på Macen eller på egen server. Spørsmålet, meldingen og diffen går bare til den lokale modellen, ikke til skyen.
1. Start serveren
nav-pilot alpha local start nav-pilot alpha local status
decide starter ikke serveren selv. Med egen server starter du den som du pleier.
2. Lag skriptet
Lagre dette som scripts/commit-explains-why.sh i repoet:
#!/bin/sh
# Advarer når meldingen bare beskriver det diffen viser. Stopper aldri commiten.
command -v nav-pilot >/dev/null 2>&1 || exit 0
{
printf 'Commit message:\n-----\n'
grep -v '^#' "$1"
printf -- '-----\n\nDiff:\n-----\n'
git diff --cached | head -c 7500
printf -- '\n-----\n'
} | nav-pilot alpha decide \
"Does the commit message explain why the change was made, beyond describing what the diff already shows?" \
--options yes,no --evidence - --threshold 0.7 --expect no \
--timeout 3s >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "commit-msg: meldingen ser ut til å si hva som endret seg, men ikke hvorfor." >&2
fi
exit 0chmod +x scripts/commit-explains-why.sh
Skriptet sender meldingen og de første 7 500 bytene av diffen til modellen. Er sannsynligheten for «no» minst 0,7, skriver det en advarsel. Det avslutter alltid med 0, så commiten går gjennom uansett. Uten nav-pilot på maskinen gjør det ingenting.
3. Koble det til git
ln -s "$PWD/scripts/commit-explains-why.sh" "$(git rev-parse --git-path hooks)/commit-msg"
Kjør kommandoen fra rota av repoet. Git kjører commit-msg med stien til fila meldingen ligger i, og skriptet leser den som $1.
git rev-parse --git-path hooks gir mappa git henter hooks fra. Uten core.hooksPath er det .git/hooks, og hooken gjelder bare denne klonen. Har du satt core.hooksPath globalt, havner lenken i den felles mappa, og hooken kjører i alle repoer som bruker den. Sjekk med git config --show-origin core.hooksPath før du lenker. Finnes det en commit-msg-hook fra før, feiler ln -s, og du må slå de to sammen.
Med pre-commit
repos:
- repo: local
hooks:
- id: commit-explains-why
name: commit-meldingen forklarer hvorfor
entry: scripts/commit-explains-why.sh
language: script
stages: [commit-msg]pre-commit install --hook-type commit-msg
Med Lefthook
{1} er fila git lagrer meldingen i:
commit-msg:
commands:
explains-why:
run: scripts/commit-explains-why.sh {1}4. Prøv hooken
git commit --allow-empty -m "Legg til retry i klienten"
Meldingen sier hva, men ikke hvorfor. Svarer modellen «no» med minst 0,7, ser du linjen commit-msg: meldingen ser ut til å si hva som endret seg, men ikke hvorfor. før git bekrefter commiten. Prøv igjen med en melding som forklarer hvorfor, og advarselen skal utebli. Angre en prøvecommit med git reset --soft HEAD~1.
5. Mål spørsmålet
Hvor godt modellen svarer på et spørsmål, vet du ikke før du har målt det. Lag en JSONL-fil med meldinger fra repoet ditt der du vet svaret, én per linje, og omtrent like mange av hvert svar:
{"question":"Does the commit message explain why ...?","options":["yes","no"],"evidence":"Commit message:\nfix: bump timeout to 30s\n\nDiff:\n...","expect":"no"}
{"question":"Does the commit message explain why ...?","options":["yes","no"],"evidence":"Commit message:\nfix: bump timeout to 30s\n\nThe batch job takes 20s on large tenants.\n\nDiff:\n...","expect":"yes"}nav-pilot alpha decide --eval cases.jsonl
Du får treffsikkerhet, en forvekslingsmatrise, snittet av sannsynligheten for riktige og gale svar, og svartid. Er modellen like sikker når den tar feil som når den har rett, hjelper ingen terskel. Da bør spørsmålet ikke inn i en hook. Våre tall for dette spørsmålet står i målte grenser.
Når serveren ikke kjører
Uten server svarer decide med kode 2. Skriptet skriver bare advarselen ved kode 0, og avslutter alltid med 0. Commiten går derfor gjennom uten advarsel, også når meldingen ikke forklarer hvorfor. Det samme skjer når svaret tar mer enn tre sekunder.
Flere oppskrifter, som etikettforslag på issues og sjekk av PR-beskrivelser, står i Oppskrifter for alpha decide.