Aus #156, Durchgang 6. Wiederkehrender CI-Wackler, nach der Regel aus #282 („wenn er wiederkommt, eigenes Issue“).
Befund
Der Check in tools/e2e/65-song.mjs:921, „the track plays through one shifter on its bus: its notes start a frame early, the clip of the other on time“, ist seit seiner Einführung mit b519cd1 (#346) unverändert.
Rot in 2 von 48 suite-Läufen seit dem 07.10.: Task 593 (Durchgang 5, damals einmalig) und Task 636 (f9a953f, 10.10.).
Beide Male mit clipStart: null. Alles andere im Check stimmte, im Lauf 636 zum Beispiel noteStart 64,352 = Note 64,398 minus ein Frame (0,0464 s).
Vermutung (nicht gemessen)
__gm.sound.startedAt(voice) liefert null, solange eine Stimme auf ihre Bytes wartet, oder wenn sie schon vorbei ist (src/viewport/SoundLibrary.ts:1533).
Der Clip ist 2 s lang und endet genau dort, wo die Note anfängt (Clip 62,398 bis 64,398, Note 64,398). Der Check wartet, bis die Note geplant ist (etwa 0,13 s vorher), und fragt danach über mehrere CDP-Rundreisen nacheinander nach Rate, Bussen, Note und Clip.
Ist der Browser in der vollen Suite träge, ist der Clip beim Fragen schon zu Ende, und seine Stimme ist weg.
Vorschlag
Zuerst belegen: startedAt für den Clip in demselbenevaluate wie planned()/clips() lesen und die Audio-Uhr beim Fragen ins Detail schreiben. Bei einem Rot zeigt das Detail dann, ob der Clip schon vorbei war.
Fix, wenn sich die Vermutung bestätigt: alle Startzeiten in einem Aufruf lesen, oder den Clip länger machen als den Abstand bis zur Note.
Ist es etwas anderes (Stimme wartet auf Bytes, etwa durch die Clip-Kopien aus #349): neuer Befund, eigener Plan.
Fertig, wenn
Der Check liest Note und Clip in einem Zug, und das Detail nennt die Uhrzeit beim Lesen.
Eine Gegenprobe zeigt, dass der Check rot wird, wenn der Clip vor dem Lesen endet (z. B. 0,5 s warten vor dem Lesen).
Danach mindestens 10 CI-Läufe ohne Rot in diesem Check.
Aus #156, Durchgang 6. Wiederkehrender CI-Wackler, nach der Regel aus #282 („wenn er wiederkommt, eigenes Issue“).
## Befund
Der Check in `tools/e2e/65-song.mjs:921`, „the track plays through one shifter on its bus: its notes start a frame early, the clip of the other on time“, ist seit seiner Einführung mit `b519cd1` (#346) unverändert.
- **Rot in 2 von 48 `suite`-Läufen** seit dem 07.10.: Task 593 (Durchgang 5, damals einmalig) und Task 636 (`f9a953f`, 10.10.).
- Beide Male mit **`clipStart: null`**. Alles andere im Check stimmte, im Lauf 636 zum Beispiel `noteStart` 64,352 = Note 64,398 minus ein Frame (0,0464 s).
## Vermutung (nicht gemessen)
- `__gm.sound.startedAt(voice)` liefert `null`, solange eine Stimme auf ihre Bytes wartet, **oder wenn sie schon vorbei ist** (`src/viewport/SoundLibrary.ts:1533`).
- Der Clip ist 2 s lang und endet genau dort, wo die Note anfängt (Clip 62,398 bis 64,398, Note 64,398). Der Check wartet, bis die Note geplant ist (etwa 0,13 s vorher), und fragt danach über mehrere CDP-Rundreisen nacheinander nach Rate, Bussen, Note und Clip.
- Ist der Browser in der vollen Suite träge, ist der Clip beim Fragen schon zu Ende, und seine Stimme ist weg.
## Vorschlag
1. Zuerst belegen: `startedAt` für den Clip in **demselben** `evaluate` wie `planned()`/`clips()` lesen und die Audio-Uhr beim Fragen ins Detail schreiben. Bei einem Rot zeigt das Detail dann, ob der Clip schon vorbei war.
2. Fix, wenn sich die Vermutung bestätigt: alle Startzeiten in einem Aufruf lesen, oder den Clip länger machen als den Abstand bis zur Note.
3. Ist es etwas anderes (Stimme wartet auf Bytes, etwa durch die Clip-Kopien aus #349): neuer Befund, eigener Plan.
## Fertig, wenn
- Der Check liest Note und Clip in einem Zug, und das Detail nennt die Uhrzeit beim Lesen.
- Eine Gegenprobe zeigt, dass der Check rot wird, wenn der Clip vor dem Lesen endet (z. B. 0,5 s warten vor dem Lesen).
- Danach mindestens 10 CI-Läufe ohne Rot in diesem Check.
meleki
added the new label 2026-10-11 21:24:19 +02:00
Befund: Die Vermutung hat gestimmt. __gm.sound.startedAt liefert null, sobald eine Stimme zu Ende ist. Der Clip endet genau dort, wo die Note anfängt, und die Note wird nur 0,126 s vor ihrem Start geplant (gemessen: planned 21,702, at 21,828). Der Check hat erst gewartet, bis die Note geplant war, und danach in mehreren Rundreisen nach der Startzeit des Clips gefragt. In einem trägen Browser war der Clip da schon vorbei.
Korrektur (nur tools/e2e/65-song.mjs):
Jede Abfrage liest Planung, beide Startzeiten und die Audio-Uhr in einem evaluate. Die Uhr steht im Detail des Checks.
Abweichung vom Plan: Die Startzeit des Clips merkt sich der Check aus der ersten Abfrage, in der sie da ist. Nur „in einem Zug lesen“ hätte nicht gereicht, denn die Abfragen kommen alle 150 ms plus Rundreise, und das ist länger als das Fenster von 0,126 s.
Tests:
Prettier, eslint: sauber
e2e 65 auf melektaus-atx: ALL PASSED, 59 Checks
Gegenprobe: Check vorübergehend bis nach dem Clip-Ende warten lassen und die Startzeit wie bisher gelesen → als einziger von 59 rot, clipStart: null bei Uhr 21,943 nach Clip-Ende 21,828. Die zuerst gemerkte Startzeit war im selben Lauf genau plainClip.at (19,8276).
Offen: Die 10 CI-Läufe ohne Rot aus der Fertig-Definition sind nicht belegt, weil CI derzeit abgeschaltet ist. Auf Wunsch trotzdem geschlossen, wird wieder geöffnet, falls der Fehler noch einmal auftaucht.
Behoben mit 8a49392d.
**Befund:** Die Vermutung hat gestimmt. `__gm.sound.startedAt` liefert `null`, sobald eine Stimme zu Ende ist. Der Clip endet genau dort, wo die Note anfängt, und die Note wird nur **0,126 s** vor ihrem Start geplant (gemessen: `planned` 21,702, `at` 21,828). Der Check hat erst gewartet, bis die Note geplant war, und danach in mehreren Rundreisen nach der Startzeit des Clips gefragt. In einem trägen Browser war der Clip da schon vorbei.
**Korrektur** (nur `tools/e2e/65-song.mjs`):
- Jede Abfrage liest Planung, beide Startzeiten und die Audio-Uhr in einem `evaluate`. Die Uhr steht im Detail des Checks.
- Abweichung vom Plan: Die Startzeit des Clips merkt sich der Check aus der **ersten** Abfrage, in der sie da ist. Nur „in einem Zug lesen“ hätte nicht gereicht, denn die Abfragen kommen alle 150 ms plus Rundreise, und das ist länger als das Fenster von 0,126 s.
**Tests:**
- Prettier, eslint: sauber
- e2e 65 auf `melektaus-atx`: ALL PASSED, 59 Checks
- Gegenprobe: Check vorübergehend bis nach dem Clip-Ende warten lassen und die Startzeit wie bisher gelesen → als einziger von 59 rot, `clipStart: null` bei Uhr 21,943 nach Clip-Ende 21,828. Die zuerst gemerkte Startzeit war im selben Lauf genau `plainClip.at` (19,8276).
**Offen:** Die 10 CI-Läufe ohne Rot aus der Fertig-Definition sind nicht belegt, weil CI derzeit abgeschaltet ist. Auf Wunsch trotzdem geschlossen, wird wieder geöffnet, falls der Fehler noch einmal auftaucht.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Aus #156, Durchgang 6. Wiederkehrender CI-Wackler, nach der Regel aus #282 („wenn er wiederkommt, eigenes Issue“).
Befund
Der Check in
tools/e2e/65-song.mjs:921, „the track plays through one shifter on its bus: its notes start a frame early, the clip of the other on time“, ist seit seiner Einführung mitb519cd1(#346) unverändert.suite-Läufen seit dem 07.10.: Task 593 (Durchgang 5, damals einmalig) und Task 636 (f9a953f, 10.10.).clipStart: null. Alles andere im Check stimmte, im Lauf 636 zum BeispielnoteStart64,352 = Note 64,398 minus ein Frame (0,0464 s).Vermutung (nicht gemessen)
__gm.sound.startedAt(voice)liefertnull, solange eine Stimme auf ihre Bytes wartet, oder wenn sie schon vorbei ist (src/viewport/SoundLibrary.ts:1533).Vorschlag
startedAtfür den Clip in demselbenevaluatewieplanned()/clips()lesen und die Audio-Uhr beim Fragen ins Detail schreiben. Bei einem Rot zeigt das Detail dann, ob der Clip schon vorbei war.Fertig, wenn
vorschläge passen
Behoben mit
8a49392d.Befund: Die Vermutung hat gestimmt.
__gm.sound.startedAtliefertnull, sobald eine Stimme zu Ende ist. Der Clip endet genau dort, wo die Note anfängt, und die Note wird nur 0,126 s vor ihrem Start geplant (gemessen:planned21,702,at21,828). Der Check hat erst gewartet, bis die Note geplant war, und danach in mehreren Rundreisen nach der Startzeit des Clips gefragt. In einem trägen Browser war der Clip da schon vorbei.Korrektur (nur
tools/e2e/65-song.mjs):evaluate. Die Uhr steht im Detail des Checks.Tests:
melektaus-atx: ALL PASSED, 59 ChecksclipStart: nullbei Uhr 21,943 nach Clip-Ende 21,828. Die zuerst gemerkte Startzeit war im selben Lauf genauplainClip.at(19,8276).Offen: Die 10 CI-Läufe ohne Rot aus der Fertig-Definition sind nicht belegt, weil CI derzeit abgeschaltet ist. Auf Wunsch trotzdem geschlossen, wird wieder geöffnet, falls der Fehler noch einmal auftaucht.