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:
co-authored by
Claude Opus 5.5
parent
da4ceac7d5
commit
837a634a22
@@ -5,13 +5,13 @@ using Shouldly;
|
||||
namespace ClawdDotNet.App.Tests.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Die Regeln, die bis zum 2026-09-06 in den Avalonia-Ansichtsmodellen standen.
|
||||
/// The rules that until 2026-09-06 lived in the Avalonia view models.
|
||||
///
|
||||
/// <para>Dass sie dort standen, war der Grund für diese Tests: Ein Ansichtsmodell hat
|
||||
/// keine Testabdeckung — das sagt der Oberflächen-Leitfaden ausdrücklich —, und mit der
|
||||
/// zweiten Oberfläche wären dieselben Regeln ein zweites Mal geschrieben worden. Jetzt
|
||||
/// gibt es sie einmal, und ab hier ist geprüft, dass beide Oberflächen dasselbe
|
||||
/// bekommen.</para>
|
||||
/// <para>That they lived there was the reason for these tests: a view model has
|
||||
/// no test coverage — the UI guide says so explicitly —, and with the
|
||||
/// second user interface the same rules would have been written a second time. Now
|
||||
/// they exist once, and from here on it is checked that both user interfaces get the same
|
||||
/// thing.</para>
|
||||
/// </summary>
|
||||
public sealed class AgentAdministrationTests
|
||||
{
|
||||
@@ -30,8 +30,8 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Die_Pruefung_ignoriert_Gross_und_Kleinschreibung()
|
||||
{
|
||||
// Zwei Agenten, die sich nur darin unterscheiden, waeren auf der Zielplattform
|
||||
// zwei Ordner und fuer jeden Menschen derselbe Agent.
|
||||
// Two agents differing only in that would be two folders on the target platform
|
||||
// and the same agent to every human.
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("SCOUT", "Scout", "modell")).Ok.ShouldBeFalse();
|
||||
@@ -49,10 +49,10 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Ein_angelegter_Agent_ueberlebt_den_Neustart()
|
||||
{
|
||||
// Der Kern des Befunds: LoadInstanceConfig leert die Agentenliste und baut sie
|
||||
// aus den Ordnern Agents/Agent-* wieder auf. Ein Agent, der nur in
|
||||
// InstanceSettings.json stand, war nach dem naechsten Start weg — genau das tat
|
||||
// die Oberflaeche bis zum 2026-09-06.
|
||||
// The core of the finding: LoadInstanceConfig clears the agent list and rebuilds it
|
||||
// from the folders Agents/Agent-*. An agent that only stood in
|
||||
// InstanceSettings.json was gone after the next start — exactly what
|
||||
// the user interface did until 2026-09-06.
|
||||
using var host = new TestHost();
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "modell", "Späher")).Ok.ShouldBeTrue();
|
||||
@@ -65,9 +65,9 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Aenderungen_an_einem_Agenten_ueberleben_den_Neustart()
|
||||
{
|
||||
// Dieselbe Ursache aus der anderen Richtung: Bis zum 2026-09-06 rief niemand im
|
||||
// laufenden Betrieb SaveAgentSettings. Modell, Prompt und Budget standen nur in
|
||||
// InstanceSettings.json — es sah aus wie Speichern und war keines.
|
||||
// The same cause from the other direction: until 2026-09-06 nobody called
|
||||
// SaveAgentSettings during operation. Model, prompt and budget only stood in
|
||||
// InstanceSettings.json — it looked like saving and wasn't.
|
||||
using var host = new TestHost();
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "altes-modell"));
|
||||
@@ -105,8 +105,8 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Jede_Aenderung_meldet_sich()
|
||||
{
|
||||
// Ohne diese Meldung erschiene ein in der Weboberflaeche angelegter Agent im
|
||||
// laufenden Fenster nicht — der ganze Grund, warum es das Ereignis gibt.
|
||||
// Without this notification an agent created in the web UI would not appear in the
|
||||
// running window — the whole reason the event exists.
|
||||
using var host = new TestHost();
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "modell"));
|
||||
@@ -119,9 +119,9 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Ein_entfernter_Agent_kommt_nach_dem_Neustart_nicht_wieder()
|
||||
{
|
||||
// Die Gegenrichtung desselben Befunds: Nur aus der Liste zu streichen genuegte
|
||||
// nicht — der Ordner blieb liegen, und beim naechsten Start stand der Agent
|
||||
// wieder da.
|
||||
// The opposite direction of the same finding: merely striking it from the list was not
|
||||
// enough — the folder stayed behind, and at the next start the agent was
|
||||
// back.
|
||||
using var host = new TestHost();
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "modell"));
|
||||
@@ -135,8 +135,8 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Ein_entfernter_Agent_behaelt_seine_Arbeit()
|
||||
{
|
||||
// Umbenannt, nicht geloescht. Im Arbeitsordner steht seine Arbeit, und ein Klick
|
||||
// in einer Liste ist keine Entscheidung, sie wegzuwerfen.
|
||||
// Renamed, not deleted. Its work is in the working folder, and a click
|
||||
// in a list is no decision to throw it away.
|
||||
using var host = new TestHost();
|
||||
|
||||
host.Host.AgentAdmin.Add(new NewAgent("scout", "Scout", "modell"));
|
||||
@@ -167,7 +167,7 @@ public sealed class AgentAdministrationTests
|
||||
host.Host.AgentAdmin.Find("scout")!.Tools["FileRW"].ShouldBeEmpty();
|
||||
}
|
||||
|
||||
// ─── #641: Rechte in der Werkzeugkonfiguration ───
|
||||
// ─── #641: permissions in the tool configuration ───
|
||||
|
||||
[Fact]
|
||||
public void Rechte_werden_normalisiert_gespeichert_und_ueberleben_den_Neustart()
|
||||
@@ -188,7 +188,7 @@ public sealed class AgentAdministrationTests
|
||||
[Fact]
|
||||
public void Einstellungen_speichern_loescht_die_Rechte_nicht()
|
||||
{
|
||||
// Die Einstellungsmasken schreiben ein frisches Woerterbuch ohne "erlaubt".
|
||||
// The settings forms write a fresh dictionary without "erlaubt".
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
host.Host.AgentAdmin.SetToolEnabled("scout", "Database", enabled: true);
|
||||
host.Host.AgentAdmin.SetToolRights("scout", "Database", ["select"], []);
|
||||
@@ -278,7 +278,7 @@ public sealed class JobAdministrationTests
|
||||
[Fact]
|
||||
public void Ein_leerer_Zeitplan_ist_kein_Fehler()
|
||||
{
|
||||
// Leer heisst „nie" und ist eine gueltige Angabe. Nur unlesbar ist ein Fehler.
|
||||
// Empty means "never" and is a valid statement. Only unreadable is an error.
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
|
||||
host.Host.JobAdmin.Add(new JobDefinition("scout", JobKind.AgentWakeup)).Ok.ShouldBeTrue();
|
||||
@@ -287,9 +287,9 @@ public sealed class JobAdministrationTests
|
||||
[Fact]
|
||||
public void Ein_Wakeup_laesst_sich_nicht_abschalten()
|
||||
{
|
||||
// SchedulerConfig hat keinen Schalter, und einen hier zu erfinden hiesse, dass
|
||||
// der Scanner ihn erst einmal lesen muesste. Sonst liefe ein „abgeschalteter"
|
||||
// Wakeup munter weiter.
|
||||
// SchedulerConfig has no switch, and inventing one here would mean that
|
||||
// the scanner would first have to read it. Otherwise a "disabled"
|
||||
// wakeup would happily keep running.
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
|
||||
host.Host.JobAdmin.Add(new JobDefinition("scout", JobKind.AgentWakeup, Cron: "0 * * * *"));
|
||||
@@ -321,8 +321,8 @@ public sealed class JobAdministrationTests
|
||||
[Fact]
|
||||
public void Ohne_Scanner_gilt_ein_Wakeup_als_nicht_aktiv()
|
||||
{
|
||||
// Er laeuft, solange der Scanner laeuft — der ist der einzige periodische
|
||||
// Treiber. Ohne ihn steht er, ohne dass jemand ihn abgeschaltet haette.
|
||||
// It runs as long as the scanner runs — that is the only periodic
|
||||
// driver. Without it, it stands still without anyone having disabled it.
|
||||
using var host = new TestHost(TestHost.Agent("scout"));
|
||||
|
||||
host.Host.JobAdmin.Add(new JobDefinition("scout", JobKind.AgentWakeup, Cron: "0 * * * *"));
|
||||
|
||||
Reference in New Issue
Block a user