Gedankenstriche durch Bindestriche ersetzt
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s

375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
This commit is contained in:
Harlekin
2026-09-04 08:54:52 +02:00
parent 38be773636
commit e0b03ea336
210 changed files with 368 additions and 368 deletions
@@ -23,7 +23,7 @@ type Existing = {
*
* Das Kürzel steht nach dem Anlegen fest: es steckt in der Adresse jeder
* Abteilungsseite, und ein wandernder Bezeichner macht geteilte Links wertlos.
* Wer sich vertan hat, legt neu an und archiviert die alte — archivieren
* Wer sich vertan hat, legt neu an und archiviert die alte - archivieren
* statt löschen, weil an einer Abteilung Vermerke und Zuordnungen hängen.
*/
export function DepartmentForm({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -12,7 +12,7 @@ export const dynamic = 'force-dynamic'
*
* Wie bei der Fallakte sind die Bereiche **eigene Seiten** unter einem
* gemeinsamen Layout, keine umgeschalteten Blöcke. Wer gar keinen Bereich
* sehen darf, bekommt 404 — die Verwaltung ist für ihn nicht vorhanden.
* sehen darf, bekommt 404 - die Verwaltung ist für ihn nicht vorhanden.
*/
export default async function AdminLayout({ children }: { children: ReactNode }) {
const user = await requireUser()
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -11,7 +11,7 @@ export const dynamic = 'force-dynamic'
* Die Startseite der Verwaltung: was es gibt und wofür es da ist.
*
* Kein Weiterleiten auf den ersten Bereich. Wer die Verwaltung öffnet, weiss
* nicht immer, wo das Gesuchte liegt — eine Liste mit einem Satz je Bereich
* nicht immer, wo das Gesuchte liegt - eine Liste mit einem Satz je Bereich
* beantwortet das schneller als das Durchklicken der Leiste.
*/
export default async function AdminIndexPage() {
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -18,7 +18,7 @@ export type PolicyResult = { ok: true } | { ok: false; error: string }
/**
* Die Änderungsrichtlinie gilt für die ganze Abteilung und wird serverseitig
* gelesen, nie aus dem Request. Deshalb ist das hier die einzige Stelle, an
* der sie sich ändern lässt — mit Recht `admin` und mit Protokolleintrag.
* der sie sich ändern lässt - mit Recht `admin` und mit Protokolleintrag.
*/
export async function savePolicy(input: unknown): Promise<PolicyResult> {
const user = await requirePermissionForAction('admin')
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -10,7 +10,7 @@ export const dynamic = 'force-dynamic'
/**
* Reihenfolge der Abschnitte: erst die Ränge, dann die Zugehörigkeit, dann die
* Zugangsrollen — so, wie die Abteilung sie selbst aufzählt. Innerhalb eines
* Zugangsrollen - so, wie die Abteilung sie selbst aufzählt. Innerhalb eines
* Abschnitts entscheidet die Position der Rolle auf dem Discord-Server, oben
* die höchste. Damit steht die Hierarchie an einer Stelle, die ohnehin gepflegt
* wird, statt in einer zweiten Sortierung in dieser Anwendung.
+1 -1
View File
@@ -5,7 +5,7 @@ import { de } from '@/lib/i18n/de'
* Die Bereiche der Verwaltung, an einer Stelle.
*
* Vorher standen Rollenverwaltung, Vorlagen und Änderungsrichtlinie als drei
* eigene Einträge in der Kopfzeile — drei Einträge für etwas, das man selten
* eigene Einträge in der Kopfzeile - drei Einträge für etwas, das man selten
* und dann meist zusammenhängend braucht. Jetzt ist es ein Eintrag mit einer
* Leiste darunter.
*
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {
+1 -1
View File
@@ -97,7 +97,7 @@ export default async function SystemPage() {
/**
* Die Ladewerte der letzten sieben Tage. Median und 75. Perzentil, kein
* Mittelwert — ein Ausreisser auf einem alten Laptop soll die Zahl nicht
* Mittelwert - ein Ausreisser auf einem alten Laptop soll die Zahl nicht
* bestimmen.
*/
async function VitalsTable() {
+1 -1
View File
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
/**
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
*/
export default function Loading() {