Zwei fuehren die Sendung: DogFather und die rechte Hand

Filipe, 28.09.2026: „die rolle dogfather und vanvan sollen alles sehen
und bereit machen auch vorher. nur die zwei sollen alles sehen,
vorbereiten und einschakten koennen."

DREI DINGE AENDERN SICH, UND ZWAR GENAU DIESE DREI

1. VORBEREITEN UND EINSCHALTEN duerfen jetzt beide -- einstellen,
   Vorbereitung, auf Sendung, beenden, Gaeste holen und entfernen,
   stummschalten, Anordnung, Video steuern. Beide dasselbe; es gibt
   hier keinen Ersten und keinen Zweiten. Das ist eine AUFGABE und
   kein Rang: Wer die Sendung fuehrt, bedient die Technik.

2. „ALLES SEHEN" heisst die Namensliste derer, die zusehen. Die
   bekamen bisher auch die linke Hand und die Modis, weil sie
   moderieren duerfen. Das war eine Vermischung zweier Dinge, die
   nichts miteinander zu tun haben: Wer einen Beitrag wegnehmen darf,
   muss deshalb nicht wissen, wer im Saal sitzt. Ab jetzt bekommt die
   Liste nur, wer auf der Buehne steht.

   Die Moderation bleibt unveraendert bei DogFather, beiden Haenden
   und den Modis -- einen Beitrag wegzunehmen ist weder „alles sehen"
   noch „vorbereiten" noch „einschalten", sondern dasselbe, was sie im
   Treff ohnehin tun.

3. WER AUF SENDUNG DRUECKT, IST IM BILD.

   Vorher stand als Host, wer zuletzt etwas eingestellt hatte. Mit
   zwei Leuten, die vorbereiten duerfen, waere das eine Falle: VanVan
   richtet am Nachmittag alles ein, Filipe drueckt abends auf Sendung
   -- und im Bild stuende VanVans Name, waehrend Filipe redet.

   Beim Einstellen wird `host_id` deshalb nur noch gefuellt, wenn
   dort noch niemand steht (damit die Ankuendigung „Als Naechstes"
   jemanden nennen kann). Wer die Sendung FUEHRT, entscheidet sich
   beim Einschalten.

GEPRUEFT IN BEIDE RICHTUNGEN

Nur zu messen, wer darf, hiesse: Die Tuer laesst sich spaeter weit
aufmachen, ohne dass etwas rot wird. pruef-reaktion misst deshalb
auch, wer ausdruecklich NICHT darf -- und dass es genau zwei sind:

  genau zwei fuehren die Sendung: admin, hand
  die rechte Hand darf einstellen / vorbereiten / Anordnung
  linke, modi, gast: duerfen nicht einstellen (403)
  ein Modi holt niemanden dazu (403)
  wer eingeschaltet hat, fuehrt die Sendung (Filipe)
  drueckt die rechte Hand, fuehrt sie (VanVan)
  die rechte Hand sieht, WER dabei ist -- sie fuehrt mit
  linke, modi: moderieren, bekommen die Namensliste aber nicht
  admin/hand: sehen Regiepult -- linke/modi/gast: nicht

Das Regiepult haengt an `ich.host` und an nichts sonst. Ein zweiter
Ort, an dem der Browser dieselbe Frage noch einmal beantwortet, waere
der, der spaeter abweicht -- und dann stuenden Knoepfe da, die mit 403
antworten.

pruef-reaktion 74 -> 88 Punkte, 0 Fehler. Dazu gruen: meldungen 8,
rechtetafel 19, verborgen 25, modi-verborgen 85.
This commit is contained in:
2026-09-28 02:01:32 +02:00
parent 5d89d108f9
commit 85101176d2
46 changed files with 796 additions and 669 deletions
+47 -6
View File
@@ -52,9 +52,25 @@ import {
export const reaktionRouter = express.Router();
/** Wer die Sendung fuehrt. */
const HOST_ROLLEN = new Set(["admin"]);
/** Wer Beitraege aus dem Chat nehmen darf. */
/** Wer die Sendung fuehrt: DogFather und die rechte Hand.
*
* Filipe am 28.09.2026: „die rolle dogfather und vanvan sollen alles
* sehen und bereit machen auch vorher. nur die zwei sollen alles
* sehen, vorbereiten und einschakten koennen."
*
* Das ist eine AUFGABE und kein Rang -- wer die Sendung fuehrt,
* bedient die Technik. Beide duerfen dasselbe; es gibt hier keinen
* Ersten und keinen Zweiten. */
const HOST_ROLLEN = new Set(["admin", "hand"]);
/** Wer Beitraege aus dem Chat nehmen darf.
*
* BLEIBT GROESSER ALS HOST_ROLLEN, und das ist Absicht: Einen
* Beitrag wegzunehmen ist weder „alles sehen" noch „vorbereiten"
* noch „einschalten" -- es ist dasselbe, was die Modis im Treff
* ohnehin tun. Wer moderiert, bekommt deshalb aber AUCH NICHT die
* Liste derer, die zusehen; die beiden Dinge hingen vorher
* zusammen, ohne dass es einen Grund dafuer gab. */
const MODERIERT = new Set(["admin", "hand", "linke", "modi"]);
export const REAKTION_HOST_ROLLEN = HOST_ROLLEN;
@@ -183,8 +199,15 @@ function lage(person) {
nie an (sonst rufen zwei gleichzeitig an, und beide
scheitern -- „glare"). Ohne die Liste kaeme das Bild eines
Gastes deshalb bei keinem Zuschauer an. Zwei fuer sich richtige
Regeln, die zusammen ein Loch ergeben. */
zuschauer: (istHost || binGast || MODERIERT.has(person.rolle))
Regeln, die zusammen ein Loch ergeben.
DIE MODERATION STAND HIER AUCH -- SEIT DEM 28.09. NICHT MEHR.
Filipe: „nur die zwei sollen alles sehen." Wer einen Beitrag
wegnehmen darf, muss deshalb nicht wissen, wer im Saal sitzt;
das war eine Vermischung zweier Dinge, die nichts miteinander
zu tun haben. Moderiert wird weiter -- im Chat sieht man
ohnehin, wer da ist. */
zuschauer: (istHost || binGast)
? dabei.map((d) => ({ id: d.id, name: d.name, rolle: d.rolle, sicht: !!d.sicht }))
: null,
ich: {
@@ -240,9 +263,23 @@ reaktionRouter.put("/workspace/api/reaktion", nurHost, express.json({ limit: "32
return res.status(400).json({ fehler: "beginn_vorbei" });
}
/* HOST_ID WIRD BEIM EINSTELLEN NUR GESETZT, WENN NOCH NIEMAND
DASTEHT (28.09.2026).
Vorher stand hier, wer zuletzt etwas eingestellt hat. Mit
zwei Leuten, die vorbereiten duerfen, ist das eine Falle:
VanVan richtet am Nachmittag alles ein, Filipe drueckt
abends auf Sendung -- und im Bild stuende VanVans Name,
waehrend Filipe redet.
Wer die Sendung FUEHRT, entscheidet sich beim Einschalten
(siehe /stand). Hier wird nur der leere Platz gefuellt, damit
die Ankuendigung „Als Naechstes" jemanden nennen kann. */
const bisher = sendung();
db().prepare(`UPDATE reaktion SET titel = ?, video = ?, vorschau = ?,
beginnt_am = ?, host_id = ?, geaendert = ? WHERE id = 1`)
.run(titel, video, vorschau, beginn, req.person.id, jetzt());
.run(titel, video, vorschau, beginn,
bisher.host_id || req.person.id, jetzt());
const l = lage(req.person);
melden("reaktion", { was: "eingestellt", lage: oeffentlich(l) });
@@ -272,6 +309,10 @@ reaktionRouter.post("/workspace/api/reaktion/stand", nurHost, express.json({ lim
felder.gestartet_am = jetzt();
felder.laeuft = 1;
felder.sekunde = 0;
/* WER EINSCHALTET, IST IM BILD. Seine Kamera bekommt den
Platz des Hosts -- und sein Name steht daran. Der andere
kann jederzeit als Gast dazukommen. */
felder.host_id = req.person.id;
}
if (neu === "zu" && s.stand === "live") {
/* WAS VORBEI IST, WANDERT IN DEN VERLAUF -- und der Live-Chat