zerodds-xcdr2-csharp 1.0 — Spec Coverage
Source: internal/standards/cache/omg/dds-xtypes-1.3.pdf (§7.2, §7.4) and internal/standards/cache/omg/idl-4.2.pdf (§7) — what the C# column answers.
The mechanism this column shares with the other twenty — the two walks, the framing, Table 9, the key hash and the driver — is in zerodds-xcdr2-bindings-conformance-1.0.md. This document carries only what the C# column decides for itself, and its own evidence.
§7.5.1 The parts of the column
§7.5.1 The concrete syntax tree and its text form
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. This column’s declarations are built as a tree and only then written as text; no emitter concatenates source.
Repo: crates/lang-cst/src/csharp/, crates/lang-render/src/csharp.rs
Tests: crates/lang-render/src/csharp.rs::tests (13 tests), among them a_class_opens_its_brace_on_a_line_of_its_own, a_rooted_path_renders_with_global, an_array_renders_one_pair_of_brackets_per_level, a_nullable_value_type_renders_with_a_question_mark, a_namespace_nests_and_its_members_are_indented;
across all renderers crates/lang-render/tests/rendering.rs::every_renderer_ends_its_output_with_exactly_one_newline, crates/lang-render/tests/rendering.rs::no_rendered_line_carries_trailing_whitespace.
Status: done
§7.5.1 The rule catalogue
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. What becomes of which model node is a rule set and not a special case inside the walk.
Repo: crates/lang-rules/src/rule/csharp.rs
Tests: crates/lang-rules/tests/apply.rs::every_language_catalogue_fires_on_the_same_model,
crates/lang-rules/tests/apply.rs::every_catalogue_serialises_and_reads_back_the_same
Status: done
§7.5.1 The materialiser
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. The materialiser carries the language’s own rules: names and keywords, collisions, and what the language cannot express at all.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_every_wired_language
Status: done
§7.5.1 The codec backend
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. The backend supplies the spelling the shared encoding decision takes in this language — receiver, method name, argument form.
Repo: crates/lang-rules/src/emit/csharp.rs
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_a_full_codec_in_every_wired_language,
crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs
Status: done
§7.5.1 The Table 9 defaulter
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. A reader with no Table 9 answer has no defined value at five positions; this file is this column’s answer.
Repo: crates/lang-rules/src/default_csharp.rs
Tests: crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs
Status: done
§7.5.1 The wire runtime
Spec: §7.5.1 — Plain language binding — the mapping onto the target language is the PSM’s own. The runtime reads §7.4 from the clause text on its own and calls no other column; that is where this column’s independence lives.
Repo: runtime/csharp, endpoint SDK endpoints/csharp
Tests: crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_a_runtime,
crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_an_endpoint_sdk
Status: done
§7.2.2 What this column decides for itself
§7.2.2.2 Every IDL primitive reaches the C# type that holds it
Spec: §7.2.2.2 — Primitive types — BOOLEAN, BYTE, INT8..UINT64, FLOAT32, FLOAT64, FLOAT128, CHAR8, CHAR16; every width is fixed.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::every_idl_primitive_reaches_the_csharp_type_that_holds_it
Status: done
IDL 4.2 §7.4.13 fixed becomes a string and not a decimal
Spec: IDL 4.2 §7.4.13 — fixed<P,S> — a decimal with a declared digit count and scale.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_fixed_is_a_string_and_not_a_decimal
Status: done
§7.2.2.4.3 A sequence and an array are both C# arrays
Spec: §7.2.2.4.3 — Sequence — one-dimensional, bound optional.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_sequence_and_an_array_are_both_csharp_arrays
Status: done
§7.2.2.4.3 A map becomes an array of a generated entry class; one shape means one class
Spec: §7.2.2.4.3 — Map — key/value pairs; §7.4.3.5.3 rules 11-16 fix the order and the framing.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_map_is_an_array_of_a_generated_entry_class,
crates/lang-rules/src/adapter/csharp.rs::tests::two_maps_of_one_shape_are_one_entry_class,
crates/lang-rules/src/adapter/csharp.rs::tests::two_maps_whose_csharp_spelling_coincides_are_still_two_entry_classes
Status: done
§7.2.2.4.4.4.7 An optional value type is nullable and a reference one is not
Spec: §7.2.2.4.4.4.7 — A structure member may be optional; a union member never is.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_optional_value_type_is_nullable_and_a_reference_one_is_not,
crates/lang-rules/src/adapter/csharp.rs::tests::an_optional_enum_is_nullable_because_an_enum_is_a_value_type
Status: done
§7.2.2.4.1.1 An enumeration becomes a real enum, and a member of it has that type
Spec: §7.2.2.4.1.1 — Enumeration — int32 literals, ordered, bit_bound 1..32.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_enumeration_is_a_real_enum_and_a_member_of_it_is_that_type,
crates/lang-rules/src/adapter/csharp.rs::tests::an_explicit_enumerator_value_is_written_out
Status: done
§7.2.2.4.1.2 A bitmask becomes a [Flags] enum over the holder its bound calls for
Spec: §7.2.2.4.1.2 — Bitmask — bound 1..64, named bits.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_bitmask_is_a_flags_enum_over_the_holder_its_bound_calls_for,
crates/lang-rules/src/adapter/csharp.rs::tests::a_bitset_is_a_class_of_one_field_per_bitfield
Status: done
IDL 4.2 §7.5.2 module becomes a namespace; a reopened module stays one block
Spec: IDL 4.2 §7.5.2 — module is a naming scope; an identifier is unique per scope.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_module_is_a_namespace_and_two_modules_do_not_collide,
crates/lang-rules/src/adapter/csharp.rs::tests::a_module_reopened_beside_a_nested_one_is_one_namespace_block
Status: done
IDL 4.2 §7.2.3 A C# keyword is escaped with @; the IDL name stays on the field
Spec: IDL 4.2 §7.2.3 — Identifiers are ASCII and case-insensitive on comparison; a collision has to be reported.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_identifier_that_is_a_csharp_keyword_is_escaped_with_an_at_sign,
crates/lang-rules/src/adapter/csharp.rs::tests::every_field_carries_the_idl_name_it_was_folded_from,
crates/lang-rules/src/adapter/csharp.rs::tests::two_members_that_differ_only_after_the_fold_stay_two_members
Status: done
IDL 4.2 §7.4.3 interface becomes an interface of signatures with the IDL passing modes
Spec: IDL 4.2 §7.4.3 — interface — operations with in/out/inout parameters.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_interface_is_an_interface_of_signatures_with_the_idl_passing_modes,
crates/lang-rules/src/adapter/csharp.rs::tests::an_exception_is_a_data_class_and_not_a_system_exception
Status: done
§7.3.1 How the column is held to it
§7.3.1 Every corpus case renders or names the layer that refused it
Spec: §7.3.1 — Every corpus case renders or names the layer that refused it. A case that stopped rendering would otherwise be found by whichever probe ran next, a build directory away from the construct that caused it.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::every_corpus_case_renders_or_names_its_failure
Status: done
§7.4 A construct with no data form in this language is named and not left out
Spec: §7.4 — A construct with no data form in this language is named and not left out. A silently dropped construct is the worst class of fault: the receiver sees no error, it sees wrong data.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_construct_with_no_csharp_data_form_is_named_and_not_left_out
Status: done
§7.2.2.4.8 @verbatim lands at the placements the clause names for this language
Spec: §7.2.2.4.8 — @verbatim lands at the placements the clause names for this language.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/tests/verbatim_end_to_end.rs::csharp_puts_begin_and_end_inside_the_type_body
Status: done
§7.3.1 Driver and measurement
§7.3.1 idlc generate --lang c#
Spec: §7.3.1 — the IDL type representation is the input of generation; the output is this column’s source.
Repo: tools/idlc/src/generate.rs, tools/idlc/src/main.rs
Tests: tools/idlc/src/generate.rs::tests::every_language_round_trips_through_its_own_name,
tools/idlc/src/generate.rs::tests::language_names_lists_every_language_once
Status: done
§7.4 The measurement harness of this column
Spec: §7.4 — a column’s octets are compared against recorded octets rather than asserted in its own tests.
Repo: tools/wireprobe/wireprobe-zerodds-csharp-gen/, tools/wireprobe/wireprobe-zerodds-csharp, tools/wireprobe/wireprobe-csharp-corpus
Tests: crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_a_cell_generator,
crates/lang-rules/tests/every_language_has_its_parts.rs::every_cell_generator_guards_against_a_missing_toolchain
Status: done
Audit Status
21 done / 0 partial / 0 open / 0 blocked / 0 n/a (informative).
Test run: cargo test -p zerodds-lang-rules — 1024 tests green, 0 failed (20 ignored: the whole-corpus compile runs, which need --include-ignored).
Open items: none.
zerodds-xcdr2-csharp 1.0 — Spec-Coverage
Quelle: internal/standards/cache/omg/dds-xtypes-1.3.pdf (§7.2, §7.4) und internal/standards/cache/omg/idl-4.2.pdf (§7) — was die C#-Spalte beantwortet.
Der Mechanismus, den diese Spalte mit den zwanzig anderen teilt — die beiden Walks, die Rahmung, Table 9, der KeyHash und der Treiber —, steht in zerodds-xcdr2-bindings-conformance-1.0.md. Dieses Dokument führt nur, was die C#-Spalte selbst entscheidet, und ihre eigenen Nachweise.
§7.5.1 Die Teile der Spalte
§7.5.1 Der konkrete Syntaxbaum und seine Textform
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Die Deklarationen dieser Spalte werden als Baum gebaut und erst danach als Text geschrieben; kein Emitter setzt Quelltext zusammen.
Repo: crates/lang-cst/src/csharp/, crates/lang-render/src/csharp.rs
Tests: crates/lang-render/src/csharp.rs::tests (13 Tests), darunter a_class_opens_its_brace_on_a_line_of_its_own, a_rooted_path_renders_with_global, an_array_renders_one_pair_of_brackets_per_level, a_nullable_value_type_renders_with_a_question_mark, a_namespace_nests_and_its_members_are_indented;
querschnittlich crates/lang-render/tests/rendering.rs::every_renderer_ends_its_output_with_exactly_one_newline, crates/lang-render/tests/rendering.rs::no_rendered_line_carries_trailing_whitespace.
Status: done
§7.5.1 Der Regelkatalog
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Was aus welchem Modellknoten wird, steht als Regelmenge und nicht als Sonderfall im Walk.
Repo: crates/lang-rules/src/rule/csharp.rs
Tests: crates/lang-rules/tests/apply.rs::every_language_catalogue_fires_on_the_same_model,
crates/lang-rules/tests/apply.rs::every_catalogue_serialises_and_reads_back_the_same
Status: done
§7.5.1 Der Materialisierer
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Der Materialisierer trägt die Eigenheiten der Sprache: Namens- und Schlüsselwortbehandlung, Kollisionen und das, was die Sprache gar nicht ausdrücken kann.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_every_wired_language
Status: done
§7.5.1 Das Codec-Backend
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Das Backend liefert die Schreibweise, in der die geteilte Kodierungsentscheidung in dieser Sprache steht — Empfänger, Methodenname, Argumentform.
Repo: crates/lang-rules/src/emit/csharp.rs
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_a_full_codec_in_every_wired_language,
crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs
Status: done
§7.5.1 Der Table-9-Defaulter
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Ein Leser ohne Tab.9-Antwort hat an fünf Stellen keinen definierten Wert; diese Datei ist die Antwort dieser Spalte.
Repo: crates/lang-rules/src/default_csharp.rs
Tests: crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs
Status: done
§7.5.1 Die Wire-Laufzeit
Spec: §7.5.1 — Plain Language Binding — die Abbildung auf die Zielsprache ist PSM-eigen. Die Laufzeit liest §7.4 eigenständig aus dem Klauseltext und ruft keine andere Spalte; dort liegt die Unabhängigkeit dieser Spalte.
Repo: runtime/csharp, Endpoint-SDK endpoints/csharp
Tests: crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_a_runtime,
crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_an_endpoint_sdk
Status: done
§7.2.2 Was diese Spalte selbst entscheidet
§7.2.2.2 Jedes IDL-Primitiv erreicht den C#-Typ, der es hält
Spec: §7.2.2.2 — Primitive Types — BOOLEAN, BYTE, INT8..UINT64, FLOAT32, FLOAT64, FLOAT128, CHAR8, CHAR16; jede Breite ist festgelegt.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::every_idl_primitive_reaches_the_csharp_type_that_holds_it
Status: done
IDL 4.2 §7.4.13 fixed wird ein string und kein decimal
Spec: IDL 4.2 §7.4.13 — fixed<P,S> — eine Dezimalzahl mit deklarierter Stellenzahl und Skalierung.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_fixed_is_a_string_and_not_a_decimal
Status: done
§7.2.2.4.3 Sequenz und Array sind beide C#-Arrays
Spec: §7.2.2.4.3 — Sequence — eindimensional, Schranke optional.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_sequence_and_an_array_are_both_csharp_arrays
Status: done
§7.2.2.4.3 Eine map wird ein Array einer erzeugten Entry-Klasse; gleiche Form heißt eine Klasse
Spec: §7.2.2.4.3 — Map — Key/Value-Paare; §7.4.3.5.3 Regeln 11-16 legen Reihenfolge und Rahmung fest.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_map_is_an_array_of_a_generated_entry_class,
crates/lang-rules/src/adapter/csharp.rs::tests::two_maps_of_one_shape_are_one_entry_class,
crates/lang-rules/src/adapter/csharp.rs::tests::two_maps_whose_csharp_spelling_coincides_are_still_two_entry_classes
Status: done
§7.2.2.4.4.4.7 Ein optionaler Value-Type wird nullable, ein Reference-Type nicht
Spec: §7.2.2.4.4.4.7 — Ein Struct-Member darf optional sein; ein Union-Member nie.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_optional_value_type_is_nullable_and_a_reference_one_is_not,
crates/lang-rules/src/adapter/csharp.rs::tests::an_optional_enum_is_nullable_because_an_enum_is_a_value_type
Status: done
§7.2.2.4.1.1 Eine Enumeration wird ein echtes enum, und ein Member davon hat diesen Typ
Spec: §7.2.2.4.1.1 — Enumeration — Int32-Literale, geordnet, bit_bound 1..32.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_enumeration_is_a_real_enum_and_a_member_of_it_is_that_type,
crates/lang-rules/src/adapter/csharp.rs::tests::an_explicit_enumerator_value_is_written_out
Status: done
§7.2.2.4.1.2 Eine Bitmask wird ein [Flags]-Enum über dem Holder, den ihre Schranke verlangt
Spec: §7.2.2.4.1.2 — Bitmask — Schranke 1..64, benannte Bits.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_bitmask_is_a_flags_enum_over_the_holder_its_bound_calls_for,
crates/lang-rules/src/adapter/csharp.rs::tests::a_bitset_is_a_class_of_one_field_per_bitfield
Status: done
IDL 4.2 §7.5.2 module wird ein Namensraum; ein wiedereröffnetes Modul bleibt ein Block
Spec: IDL 4.2 §7.5.2 — module ist ein Naming-Scope; ein Identifier ist je Scope einmalig.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_module_is_a_namespace_and_two_modules_do_not_collide,
crates/lang-rules/src/adapter/csharp.rs::tests::a_module_reopened_beside_a_nested_one_is_one_namespace_block
Status: done
IDL 4.2 §7.2.3 Ein C#-Keyword wird mit @ entschärft; der IDL-Name bleibt am Feld stehen
Spec: IDL 4.2 §7.2.3 — Identifier sind ASCII und beim Vergleich case-insensitiv; eine Kollision muss gemeldet werden.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_identifier_that_is_a_csharp_keyword_is_escaped_with_an_at_sign,
crates/lang-rules/src/adapter/csharp.rs::tests::every_field_carries_the_idl_name_it_was_folded_from,
crates/lang-rules/src/adapter/csharp.rs::tests::two_members_that_differ_only_after_the_fold_stay_two_members
Status: done
IDL 4.2 §7.4.3 interface wird ein Interface von Signaturen mit den IDL-Übergabemodi
Spec: IDL 4.2 §7.4.3 — interface — Operationen mit in/out/inout-Parametern.
Repo: crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::an_interface_is_an_interface_of_signatures_with_the_idl_passing_modes,
crates/lang-rules/src/adapter/csharp.rs::tests::an_exception_is_a_data_class_and_not_a_system_exception
Status: done
§7.3.1 Woran die Spalte gehalten wird
§7.3.1 Jeder Korpusfall rendert oder benennt die Schicht, die ihn abgelehnt hat
Spec: §7.3.1 — Jeder Korpusfall rendert oder benennt die Schicht, die ihn abgelehnt hat. Ein Fall, der zu rendern aufhört, würde sonst erst von der nächsten Messung gefunden — ein Build-Verzeichnis vom Konstrukt entfernt, das ihn verursacht hat.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::every_corpus_case_renders_or_names_its_failure
Status: done
§7.4 Ein Konstrukt ohne Datenform in dieser Sprache wird benannt und nicht ausgelassen
Spec: §7.4 — Ein Konstrukt ohne Datenform in dieser Sprache wird benannt und nicht ausgelassen. Ein stillschweigend ausgelassenes Konstrukt ist die schlimmste Fehlerklasse: der Empfänger sieht keinen Fehler, sondern falsche Daten.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/src/adapter/csharp.rs::tests::a_construct_with_no_csharp_data_form_is_named_and_not_left_out
Status: done
§7.2.2.4.8 @verbatim landet an den Stellen, die die Klausel für diese Sprache nennt
Spec: §7.2.2.4.8 — @verbatim landet an den Stellen, die die Klausel für diese Sprache nennt.
Repo: crates/lang-rules/src/emit/csharp.rs, crates/lang-rules/src/adapter/csharp.rs
Tests: crates/lang-rules/tests/verbatim_end_to_end.rs::csharp_puts_begin_and_end_inside_the_type_body
Status: done
§7.3.1 Treiber und Messung
§7.3.1 idlc generate --lang c#
Spec: §7.3.1 — die IDL-Type-Representation ist die Eingabe der Erzeugung; die Ausgabe ist die Quelle dieser Spalte.
Repo: tools/idlc/src/generate.rs, tools/idlc/src/main.rs
Tests: tools/idlc/src/generate.rs::tests::every_language_round_trips_through_its_own_name,
tools/idlc/src/generate.rs::tests::language_names_lists_every_language_once
Status: done
§7.4 Der Messaufbau dieser Spalte
Spec: §7.4 — die Oktette einer Spalte werden gegen aufgezeichnete Oktette verglichen und nicht in ihren eigenen Tests behauptet.
Repo: tools/wireprobe/wireprobe-zerodds-csharp-gen/, tools/wireprobe/wireprobe-zerodds-csharp, tools/wireprobe/wireprobe-csharp-corpus
Tests: crates/lang-rules/tests/every_language_has_its_parts.rs::every_language_has_a_cell_generator,
crates/lang-rules/tests/every_language_has_its_parts.rs::every_cell_generator_guards_against_a_missing_toolchain
Status: done
Audit-Status
21 done / 0 partial / 0 open / 0 blocked / 0 n/a (informative).
Test-Lauf: cargo test -p zerodds-lang-rules — 1024 Tests grün, 0 failed (20 ignoriert: die Vollkorpus-Compile-Läufe, die --include-ignored verlangen).
Offene Punkte: keine.