#!/bin/sh # # Barrierefreiheits- und Qualitätsgate vor jedem Commit. # # WARUM AM COMMIT UND NICHT AM PUSH # Dieses Projekt hat kein Fernarchiv. `git push` findet nie statt, ein # pre-push-Hook wäre totes Konfigurat. Der Commit ist das einzige Ereignis, # das tatsächlich eintritt. # # WARUM NUR DIE SCHNELLSTUFE # Die Vollstufe (Bau + Playwright) dauert gemessen 243 Sekunden. Ein Gate, # das bei jedem Zwischenstand vier Minuten blockiert, wird nicht respektiert, # sondern umgangen. Deshalb hier nur die Schnellstufe (gemessen 98 s) - und # eine Erinnerung, wenn die Vollstufe zu lange her ist. Beide Zeiten am # 03.09.2026 auf dem Arbeitsplatz gemessen, nicht geschätzt. # # UMGEHEN # `git commit --no-verify` ist in diesem Projekt NICHT vorgesehen. CLAUDE.md # sagt es ausdrücklich ("Kein `--no-verify`"), und .claude/settings.json # sperrt den Aufruf. Bis Fassung 0.27.2 stand hier das Gegenteil - dieselbe # Datei versprach, was die Projektregel verbietet. Git selbst kann den Haken # weiterhin überspringen; das ist eine Eigenschaft von Git, keine Erlaubnis. # # EINRICHTEN # Hooks liegen versioniert unter .githooks/ und wirken erst nach # git config core.hooksPath .githooks # Das erledigt `npm run hooks:einrichten` in app/, und `npm install` ruft es # über das prepare-Skript von selbst auf. set -e wurzel=$(git rev-parse --show-toplevel) stempel="$wurzel/.git/gate-stempel" printf 'Gate (Schnellstufe): Typen, Linter, Tests …\n' cd "$wurzel/app" npm run --silent gate:schnell # ── Erinnerung an die Vollstufe ──────────────────────────────────────────── # Kein Sperren, nur Sagen: Sperren erzeugt Umgehungsgewohnheiten, und die # Vollstufe gehört ohnehin in die Veröffentlichungsliste. if [ ! -f "$stempel" ]; then printf '\nHinweis: Die Vollstufe lief hier noch nie.\n' printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen -\n' printf 'nur dort laufen die Prüfungen im echten Fenster (Kontrast, Zielgrößen).\n' elif [ -n "$(find "$wurzel/app/src" -newer "$stempel" -print -quit 2>/dev/null)" ]; then printf '\nHinweis: Seit dem letzten vollen Gate-Lauf hat sich der Quelltext geändert.\n' printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen.\n' fi printf '\nGate sauber: Typen, Linter, Tests - axe je Ansicht in jsdom.\n' printf 'Kontrast und Zielgroessen prueft erst die Vollstufe im echten Fenster.\n'