#!/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
