Unter jeder Spur steht, was in ihr faehrt

„Ruhig / mail-ruhig" war dieselbe Auskunft zweimal, die zweite in
Kleinschrift. Der Warteschlangenname stand da, weil ich ihn fuer nuetzlich
hielt — er ist es, aber in docker-compose.yml und in MailLane, also dort, wo
jemand ihn wirklich braucht. Auf der Seite, auf der ein Betreiber entscheidet,
was wie eilig ist, sagt er nichts.

An seiner Stelle steht jetzt, was in der Spur faehrt und warum sie so faehrt:
wer auf die direkte wartet (jemand vor einem Bildschirm), was die wichtige
traegt (Wartung, Abschaltung, Wiederanlauf), und warum die ruhige warten darf
(eine Rechnung um zwei nachts ist dieselbe Rechnung).

Nachgesehen, bevor der Name verschwand: die Bereitschaftsseite nennt die
Spuren nirgends beim Warteschlangennamen — es geht nichts verloren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat/versandtakt
nexxo 2026-08-04 00:55:23 +02:00
parent 714f19d4d4
commit aaf8697c3d
4 changed files with 35 additions and 12 deletions

View File

@ -23,6 +23,14 @@ return [
'mail-wichtig' => 'Wichtig',
'mail-ruhig' => 'Ruhig',
],
'lane_hint' => [
// Was in dieser Spur faehrt und warum sie so faehrt — nicht der
// Warteschlangenname, der vorher hier stand: „Ruhig / mail-ruhig"
// wiederholte die Ueberschrift und sagte nichts.
'mail-direkt' => 'Passwort, Bestätigung, Sicherheitsmeldung. Darauf wartet gerade jemand vor dem Bildschirm — hier zu drosseln kostet einen Supportfall.',
'mail-wichtig' => 'Wartungsfenster, Abschaltung, Wiederanlauf. Soll rasch raus, verträgt aber einen Schub statt aller auf einmal.',
'mail-ruhig' => 'Rechnungen, Mahnungen, Hinweise. Ob sie um sechs abends oder um zwei nachts ankommen, ändert für den Kunden nichts.',
],
'unthrottled' => 'ungedrosselt',
'count' => 'Kontingent',
'minutes' => 'Minuten',

View File

@ -22,6 +22,11 @@ return [
'mail-wichtig' => 'Urgent',
'mail-ruhig' => 'Calm',
],
'lane_hint' => [
'mail-direkt' => 'Password, confirmation, security notice. Somebody is waiting in front of a screen — throttling here buys a support call.',
'mail-wichtig' => 'Maintenance windows, suspensions, resumptions. Should go out promptly, but tolerates going in batches.',
'mail-ruhig' => 'Invoices, dunning notices, notifications. Whether they arrive at six in the evening or two at night makes no difference.',
],
'unthrottled' => 'unthrottled',
'count' => 'Allowance',
'minutes' => 'Minutes',

View File

@ -30,13 +30,15 @@
<x-ui.panel class="mt-4">
@foreach ($lanes as $lane)
{{-- Der Warteschlangenname steht als Unterzeile bei der Spur,
nicht in der Wertspalte: dort stand er zwischen
Beschriftung und Eingabefeldern und las sich wie ein
weiterer Wert. Er bleibt aber stehen es ist der Name,
den der Arbeiter in docker-compose.yml abhört, und wer
dort nachsieht, braucht genau diese Zeichenkette. --}}
<x-ui.row :label="__('mail_pace.lane.'.$lane['key'])" :hint="$lane['key']"
{{-- Unter dem Spurnamen steht, was in ihr fährt. Dort stand
erst der Warteschlangenname mitten in der Wertspalte, dann
als Unterzeile beides half niemandem: „Ruhig / mail-ruhig"
wiederholt die Überschrift in Kleinschrift. Der technische
Name gehört dorthin, wo er gebraucht wird (die --queue-Liste
in docker-compose.yml und MailLane), nicht auf die Seite,
auf der ein Betreiber entscheidet, was wie eilig ist. --}}
<x-ui.row :label="__('mail_pace.lane.'.$lane['key'])"
:hint="__('mail_pace.lane_hint.'.$lane['key'])"
:for="$lane['throttled'] ? $lane['countField'] : null">
<div class="flex flex-wrap items-end gap-3">
@if ($lane['throttled'])

View File

@ -142,11 +142,19 @@ it('führt für jede Mailklasse denselben Namen in beiden Sprachen', function ()
}
});
it('stellt den technischen Spurnamen unter die Spur, nicht zwischen die Felder', function () {
// Er bleibt sichtbar — der Arbeiter in docker-compose.yml hört genau
// diese Zeichenkette ab —, aber als Unterzeile der Beschriftung.
it('sagt unter jeder Spur, was in ihr faehrt, statt ihren Warteschlangennamen zu wiederholen', function () {
// Vorher stand dort „Ruhig / mail-ruhig" — dieselbe Auskunft zweimal, die
// zweite in Kleinschrift. Der Warteschlangenname gehoert in die
// --queue-Liste des Arbeiters, nicht auf die Seite, auf der jemand
// entscheidet, was wie eilig ist.
$html = Livewire::actingAs(operator('Owner'), 'operator')->test(MailPace::class)->html();
expect($html)->toContain(MailLane::CALM)
->and($html)->not->toContain('font-mono text-xs text-muted">'.MailLane::CALM);
foreach ([MailLane::DIRECT, MailLane::URGENT, MailLane::CALM] as $spur) {
expect(Lang::has('mail_pace.lane_hint.'.$spur))->toBeTrue()
->and($html)->toContain(e(__('mail_pace.lane_hint.'.$spur)));
}
// Der rohe Name steht nur noch dort, wo er etwas bewirkt: im Wert der
// Auswahlfelder der Zuordnung, nicht als sichtbarer Text.
expect($html)->not->toContain('>'.MailLane::CALM.'<');
});