diff --git a/server/pruef-befinden.mjs b/server/pruef-befinden.mjs
index edf942b5..b7f2eb0a 100644
--- a/server/pruef-befinden.mjs
+++ b/server/pruef-befinden.mjs
@@ -213,12 +213,51 @@ melde("=== 2. Sechs Fragen, ein Rhythmus ===");
passiert, wenn der Versatz und die Zahl der Fragen einen
gemeinsamen Teiler haben. */
{
+ /* DIE GRENZE WIRD GERECHNET, NICHT EINGETRAGEN (20.09.2026).
+
+ Hier stand fest „6 Runden". Das war richtig, solange es sieben
+ wechselnde Fragen bei drei je Runde gab. Mit dreizehn Fragen ist
+ es nur noch Zufall, ob die Zahl passt -- und eine Pruefung, die
+ bei jedem Katalogzuwachs von Hand nachgestellt werden muss, wird
+ irgendwann nachgestellt, statt den Fehler zu zeigen.
+
+ Der Anspruch ist stattdessen: Es darf nicht laenger dauern, als
+ es MUSS, plus eine Runde Luft. Weniger als ceil(wechselnde /
+ Plaetze) geht rechnerisch nicht; mehr als eine Runde darueber
+ heisst, dass die Auswahl sich im Kreis dreht.
+
+ GENAU SO IST DER FEHLER AUFGEFALLEN, den diese Zeile gefunden
+ hat: Eine erste Fassung der feldbewussten Rotation brauchte
+ ZWOELF Runden statt vier -- fast ein halbes Jahr, bis jede Frage
+ einmal gestellt war. */
+ const wechselnde = kat.ENTWICKLUNG_SELBST.filter((p) => !p.kern).length;
+ const mindestens = Math.ceil(wechselnde / modul.ZUSATZ_PRO_RUNDE);
+ const grenze = mindestens + 1;
+
const gesehen = new Set();
- for (let r = 0; r < 6; r++) {
+ let gebraucht = null;
+ for (let r = 0; r < grenze * 4; r++) {
for (const p of modul.fragenFuer(idFrida, r).alle) gesehen.add(p.schluessel);
+ if (gebraucht === null && gesehen.size === kat.ENTWICKLUNG_SELBST.length) {
+ gebraucht = r + 1;
+ }
}
ok(gesehen.size === kat.ENTWICKLUNG_SELBST.length,
- `über sechs Runden kommt jede der ${kat.ENTWICKLUNG_SELBST.length} Fragen dran (${gesehen.size})`);
+ `jede der ${kat.ENTWICKLUNG_SELBST.length} Fragen kommt überhaupt dran (${gesehen.size})`);
+ ok(gebraucht !== null && gebraucht <= grenze,
+ `und zwar in ${gebraucht} Runden — rechnerisch nötig sind ${mindestens}, erlaubt ${grenze}`);
+
+ /* UND JEDE RUNDE STREUT ÜBER DIE FELDER. Vier Zusatzfragen aus
+ demselben Feld waeren kein Befinden mehr, sondern ein Interview
+ zu einem Thema -- genau das passiert, wenn der Ring dem nach
+ Themen sortierten Katalog folgt. */
+ let engste = 99;
+ for (let r = 0; r < 12; r++) {
+ const felder = new Set(modul.fragenFuer(idFrida, r).zusatz.map((p) => p.feld));
+ engste = Math.min(engste, felder.size);
+ }
+ ok(engste >= Math.min(3, modul.ZUSATZ_PRO_RUNDE),
+ `auch die engste Runde streut über mindestens 3 Felder (${engste})`);
/* Und die Auswahl ist STABIL: derselbe Stand, dieselbe Liste.
Zufall hiesse, dass bei jedem Neuladen etwas anderes dasteht. */
ok(modul.fragenFuer(idFrida, 2).alle.map((p) => p.schluessel).join()
@@ -411,8 +450,32 @@ melde("=== 5. Eine Seite, ein Zweck ===");
ok(!/personen-block|meine-karte|abweichung/.test(b),
"und keinen einzigen Abschnitt über andere Menschen");
- ok(/befinden\.js/.test(b) && !/entwicklung\.js/.test(b),
- "sie lädt ihr eigenes Skript, nicht das der Entwicklungsseite");
+ /* DIE SKRIPT-QUELLEN, NICHT DER ROHE TEXT (korrigiert 20.09.2026).
+
+ Hier stand `!/entwicklung\.js/.test(b)` -- eine Textsuche ueber die
+ GANZE Datei. Die schlug an einem KOMMENTAR an, der voellig zu
+ Recht die Serverdatei `workspace-entwicklung.js` benennt. Die
+ Pruefung meldete damit einen Fehler an einer Stelle, an der nichts
+ kaputt war, und stand der eigentlichen Frage im Weg.
+
+ Die eigentliche Frage lautet: Welche Dateien LAEDT die Seite? Die
+ steht in den `src`-Angaben und nirgends sonst. Dieselbe Lehre wie
+ bei pruef-schranke am 19.09.: Wer Text sucht, misst Text -- nicht
+ die Sache. */
+ const quellen = [...b.matchAll(/
-
-
-
-
-
-
-