Die Runde vom 07.09.2026 hat neben den zwei echten Fehlern eine Reihe
Wiederholungen und stumme Stellen gemeldet. Abgearbeitet in Etappen, jede fuer
sich pruefbar - nach jeder liefen beide Pruefketten gruen.
* Menueleiste: der Wechsel von einem Titel zum anderen brauchte ZWEI Klicks.
Der grab_set der offenen Liste schluckt den ersten, die <Button-1>-Bindung
des Titels feuert gar nicht. Das native tk.Menu, das diese Leiste ersetzt
hat, wechselte schon beim blossen Ueberfahren - zwei Klicks waren also eine
Verschlechterung gegenueber dem, was vorher da war. Die Klappliste wird
ausserdem jetzt wie jede andere Position ueber theme.auf_bildschirm()
begrenzt; am unteren Fensterrand lief sie vorher hinaus.
Neu: pruef_menueleiste.py misst beides ueber echte Klickereignisse.
* %LOCALAPPDATA%/ravokk wurde an drei Stellen einzeln ausgerechnet. Jetzt
fragen alle gemeinsam.standard_ordner(). Laufen die je auseinander, fuehren
die beiden Programme zwei Nummernbuecher - und das faellt erst auf, wenn
eine Rechnungsnummer zum zweiten Mal vergeben ist (§ 14 Abs. 4 Nr. 4 UStG).
* pruefe() stand 35-mal im Quelltext, in sechs Fassungen -> pruefhelfer.py.
Die zwei Ausreisser sind mitgezogen: pruef_storno_verrechnet.py zaehlte in
einer Zahl und konnte am Ende nicht sagen, WAS fehlschlug, pruef_bilder.py
im Rechnungstool schrieb ein eigenes Format.
* dlg_darstellung() und die drei Handgriffe des Umschaltens standen in beiden
app.py fast wortgleich -> ThemeMixin in theme.py. Beide trugen inzwischen
denselben langen Kommentar zu demselben Fehler; das war der Beweis, dass es
eine Sache ist. Programmspezifisch bleiben der Hinweistext im Dialog (R31)
und die Frage, ob die Einstellungen ausdruecklich gespeichert werden muessen.
* pruef_gemeinsam_automatisch.py sagte im Text "genau ein Buch" und prueft
">= 1" mit einem any() - eine Pruefung, die nicht rot werden kann. Jetzt
== 1, und der Dateiname wird mitgeprueft.
Dazu neu: die neun Dateien, die im Kopf zusagen, sie laegen in beiden
Programmen gleich, werden byteweise verglichen. Bei hinweis.py stimmte die
Zusage seit dem 06.09. nicht mehr - gleicher Inhalt, CRLF gegen LF.
* .gitattributes, damit die Zeilenenden nicht von der Maschine abhaengen.
Ohne das meldet genau diese Pruefung nach einem frischen Checkout einen
Unterschied, den es im Repository gar nicht gibt.
* Die stummen "except OSError" in api.py, updater.py und einzelinstanz.py
sagen jetzt, warum sie schweigen duerfen. Die stummen tk.TclError bleiben:
dort wird ein Widget angefasst, das gerade zerstoert wurde, und eine Meldung
waere Rauschen.
* Tote Parameter und Variablen aus dem Umbau des Vortags: symbol_setzen(dunkel=),
kachel(grund=, radius=), mit_trennlinie, sechs x/y-Berechnungen, die von
theme.mittig() sofort ueberschrieben wurden, vier lokale "import ctypes".
39 Pruefstaende, 0 rot.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
Sein Befund
"und beim steuertool fehlt das theam in genze oder wird nicht durch die
automatik gesetzt"
"nur die einstellunden hilfe leiste die ist noch hell und der icon und
titel leiste auch"
Er hatte recht, und zwar wortwoertlich: dieses Programm lief im
Tk-Standard, mit dreimal fest eingetragenem foreground="black". Es gab hier
gar keine theme.py.
Gebaut
theme.py aus dem Rechnungstool uebernommen und dabei von config.py geloest
- eine Datei, die in BEIDEN Programmen liegt, darf nichts aus einem der
beiden importieren. Beim ersten Uebernehmen flog sie genau daran beim
Import auseinander.
Die Einstellungen liegen hier in der Journal-Tabelle, nicht in einer
config.json. _einstellungen() ist die Bruecke: etwas mit .get() und []=,
wie hinweis.py und theme.py es erwarten.
Menueleiste aus menueleiste.py statt tk.Menu - ein natives Menue laesst
sich unter Windows nicht einfaerben, das war der letzte helle Rest.
Treeview-Stil in theme.py ergaenzt (ttk zeichnet Listen nicht ueber den
Grundstil), Reiter schmaler, damit alle zwoelf Monatsnamen lesbar bleiben.
Die Summenleisten in gui_monat.py holen ihre Farben jetzt vom Fenster statt
sie fest zu tragen - sie waren ein weisser Block unten im dunklen Bild.
Logo und Fenstersymbol werden fuer die dunkle Darstellung aufgehellt.
⚠️ Altfehler behoben: die Meldung des Rechnungstools stand nie
pruef_wache lief mal gruen und mal rot - je nachdem, wann er hinsah. Das
war kein Wackler im Pruefstand, sondern sein Symptom: meldet das
Rechnungstool eine neue Rechnung, laeuft sofort das Einlesen an, und dessen
Ergebnis landete in derselben Zeile. Der Benutzer sah NIE, dass etwas
hereingekommen war. melde() kennt jetzt einen Vorrang in Sekunden; die
Meldung des Rechnungstools bekommt sechs. Dreimal hintereinander stabil
gruen.
Ein wackelnder Pruefstand ist keine Nebensache, die man wegdrueckt.
AUFGABE_STEUERSAETZE_DYNAMISCH.md
Seine naechste Ansage notiert: die festen Saetze sollen raus, dynamisch per
Tabelle wie im Rechnungstool. Mit dem, worauf dabei zu achten ist - ein
Satz gilt ab einem DATUM, und die Saetze bereits erfasster Buchungen
bleiben stehen (§ 147 AO).
Fassung 1.9.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax