#!/bin/sh # ===================================================================== # pre-commit -- faengt den Fall ab, der am 01.10.2026 zweimal nur # gutgegangen ist. # # An diesem Tag arbeiteten zwei Claude-Sitzungen gleichzeitig in # diesem Verzeichnis, ohne voneinander zu wissen, und BEIDE haben # `git add -A` benutzt. Hätte die eine unfestgeschriebene Arbeit der # anderen im Baum gehabt, waere sie mitcommittet worden -- unter # fremdem Namen, in einer fremden Begruendung, und niemandem waere es # aufgefallen. Nachgesehen: diesmal war nichts dabei. Das war Glueck. # # WARUM EIN HAKEN UND NICHT EINE REGEL AUF PAPIER: Weil `git add -A` # genau der Griff ist, den man macht, ohne nachzudenken. Eine Regel, # an die man denken muss, hilft nicht gegen einen Reflex. # # WAS ER NICHT TUT: # * Er blockiert NICHT, wenn das Schloss DEINES ist. Wer ordentlich # abschliesst, soll nicht bestraft werden -- RunOnes erste Fassung # machte das falsch, und eine Sicherung, die das richtige # Verhalten bestraft, wird abgeschafft. # * Er blockiert NICHT bei einem verfallenen Schloss (zwei Stunden). # * Er blockiert NICHT, wenn er nicht nachsehen kann. Ein kaputtes # Schloss darf die Arbeit nicht anhalten; er sagt es und laesst # durch. # # Wer trotzdem committen MUSS: SCHLOSS_ZWANG=ja git commit … # ===================================================================== set -u if [ "${SCHLOSS_ZWANG:-}" = "ja" ]; then printf '\033[33m[Schloss] SCHLOSS_ZWANG=ja -- Haken uebersprungen.\033[0m\n' >&2 exit 0 fi WURZEL="$(git rev-parse --show-toplevel 2>/dev/null)" || exit 0 [ -f "$WURZEL/tools/arbeitsschloss.mjs" ] || exit 0 AUSGABE="$(node "$WURZEL/tools/arbeitsschloss.mjs" fremd 2>&1)" STAND=$? if [ "$STAND" -eq 0 ]; then exit 0 fi printf '\033[31m\nABBRUCH: In diesem Verzeichnis arbeitet gerade jemand anders.\033[0m\n' >&2 printf ' %s\n\n' "$AUSGABE" >&2 printf ' Ein Commit nimmt mit `git add -A` auch dessen unfertige Arbeit mit.\n' >&2 printf ' Genau das ist am 01.10.2026 zweimal fast passiert.\n\n' >&2 printf ' Erst abstimmen -- bei zwei Claude-Sitzungen mit SendMessage.\n' >&2 printf ' Nachsehen: node tools/arbeitsschloss.mjs ansehen\n' >&2 printf ' Wenn es liegen geblieben ist, verfaellt es nach zwei Stunden.\n' >&2 printf ' Wenn du sicher bist: SCHLOSS_ZWANG=ja git commit ...\n\n' >&2 exit 1