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
@@ -4,13 +4,13 @@ using Shouldly;
namespace ClawdDotNet.Tools.Tests.Database;
/// <summary>
/// S1 aus der Bestandsaufnahme: Die Tabellen-Whitelist suchte den erlaubten Namen als
/// Teilzeichenkette irgendwo im Statement — auch in einem Kommentar. Bei
/// allowedTables ["prices"] genügte deshalb "DELETE FROM users -- prices", um eine
/// beliebige andere Tabelle zu löschen.
/// S1 from the inventory: the table whitelist looked for the allowed name as a
/// substring anywhere in the statement — including in a comment. With
/// allowedTables ["prices"] therefore "DELETE FROM users -- prices" was enough to delete
/// any other table.
///
/// Die Gegenproben sind genauso wichtig wie die Angriffe: Ein zu strenger Filter, der
/// legitime Abfragen blockiert, wäre im Betrieb genauso unbrauchbar.
/// The counter-checks are just as important as the attacks: a filter that is too strict and
/// blocks legitimate queries would be just as useless in operation.
/// </summary>
public sealed class SqlGuardTests
{
@@ -19,10 +19,10 @@ public sealed class SqlGuardTests
private static SqlInspection Inspect(string sql) => SqlGuard.Inspect(sql, Allowed);
// ═══════════════════════════════════════════════════════════
// Angriffe — alle müssen abgelehnt werden
// Attacks — all must be rejected
// ═══════════════════════════════════════════════════════════
// ─── #610: wiederholbares Anlegen und Strukturabfragen ───
// ─── #610: repeatable creation and structure queries ───
[Theory]
[InlineData("CREATE TABLE IF NOT EXISTS prices (id INT)", SqlOperation.Schema)]
@@ -86,7 +86,7 @@ public sealed class SqlGuardTests
[InlineData("INSERT INTO users SELECT * FROM prices")]
public void Ein_einziger_unerlaubter_Join_reicht_zur_Ablehnung(string sql)
{
// Entscheidend: JEDE referenzierte Tabelle muss erlaubt sein, nicht irgendeine.
// Crucial: EVERY referenced table must be allowed, not just any one.
var result = Inspect(sql);
result.IsValid.ShouldBeFalse();
@@ -109,7 +109,7 @@ public sealed class SqlGuardTests
}
// ═══════════════════════════════════════════════════════════
// Gegenproben — legitime Abfragen müssen durchgehen
// Counter-checks — legitimate queries must get through
// ═══════════════════════════════════════════════════════════
[Theory]
@@ -132,8 +132,8 @@ public sealed class SqlGuardTests
[InlineData("SELECT * FROM prices WHERE aktion = 'drop'")]
public void Harmlose_Schluesselwoerter_in_Werten_gelten_nicht_als_Schreibzugriff(string sql)
{
// Der alte Substring-Test stufte diese Abfragen fälschlich als Schreib- bzw.
// Strukturzugriff ein und blockierte sie für ReadOnly-Agenten.
// The old substring test wrongly classified these queries as write or
// structure access and blocked them for read-only agents.
var result = Inspect(sql);
result.IsValid.ShouldBeTrue(result.Error);