Repository navigation
Schutzrahmen-Pruefstand: auf Ruhe warten, statt in den Nachlauf zu messen - #453
Merged
Merged
Conversation
…ssen
`beimZiehenWirdDerRahmenSICHTBAR` war auf main rot (Linux-Shard 3/4, 1
von 304 -- derselbe Fall und derselbe Shard wie am 2026-10-20). Das
Programm hat dabei vollkommen richtig gearbeitet.
Die Ursache stand im VOLLEN Protokoll, eine Zeile vor dem Fehlschlag,
und nicht in den FAIL-Zeilen:
Schutzrahmen: 1 schwebende Fenster lagen auf einer Bedienleiste
und wurden heruntergeschoben
Nach dem Aufbau setzt MainWindow zwei Nachlaeufe an (MainWindow.cpp,
"Zwei Nachlaeufe"): `singleShot(0)` und `singleShot(500)`, beide rufen
`schwebendeAusDemSchutzrahmenHolen()`. Auf dem lastigen Laeufer kam der
zweite erst mitten in der Messung -- er holte den eben platzierten
Schweber von der Sperrzone weg. Danach beruehrte nichts mehr etwas,
also schwieg `meldeZug()` zu Recht, und der Lauf meldete das als „der
Rahmen bleibt beim Ziehen unsichtbar".
Drei Aenderungen, alle im Pruefstand:
* `warteBisDasHauptfensterSteht()` nach dem Muster von
`warteBisDerRahmenSteht()` aus tst_side_area_integration.cpp (#451):
Mindestfrist ueber die 500 ms des zweiten Nachlaufs, danach auf Ruhe
warten -- drei gleiche Messungen der Fenstergeometrie, nicht eine.
Auf den ZUSTAND warten, nicht auf die Uhr.
* Das `processEvents()` zwischen `move()` und `meldeZug()` ist weg.
Genau in dieser Luecke lief der Nachlauf. `meldeZug()` liest
`frameGeometry()` direkt und braucht keine Ereignisrunde.
* Sprechende Meldungen: faellt der Fall doch, sagt er jetzt, WO das
Fenster liegt und dass ein Nachlauf es geholt haben kann. Die alte
Meldung („der Rahmen bleibt beim Ziehen unsichtbar") hat mich zuerst
auf die falsche Spur gefuehrt.
Dazu ein neuer Prueffall, `einePlatzierungLoestDenHinweisNICHTAus`: die
Wache `if (s_eigeneBewegungen > 0) { return; }` in `meldeZug()` war
NIRGENDS festgenagelt -- in keinem der vier Prueffaelle, die
`EigeneBewegung` ueberhaupt nennen. Darum konnte ich sie zuerst fuer
die Ursache halten; nichts schloss sie aus. Jetzt tut es etwas, und
zwar in beide Richtungen: eine Platzierung loest den Hinweis nicht
aus, ein echter Zug danach aber doch.
ZWEI GEGENPROBEN gefahren, weil ein lokal gruener Lauf hier nichts
beweist:
1. Nachlauf absichtlich mitten in die Messung
(`mw.schwebendeAusDemSchutzrahmenHolen()` zwischen `move()` und der
Pruefung): rot, mit derselben Protokollzeile wie in der CI und der
neuen Meldung „die Lage kam nicht an: 42,100 304x124 trifft die
Sperrzone nicht". Damit ist der Fehlschlag des Laeufers gezielt
hergestellt, nicht nur vermutet.
2. Die Wache aus `meldeZug()` entfernt: `einePlatzierungLoestDen
HinweisNICHTAus` wird rot („der Hinweis blinkt beim PLATZIEREN").
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
oe5sos
added a commit
that referenced
this pull request
Nov 14, 2026
) tst_cat_funkgeraet riss auf main die 300-s-Frist (Lauf 43597444850, macOS Apple Silicon 2/2, ***Timeout 300,09 s) und machte main rot. Es haengt nicht. Dieselbe Datei, derselbe Shard, derselbe Test #90: d6bad41 (vor #452) Passed 237,60 s 240f4dc (mit #452) Passed 254,49 s 3da9e7b (mit #453) ***Timeout 300,09 s Bei 254 s Grundlast bleiben 15 % Luft; das reisst eine Lastschwankung, ohne dass sich am Pruefstand etwas geaendert haette -- #453 fasst ihn gar nicht an. Die 300 waren also von Anfang an zu knapp bemessen, was erst auffiel, als sie rissen. Der Vorgaenger desselben Falls steht im Kommentar: am 08.11. liefen die 120 s ab. 900 s sind das Dreieinhalbfache der gemessenen Dauer, damit die naechsten Faelle nicht gleich wieder dagegen laufen. Die Zahlen stehen im Kommentar, damit beim naechsten Mal nicht geraten werden muss, und mit dem Hinweis, wo der Posten sitzt: die Warterunden gegen das rigctld-Doppel, nicht der Fensteraufbau. Alle 14 Compliance-Skripte gruen. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
beimZiehenWirdDerRahmenSICHTBARwar auf main rot (Linux-Shard 3/4, 1 von 304— derselbe Fall und derselbe Shard wie am 2026-10-20). Das Programm hat dabei
vollkommen richtig gearbeitet.
Die Ursache stand im vollen Protokoll, nicht in den FAIL-Zeilen
Nach dem Aufbau setzt
MainWindowzwei Nachläufe an (MainWindow.cpp,„Zwei Nachläufe"):
singleShot(0)undsingleShot(500), beide rufenschwebendeAusDemSchutzrahmenHolen(). Auf dem lastigen Läufer kam der zweiteerst mitten in der Messung — er holte den eben platzierten Schweber von der
Sperrzone weg. Danach berührte nichts mehr etwas, also schwieg
meldeZug()zuRecht.
Drei Änderungen, alle im Prüfstand
warteBisDasHauptfensterSteht()nach dem Muster vonwarteBisDerRahmenSteht()austst_side_area_integration.cpp(Zwei Fensterprüfstände: auf Ruhe warten, Grundlage frisch erzwingen #451):Mindestfrist über die 500 ms hinaus, danach auf Ruhe warten — drei gleiche
Messungen der Fenstergeometrie, nicht eine. Auf den Zustand warten, nicht
auf die Uhr.
processEvents()zwischenmove()undmeldeZug()ist weg. Genau indieser Lücke lief der Nachlauf.
meldeZug()liestframeGeometry()direkt.liegt und dass ein Nachlauf es geholt haben kann. Die alte Meldung hat mich
zuerst auf die falsche Spur geführt.
Neuer Prüffall für eine ungedeckte Wache
einePlatzierungLoestDenHinweisNICHTAus: die Wacheif (s_eigeneBewegungen > 0) { return; }inmeldeZug()war nirgendsfestgenagelt — in keinem der vier Prüffälle, die
EigeneBewegungüberhauptnennen. Darum konnte ich sie zuerst für die Ursache halten; nichts schloss sie
aus. Jetzt tut es etwas, und zwar in beide Richtungen: eine Platzierung löst den
Hinweis nicht aus, ein echter Zug danach aber doch.
Zwei Gegenproben
Ein lokal grüner Lauf beweist hier nichts — der Fall war vor der Behebung lokal
grün und auf dem Läufer rot. Also die Lage gezielt hergestellt:
mw.schwebendeAusDemSchutzrahmenHolen()zwischen
move()und der Prüfung) → rot, mit derselben Protokollzeile wiein der CI und der neuen Meldung
die Lage kam nicht an: 42,100 304x124 trifft die Sperrzone nicht.meldeZug()entfernt →einePlatzierungLoestDenHinweis NICHTAuswird rot („der Hinweis blinkt beim PLATZIEREN").ctest -R "^tst_schutzrahmen$"grün (6,2 s), 24 Prüffälle.🤖 Generated with Claude Code