Stufe 4c (#764): Kommentare in C#, WebUI-Skripten, CSS und HTML auf Englisch

Rund 2.600 Kommentarblöcke in 310 C#-Dateien übersetzt, Begründungen vollständig
erhalten: blockweise gleiche Anzahl wie vorher, kein Block unter 60 % seiner
Länge, der Code außerhalb der Kommentare per Tokenizer byte-identisch geprüft.
Zitate deutscher Oberflächentexte und Testdaten bleiben deutsch.

WebUI: Kommentare in JS/CSS/HTML übersetzt, JSDoc-@param an die in 4b
umbenannten Parameter angeglichen.

Dabei behoben:
- 4b hatte "tag" (HTML-Tag) als deutsches "Tag" gelesen und zu "dayValue"
  gemacht (makeElement, svg, Tagesübersicht) - zurück auf tag/day.
- Aufgaben "InProgress" bekamen die Plakettenart "laufend", für die es nie eine
  CSS-Klasse gab - jetzt "success" wie laufende Instanzen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-04 12:45:03 +02:00
co-authored by Claude Opus 5.5
parent da4ceac7d5
commit 837a634a22
311 changed files with 7238 additions and 7252 deletions
@@ -6,7 +6,7 @@ using Shouldly;
namespace ClawdDotNet.Manager.Tests;
/// <summary>Fängt die letzte Anfrage ab und antwortet fest, ohne Netzwerkzugriff.</summary>
/// <summary>Captures the last request and answers with a fixed response, without network access.</summary>
internal sealed class CapturingHandler(
HttpStatusCode status = HttpStatusCode.OK,
string responseBody = """{"status":"success","item_id":1,"is_new":true,"occurrence_count":1}""")
@@ -32,13 +32,12 @@ internal sealed class CapturingHandler(
}
/// <summary>
/// Die stellvertretende Meldung (#528, Konzept Abschnitt 4).
/// The report on the instance's behalf (#528, concept section 4).
///
/// <para>Am 2026-09-08 hat sich eine Instanz aufgehängt und wurde von Windows beendet:
/// keine Protokollzeile, keine Fehlermeldung, kein Bugtracker-Eintrag. Bauartbedingt —
/// Meldeweg und Watchdog lebten in dem Prozess, über den sie berichten sollten. Der
/// Manager meldet deshalb an ihrer Stelle, und zwar <b>nur</b> das, was aus seiner Sicht
/// relevant ist.</para>
/// <para>On 2026-09-08 an instance hung and was ended by Windows:
/// no log line, no error message, no bug tracker entry. Inherent in the design —
/// reporting path and watchdog lived in the process they were supposed to report on. The
/// manager therefore reports in their place, and <b>only</b> what is relevant from its point of view.</para>
/// </summary>
public sealed class SupervisionReporterTests
{
@@ -70,13 +69,13 @@ public sealed class SupervisionReporterTests
rumpf.ShouldContain("4711");
rumpf.ShouldContain("137");
rumpf.ShouldContain("instanzmanager");
rumpf.ShouldContain("clawddotnet"); // Projektbindung
rumpf.ShouldContain("clawddotnet"); // project binding
rumpf.ShouldContain("0.1.2"); // build_version
}
/// <summary>
/// Was die Instanz betrifft, bleibt in der Instanz — sie meldet es selbst, mit ihrem
/// eigenen Sub-Token. Der Manager meldet nur, was niemand bestellt hat.
/// What concerns the instance stays in the instance — it reports it itself, with its
/// own sub-token. The manager only reports what nobody ordered.
/// </summary>
[Theory]
[InlineData(InstanceEventKind.Started)]
@@ -89,9 +88,9 @@ public sealed class SupervisionReporterTests
}
/// <summary>
/// Stürzt dieselbe Instanz wiederholt ab, soll der Server hochzählen statt den
/// Bugtracker mit Zwillingen zu füllen — wiederholte Abstürze sind ein Befund und
/// nicht ein Dutzend gleicher.
/// If the same instance crashes repeatedly, the server should count up instead of filling the
/// bug tracker with twins — repeated crashes are one finding and
/// not a dozen identical ones.
/// </summary>
[Fact]
public async Task Dieselbe_Instanz_und_dieselbe_Art_ergeben_denselben_Schluessel()
@@ -104,11 +103,11 @@ public sealed class SupervisionReporterTests
await melder.ReportAsync(Ereignis(InstanceEventKind.Crashed));
SchluesselAus(_handler.LastBody!).ShouldBe(erster);
// Eine andere Art ist ein anderer Befund.
// A different kind is a different finding.
await melder.ReportAsync(Ereignis(InstanceEventKind.Unresponsive));
SchluesselAus(_handler.LastBody!).ShouldNotBe(erster);
// Und eine andere Instanz erst recht.
// And a different instance all the more.
await melder.ReportAsync(
Ereignis(InstanceEventKind.Crashed, dir: @"C:\Instanzen\Instance-Beta"));
SchluesselAus(_handler.LastBody!).ShouldNotBe(erster);
@@ -124,9 +123,9 @@ public sealed class SupervisionReporterTests
}
/// <summary>
/// Ein leerer Auszug ist die aussagekräftigste Zeile der ganzen Meldung: Ein Prozess,
/// der erschlagen wurde, bevor sein Schreibpuffer geleert war, hinterlässt nichts.
/// Genau das war der Zustand aus #529.
/// An empty excerpt is the most meaningful line of the whole report: a process
/// that was killed before its write buffer was flushed leaves nothing.
/// Exactly that was the state from #529.
/// </summary>
[Fact]
public async Task Ein_leerer_Protokollauszug_wird_ausdruecklich_gesagt()
@@ -137,9 +136,9 @@ public sealed class SupervisionReporterTests
}
/// <summary>
/// Ein Meldeweg, der selbst wirft, wäre die schlechteste aller Welten: Der
/// ursprüngliche Befund ginge dabei verloren, und die Aufsicht stürbe an ihrem
/// eigenen Bericht.
/// A reporting path that throws itself would be the worst of all worlds: the
/// original finding would get lost, and the supervision would die of its
/// own report.
/// </summary>
[Fact]
public async Task Ein_Serverfehler_reisst_die_Aufsicht_nicht_mit()