Stufe 4c (#764): Bezeichner auf Englisch - Typen, Methoden, Felder, Parameter, Locals, Testnamen

Mit Roslyn umbenannt (Verweise folgen, Zeichenketten bleiben unberuehrt).
Nicht umbenannt, weil gespeichert oder ueber die API gebunden (Stufe 4e):
Properties, Record-Parameter, Enum-Member sowie die Parameter der
Endpunkt-Handler (Routen-/Query-Bindung ueber den Namen). Die JSON-Felder
anonymer Objekte bleiben ausdruecklich benannt (JsonFilter: pfad).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-04 13:18:43 +02:00
co-authored by Claude Opus 5.5
parent 837a634a22
commit 77062facc9
190 changed files with 4813 additions and 4813 deletions
@@ -46,10 +46,10 @@ public sealed class BudgetRequestTests : IDisposable
[Fact]
public void A_special_budget_always_needs_a_human()
{
FreigabeRegeln.IstImmerFreigabe(CaseDeskToolName, "request_budget").ShouldBeTrue();
ApprovalRules.AlwaysNeedsApproval(CaseDeskToolName, "request_budget").ShouldBeTrue();
// Not even a tool configuration that allows it, or the tool's own default, lifts it.
FreigabeRegeln.Einstufen(CaseDeskToolName, "request_budget", Werkzeugrechte.Keine, StagingDecision.Auto, new StagingPolicy())
ApprovalRules.Classify(CaseDeskToolName, "request_budget", ToolRights.Keine, StagingDecision.Auto, new StagingPolicy())
.Entscheidung.ShouldBe(StagingDecision.Approve);
}
@@ -17,7 +17,7 @@ namespace ClawdDotNet.Tools.Tests.Taskboard;
/// again at every run what was already open from the previous one — over thirty tasks
/// for @human, among them the same price finding six times.
/// </summary>
public sealed class DublettenTests : IDisposable
public sealed class DuplicateTests : IDisposable
{
private readonly string _verzeichnis;
private readonly SqliteStorage _storage;
@@ -25,7 +25,7 @@ public sealed class DublettenTests : IDisposable
private readonly TaskboardService _board;
private readonly TaskboardTool _tool = new();
public DublettenTests()
public DuplicateTests()
{
_verzeichnis = Path.Combine(Path.GetTempPath(), "clawd-tests", Guid.NewGuid().ToString("N"));
_storage = new SqliteStorage(Path.Combine(_verzeichnis, "state.db"));
@@ -52,15 +52,15 @@ public sealed class DublettenTests : IDisposable
private Task<ToolResult> Run(string json)
=> _tool.ExecuteAsync(JsonDocument.Parse(json).RootElement, Context(), CancellationToken.None);
private Task<TaskItem> Anlegen(string titel, TaskItemStatus status = TaskItemStatus.Todo)
=> _board.CreateAsync(new TaskItem { Title = titel, Status = status, Assignee = "@human", Body = "Beobachtet." }, default);
private Task<TaskItem> Create(string title, TaskItemStatus status = TaskItemStatus.Todo)
=> _board.CreateAsync(new TaskItem { Title = title, Status = status, Assignee = "@human", Body = "Beobachtet." }, default);
// ─── task_find ───
[Fact]
public async Task Ohne_Treffer_sagt_die_Antwort_dass_angelegt_werden_darf()
public async Task Without_matches_the_answer_says_creating_is_allowed()
{
await Anlegen("Betriebsluecke: Wetter Warnungen veraltet");
await Create("Betriebsluecke: Wetter Warnungen veraltet");
var result = await Run("""{"action":"task_find","title":"Betriebsluecke: Eur Kurse nicht aktuell"}""");
@@ -70,21 +70,21 @@ public sealed class DublettenTests : IDisposable
}
[Fact]
public async Task Der_gleiche_Befund_wird_mit_Id_Alter_und_Einstufung_gefunden()
public async Task The_same_finding_is_found_with_id_age_and_classification()
{
var vorhanden = await Anlegen("Betriebsluecke: Eur Kurse nicht aktuell");
var present = await Create("Betriebsluecke: Eur Kurse nicht aktuell");
var result = await Run("""{"action":"task_find","title":"Betriebsluecke: Kurse EUR nicht aktuell"}""");
result.Success.ShouldBeTrue(result.ErrorMessage);
result.Content.ShouldContain(vorhanden.Id);
result.Content.ShouldContain(present.Id);
result.Content.ShouldContain("same issue");
result.Content.ShouldContain("open since");
result.Content.ShouldContain("task_comment", Case.Sensitive, "der Agent soll ergaenzen, nicht neu anlegen");
}
[Fact]
public async Task Ohne_Titel_fragt_das_Werkzeug_nach()
public async Task Without_title_the_tool_asks()
{
var result = await Run("""{"action":"task_find"}""");
@@ -95,14 +95,14 @@ public sealed class DublettenTests : IDisposable
// ─── the brake when creating ───
[Fact]
public async Task Eine_zweite_gleichlautende_Aufgabe_wird_nicht_angelegt()
public async Task A_second_identical_task_is_not_created()
{
var erste = await Anlegen("Betriebsluecke: Eur Kurse nicht aktuell");
var first = await Create("Betriebsluecke: Eur Kurse nicht aktuell");
var result = await Run("""{"action":"task_create","title":"Betriebsluecke: Kurse EUR nicht aktuell","assignee":"@human"}""");
result.Success.ShouldBeFalse();
result.ErrorMessage.ShouldNotBeNull().ShouldContain(erste.Id);
result.ErrorMessage.ShouldNotBeNull().ShouldContain(first.Id);
result.ErrorMessage.ShouldContain("recorded");
(await _board.ListAsync(new TaskQuery { Limit = 50 }, default)).Count
@@ -110,21 +110,21 @@ public sealed class DublettenTests : IDisposable
}
[Fact]
public async Task Das_erneute_Auftreten_steht_danach_an_der_bestehenden_Aufgabe()
public async Task The_recurrence_is_then_on_the_existing_task()
{
var erste = await Anlegen("Betriebsluecke: Nachrichten fehlen");
var first = await Create("Betriebsluecke: Nachrichten fehlen");
await Run("""{"action":"task_create","title":"Betriebsluecke: Nachrichten fehlen","assignee":"@human"}""");
var datei = await File.ReadAllTextAsync(Path.Combine(_board.TasksDirectory, (await _board.GetAsync(erste.Id, default))!.FileName));
var datei = await File.ReadAllTextAsync(Path.Combine(_board.TasksDirectory, (await _board.GetAsync(first.Id, default))!.FileName));
datei.ShouldContain("Observed again");
datei.ShouldContain("hausmeister", Case.Insensitive);
}
[Fact]
public async Task Ein_anderer_Sachverhalt_kommt_ganz_normal_durch()
public async Task A_different_matter_comes_through_normally()
{
await Anlegen("Betriebsluecke: Eur Kurse nicht aktuell");
await Create("Betriebsluecke: Eur Kurse nicht aktuell");
var result = await Run("""{"action":"task_create","title":"Betriebsluecke: Wetter Warnungen stand.md veraltet","assignee":"@human"}""");
@@ -133,9 +133,9 @@ public sealed class DublettenTests : IDisposable
}
[Fact]
public async Task Mit_force_darf_der_Agent_trotzdem_anlegen()
public async Task With_force_the_agent_may_create_anyway()
{
await Anlegen("Betriebsluecke: Eur Kurse nicht aktuell");
await Create("Betriebsluecke: Eur Kurse nicht aktuell");
var result = await Run("""{"action":"task_create","title":"Betriebsluecke: Eur Kurse nicht aktuell","assignee":"@human","force":true}""");
@@ -144,11 +144,11 @@ public sealed class DublettenTests : IDisposable
}
[Fact]
public async Task Die_Dublette_wird_auch_hinter_500_anderen_Aufgaben_gefunden()
public async Task The_duplicate_is_found_even_behind_500_other_tasks()
{
// #716: The search read ListAsync with a limit of 500, sorted by priority. An old
// task with low priority thus fell out of sight as soon as the board grew.
var alt = await _board.CreateAsync(new TaskItem
var old = await _board.CreateAsync(new TaskItem
{
Title = "Betriebsluecke: Eur Kurse nicht aktuell", Assignee = "@human", Priority = 1
}, default);
@@ -158,13 +158,13 @@ public sealed class DublettenTests : IDisposable
var result = await Run("""{"action":"task_create","title":"Betriebsluecke: Kurse EUR nicht aktuell","assignee":"@human"}""");
result.Success.ShouldBeFalse("die alte Aufgabe meint dasselbe");
result.ErrorMessage.ShouldNotBeNull().ShouldContain(alt.Id);
result.ErrorMessage.ShouldNotBeNull().ShouldContain(old.Id);
}
[Fact]
public async Task Eine_erledigte_Aufgabe_blockiert_den_naechsten_Befund_nicht()
public async Task A_done_task_does_not_block_the_next_finding()
{
await Anlegen("Betriebsluecke: Eur Kurse nicht aktuell", TaskItemStatus.Done);
await Create("Betriebsluecke: Eur Kurse nicht aktuell", TaskItemStatus.Done);
var result = await Run("""{"action":"task_create","title":"Betriebsluecke: Eur Kurse nicht aktuell","assignee":"@human"}""");