# Änderungsverlauf

Alle nennenswerten Änderungen an dieser Anwendung stehen hier, neueste zuerst.

Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
die Nummerierung [Semantic Versioning](https://semver.org/lang/de/):

- **Hauptnummer** (1.0.0) — erst mit dem Abschluss der Barrierefreiheitsprüfung.
  Solange die Null vorn steht, ist der Funktionsumfang noch nicht vollständig.
- **Nebennummer** (0.**9**.0) — neue Merkmale.
- **Fehlernummer** (0.9.**1**) — nur Fehlerbehebungen.

Dieses Dokument sagt, *was sich geändert hat* — nicht, welche Merkmale es
gibt und welche fehlen.

Jede veröffentlichte Fassung trägt ein Git-Etikett (`v0.9.0`) und ein
Installationspaket unter `app/release/`. In der Anwendung selbst stehen
Programmversion und Baustand unter „Systemzustand“ auf dem Startbildschirm;
ein `+` hinter der Baukennung heißt, dass beim Bauen unversionierte
Änderungen im Arbeitsbaum lagen.

---

## [Unveröffentlicht]

Seit der Fassung 0.26.5 hat sich nichts geändert.

## [0.26.5] — 2026-09-01

Der angekündigte Durchgang über die Antwortkommentare — mit einem anderen
Ergebnis als erwartet. Der Befund, der ihn ausgelöst hat, war ein Messfehler.

### Für die Öffentlichkeit

- **Zwei Erklärungen sagen jetzt auch, warum die übrige Antwortmöglichkeit
  nicht stimmt.** Bei der Geltungsdauer eines Voreintrags und beim
  Mindestalter für Sportschützen stand bisher nur, was gilt — nicht, woran
  die naheliegende Verwechslung scheitert.

### Behoben

- **Der Befund „224 von 471 Erklärungen benennen keine einzige
  Antwortmöglichkeit“ war falsch.** Er zählte allein die Schreibweise „a)“.
  Der Hausstil kennt aber mehrere: „Antwort b“, „Zu c“, „Buchstabe d“ — und
  vor allem den Weg über den Gegenstand statt über den Buchstaben („die
  Armbrust scheitert am Lauf“).
- **Zwei Erklärungen ergänzt**, bei denen eine Möglichkeit tatsächlich
  unbehandelt blieb: I.1-74 („6 Monate“ — das Gesetz nennt diese Frist an
  keiner Stelle, § 10 Abs. 1 Satz 3 kennt nur das Jahr) und I.2-23 („durch
  ein fachärztliches Gutachten“ — das gehört nach § 6 Abs. 2 zur
  persönlichen Eignung, und das Mindestalter des § 14 Abs. 1 ist keine
  Eignungsfrage).

### Für die Werkbank

- **Die Messkette, Schritt für Schritt:** 224 → 220 (eigene Nachzählung der
  Buchstabenform) → 111 (Optionen, die auch dem Gegenstand nach fehlen) → 33
  (mit Buchstabenformen des Hausstils) → 8 (mit Wortstamm statt
  Wortgleichheit) → **0** (von Hand nachgesehen: alle acht waren
  angesprochen, unter anderem mit „Keine.“, „Nein.“, „Zulässig“ und „über
  Bord geworfen“). Übrig blieben nach der geschärften Prüfung genau **zwei**
  echte Fälle.
- **Jede Zwischenstufe war ein Fehler in meiner Messung, nicht im Bestand.**
  „WBK“ gegen „Waffenbesitzkarte“, „Leuchtpunktvisiere“ gegen
  „Leuchtpunktvisier“, „Armbrust“ gegen „Armbrüste“, „Monats“ gegen
  „Monat“, „werfen“ gegen „geworfen“. Wer eine Textmenge mit
  Wortgleichheit misst, misst die eigene Wortliste.
- **Neue Prüfung `optionen_pruefen` in `pruefe_erklaerungen.py`.** Sie
  verlangt, dass jede Antwortmöglichkeit vorkommt — mit ihrem Buchstaben
  **oder** mit ihrem Gegenstand. Umlaute werden gefaltet, Wortstämme statt
  Wortgleichheit verglichen, und eine Möglichkeit, die aus nichts als „Nein“
  besteht, gilt als behandelt, sobald die Kurzfassung ein Urteil spricht:
  Sie ist die Verneinung der ganzen Frage, und ein Satz „Antwort c ist
  falsch“ brächte dort nichts, was nicht schon dastünde.
- **Gegengeprobt in beide Richtungen:** Mit den zwei Ergänzungen meldet die
  Prüfung nichts; wird eine davon wieder herausgenommen, meldet sie genau
  diese Möglichkeit. 1854 Fundstellen, alle nachgewiesen.
- **Warum der Weg über den Gegenstand der bessere ist.** Wer sich die
  Erklärung vorlesen lässt, hört bei „zu a)“ nichts, woran er sich erinnern
  könnte — der Buchstabe steht auf dem Bildschirm, nicht im Ohr. 341 der 471
  Erklärungen gehen deshalb über die Sache. Eine Umstellung auf Buchstaben
  wäre eine Verschlechterung gewesen.
- **`docs/stand.md` trug die falsche Zahl seit 0.26.4** und ist berichtigt.
- Zahlen: **1742 Vitest-Tests in 77 Dateien**, 1854 Fundstellen (vorher
  1853), ESLint ohne Warnung.

## [0.26.4] — 2026-09-01

Die ersten Befunde aus der Prüfung, ob diese Software dem Stand der Technik
entspricht. Acht Felder wurden gegen die heutige Fachliteratur und den
Wettbewerb gehalten; hier stehen der eine echte Defekt und die drei Lücken
mit dem besten Verhältnis von Nutzen zu Aufwand.

### Für die Öffentlichkeit

- **Ein abgewähltes Kapitel bleibt auch auf dem zweiten Rechner abgewählt.**
  Wer seinen Lernstand auf ein anderes Gerät überträgt, bekam dort bisher
  stillschweigend alle Kapitel zurück — auch die, die er für seine Prüfung
  gar nicht braucht. Die Prüfungsreife-Anzeige fiel dadurch um zwei Stufen,
  ohne dass etwas darauf hinwies.
- **Der Vergleich zweier Simulationen sagt jetzt, wann ein Unterschied
  nichts bedeutet.** Ein Bogen zieht seine Fragen aus dem gesamten Bestand;
  zwei Läufe fallen deshalb schon durch die Ziehung auseinander, auch wenn
  sich am Wissen nichts geändert hat. Liegt der Unterschied darunter, steht
  das jetzt dabei — mit der Zahl der Fragen, um die es tatsächlich geht.
- **Das Handbuch erklärt, wie man eine frei zu formulierende Antwort
  aufbaut.** 104 der 575 Fragen verlangen eine eigene Antwort, und sie
  werden von Menschen bewertet. Woran man erkennt, was verlangt ist, steht
  jetzt im Kapitel zur Lernsitzung.
- **Und es sagt, dass ein Nachteilsausgleich beantragt werden muss.** Die
  Anwendung bietet die verlängerte Zeit zum Üben an. In der Prüfung ist sie
  kein Selbstläufer: Wer sie braucht, muss sie bei der Stelle beantragen,
  die seine Prüfung abnimmt. Das Kapitel zur Simulation sagt jetzt, wen man
  fragt und wonach.

### Behoben

- **Die Kapitelabwahl reiste beim Übernehmen eines Profils nicht mit.**
  `profil-uebernehmen.ts` las aus der Quelle nur `name` und
  `pruefungstermin`; `kapitel_ausschluss` steht als Spalte am Profil und
  nicht in einer Kindtabelle, wurde von der Schleife über `KINDTABELLEN`
  also nicht erfasst und fiel auf den Vorgabewert `'[]'` zurück. Die Folge
  ist in `shared/verlust.ts` seit jeher ausgerechnet: derselbe Bestand von
  **85,0 auf 71,9 Prozent**, zwei Ampelstufen. Kein Test sah hin.
- **Der Laufvergleich meldete Rauschen als Fortschritt.** „5 Prozentpunkte
  besser“ sind bei einem Bogen von 80 Fragen vier Fragen — weniger, als zwei
  Ziehungen aus demselben Bestand ohnehin auseinanderliegen.

### Für die Werkbank

- **Der Defekt saß im Weg, den das Handbuch selbst empfiehlt.** Zwei Geräte
  über die Sicherungsdatei zu verbinden ist die dokumentierte Lösung; genau
  dort ging die Abwahl verloren. Die neue Wache setzt in der Quelle
  `kapitel_ausschluss = '["IV"]'` und prüft es am Ziel nach.
- **Die Abfrage greift nur, wenn die Quelle die Spalte kennt.** Eine
  Sicherung von vor 0.20.0 hat sie nicht; dort ist „nichts abgewählt“ die
  richtige Annahme. Der vorhandene Test über ältere Quellen bleibt grün.
- **Warum die binomiale Streuung hier trägt, obwohl der Reifegrad sie
  ausschlägt.** `entscheidung-reifegrad.md` Abschnitt 5 lehnt eine
  Bestehenswahrscheinlichkeit ab, weil die Trefferchancen je Frage
  zweigipflig verteilt sind. Das trifft eine **Prognose**. Beim bereits
  gezogenen Bogen hebt sich die Zweigipfligkeit auf: Eine zufällig gezogene
  Frage zu beantworten ist selbst ein Bernoulli-Versuch mit der mittleren
  Trefferchance. Mit **200 000 Läufen** gegen die in der Notiz beschriebene
  Verteilung nachgerechnet — bei 85, 70 und 50 Prozent gefestigter Fragen
  lag die gemessene Streuung jedes Mal **unter** der binomialen (11,63 zu
  12,51 · 15,36 zu 16,87 · 16,97 zu 18,73). Die Endlichkeitskorrektur bliebe
  zusätzlich draußen. Die Schätzung ist also die vorsichtige Seite.
- **Ein bestehender Test musste seine Erwartung ändern, und das ist der
  Befund.** `verlaufsvergleich.test.ts` prüfte mit `toEqual([])`, dass es
  keine Vorbehalte gibt — an Werten, die selbst ein Rauschfall sind: 80
  Fragen, 75 gegen 80 Prozent. Die Zusicherung war zu weit gefasst; sie
  prüft jetzt, was ihr Name verspricht.
- **Die Zahlen im Handbuch sind an den Katalog gebunden.**
  `tests/hilfe-zahlen.test.ts` zählt die 104 offenen Fragen und ihre
  Anfangswörter (26 „Was“, 25 „Welche“, 7 „Wie“, je 5 „Wann“ und „Nennen
  Sie“) bei jedem Lauf nach und liest die Zahlen aus dem Handbuchtext
  selbst, nicht aus einer zweiten Liste daneben. Gegengeprobt: eine
  verstellte Ziffer macht ihn rot.
- **Der Entwurf zum Handbuch war zuerst falsch.** Er nannte „Erläutern
  Sie …“ als Beispiel einer Fragestellung — nachgezählt kommt das Wort im
  ganzen Katalog nicht vor. Und die Regel „zählen Sie, wie viele Punkte
  gefragt sind“ galt nur für **5 von 104** Fragen. Beides steht jetzt so da,
  wie es gemessen ist.
- **Nachteilsausgleich: nachgeschlagen statt behauptet.**
  `data-pipeline/gesetz.py --suche` findet das Wort in keinem der
  beigelegten Gesetze. Genannt sind deshalb nur belegte Stellen: § 2
  Absatz 1 AWaffV (die zuständige Behörde bildet die Prüfungsausschüsse),
  § 3 Absatz 5 (schießsportliche Vereine dürfen für ihre Mitglieder
  prüfen), § 2 Absatz 3 (theoretischer **und** praktischer Teil) und
  § 2 Absatz 5 (Wiederholung, Frist möglich).
- Zahlen: **1742 Vitest-Tests in 77 Dateien** (vorher 1734), ESLint ohne
  Warnung.


---

Fruehere Fassungen sind in dieser Ausgabe nicht einzeln aufgefuehrt.
Die Entwicklung bis zum 31.08.2026 ist im Ausgangs-Commit dieses
Archivs zusammengefasst.
