zerodds-xcdr2-bindings-conformance 1.0 — Spec Coverage
Source: internal/standards/cache/omg/dds-xtypes-1.3.pdf (§7.2, §7.4) —
DDS-XTypes 1.3, Type System Model and Data Representation.
The common report on the mechanism all twenty-one language columns share.
What a single column decides for itself is in its own document —
zerodds-xcdr2-c-1.0.md, zerodds-xcdr2-java-1.0.md and so on; the
evidence stays separated per language, because each runtime reads the
clause on its own.
The mechanism is four pieces:
crates/lang-rules/· docs.rs — two walks (src/emit/encode.rs,src/emit/decode.rs), generic overemit::CodecTarget; per language a rule catalogue, a materialiser, a codec backend and a Table 9 rule.crates/lang-cst/· docs.rs — one concrete syntax tree per language.crates/lang-render/· docs.rs — the text form per language.tools/idlc/— the driver a user invokes.
What is not shared is the wire runtime: the twenty directories under
runtime/ each read DDS-XTypes 1.3 §7.4 from the clause text and none
calls another. Where two columns disagree on an octet, one of the two has
misread the specification.
§7.4.3 The two walks
§7.4.3 One encode walk for every column
Spec: §7.4.3, XCDR Version 2 — which member is written, in what order, under which header and with which length code, is a property of the encoding and not of the target language.
Repo: crates/lang-rules/src/emit/encode.rs (codec_from,
CodecOptions).
Tests: crates/lang-rules/tests/codec.rs::a_final_struct_of_primitives_encodes_as_a_run_of_writes,
crates/lang-rules/tests/one_walk_two_targets.rs::both_backends_write_the_same_members_in_the_same_order
Status: done
§7.4.3 One decode walk, member for member the inverse
Spec: §7.4.3 — the reader takes the same members in the same order under the same framing.
Repo: crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::the_decoder_mirrors_the_encoder_member_for_member,
crates/lang-rules/tests/one_walk_two_targets.rs::the_walk_asks_for_one_unary_operator_and_no_others
Status: done — the walk asks for one unary operator (!) and for no other; a bitmask
reader keeps the declared bits with a plain &, without ~.
§7.4.3 The seam: CodecTarget
Spec: §7.4.3 — the encoding decision is language-independent; what stays language-dependent is its spelling.
Repo: crates/lang-rules/src/emit/mod.rs (CodecTarget, Scalar,
Handle, runtime_static).
Tests: crates/lang-rules/tests/one_walk_two_targets.rs::the_difference_between_the_two_is_spelling,
crates/lang-rules/tests/one_walk_two_targets.rs::a_sequence_is_one_loop_and_two_ways_of_asking_its_length
Status: done
§7.2.3 Extensibility and framing
§7.2.3 FINAL without a DHEADER, APPENDABLE with one
Spec: §7.2.3, Tab.12 — FINAL/APPENDABLE/MUTABLE; §7.4.3 gives
APPENDABLE the leading uint32 body length (DHEADER) and FINAL none.
Repo: crates/lang-rules/src/emit/encode.rs (framing branches taken
from the layout plan in crates/ast-layout/src/key.rs).
Tests: crates/lang-rules/tests/codec.rs::an_appendable_struct_carries_the_dheader_the_plan_asks_for,
crates/lang-rules/tests/codec.rs::the_extensibility_the_source_wrote_decides_the_framing
Status: done
§7.4.3.4.2 MUTABLE: one EMHEADER per member, length code from the plan
Spec: §7.4.3.4.2 — the EMHEADER carries the member ID and a length code; LC=4 takes a NEXTINT, LC=6/7 count in 4- and 8-byte units.
Repo: crates/lang-rules/src/emit/encode.rs (EMHEADER branch),
crates/lang-rules/src/emit/mod.rs (CodecTarget supplies the
spelling).
Tests: crates/lang-rules/tests/codec.rs::a_mutable_struct_writes_an_emheader_per_member,
crates/lang-rules/tests/codec.rs::the_length_code_policy_is_visible_in_the_output,
crates/lang-rules/tests/one_walk_two_targets.rs::a_mutable_aggregate_opens_and_closes_a_header_in_both
Status: done
§7.4.3 Every header that opens is also closed
Spec: §7.4.3 — a DHEADER or EMHEADER length precedes its body and is only known after it; it has to be patched back in.
Repo: crates/lang-rules/src/emit/encode.rs (one patch site per
opened header), crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::every_parameter_header_the_decoder_opens_it_also_closes,
crates/lang-rules/tests/runtime_agreement.rs::the_generator_emits_a_patch_for_every_framing_header_it_opens
Status: done
§7.4.2 XCDR1: a parameter list closed by a sentinel
Spec: §7.4.2 — PL_CDR1 frames every member as a parameter and closes
the list with PID_SENTINEL.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs (XCDR1 branches).
Tests: crates/lang-rules/tests/c_end_to_end.rs::a_mutable_struct_under_xcdr1_ends_with_a_sentinel,
crates/lang-rules/tests/c_end_to_end.rs::a_mutable_aggregate_under_xcdr1_stops_at_the_sentinel
Status: done
§7.2.2.4 Constructs
§7.2.2.4.4.4.7 @optional
Spec: §7.2.2.4.4.4.7 — a structure member may be optional; a union member never is. Absence is encoded, not left out.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_optional_member_writes_its_marker_from_the_option_and_not_from_a_literal,
crates/lang-rules/tests/codec.rs::an_optional_member_under_xcdr1_marks_the_absence_with_a_declared_length_of_zero,
crates/lang-rules/tests/codec.rs::an_optional_member_of_a_mutable_type_omits_the_whole_parameter
Status: done
§7.2.2.4.3 Collections: a DHEADER only where the elements are not primitive
Spec: §7.2.2.4.3 and §7.4.3.5.3 — a collection whose elements are themselves framed carries a collection DHEADER; one of primitive elements carries none.
Repo: crates/lang-rules/src/emit/encode.rs (collection branch).
Tests: crates/lang-rules/tests/codec.rs::a_collection_of_aggregates_is_delimited_and_one_of_primitives_is_not,
crates/lang-rules/tests/codec.rs::a_sequence_writes_its_elements_by_their_own_writer,
crates/lang-rules/tests/codec.rs::a_collection_directly_inside_a_collection_is_emitted
Status: done
§7.2.2.4.3 Bounds: a bounded sequence checks, an unbounded one does not
Spec: §7.2.2.4.3 — a sequence may carry a bound; a writer that exceeds it is not conformant.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_bounded_sequence_checks_its_bound_and_an_unbounded_one_has_none,
crates/lang-rules/tests/codec.rs::a_bounded_string_is_written_through_the_form_that_refuses_an_overrun
Status: done
§7.2.2.4.3 Array: no length on the wire
Spec: §7.2.2.4.3 — an array’s element count is in the type, not in the stream.
Repo: crates/lang-rules/src/emit/encode.rs (array branch).
Tests: crates/lang-rules/tests/codec.rs::an_array_writes_no_length_because_its_count_is_in_the_type
Status: done
§7.2.2.4.1.1 Enumeration: its own codec, width from bit_bound
Spec: §7.2.2.4.1.1 and §7.2.2.4.1 — an enumeration has a bit_bound
from 1 to 32; its wire width follows from it.
Repo: crates/lang-rules/src/emit/encode.rs (codec_name per
enumeration), crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_enum_member_is_written_through_the_enumerations_own_codec,
crates/lang-rules/tests/codec.rs::the_enumerations_codec_writes_the_width_its_bit_bound_calls_for,
crates/lang-rules/tests/codec.rs::the_enumeration_codec_takes_the_integer_the_plan_gives_it
Status: done
§7.2.2.4.2 Alias: written as what it names
Spec: §7.2.2.4.2 — an alias has no kind of its own on the wire; it
resolves to its base_type.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_typedef_is_written_as_what_it_aliases
Status: done
§7.2.2.4.4.3 Union: the discriminator first, then the selected member
Spec: §7.2.2.4.4.3 — the discriminator is always the first member and
carries must_understand=true.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_mutable_decoder_dispatches_on_the_member_id_and_a_positional_one_does_not,
crates/lang-rules/tests/codec.rs::a_union_case_label_that_does_not_evaluate_is_refused
Status: done
§7.2.2.4.4 A nested aggregate encodes itself
Spec: §7.2.2.4.4 — a member whose type is an aggregate is written through that aggregate’s own encoding, with its own framing.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_nested_aggregate_encodes_itself
Status: done
§7.2.2.4.4.4.9 Table 9 and TryConstruct
§7.2.2.4.4.4.9 A member the stream did not carry takes its default
Spec: §7.2.2.4.4.4.9 and Tab.9 — the default is either explicitly
annotated or implicit: 0, false, '\0', "", the empty collection,
the first enumeration literal.
Repo: crates/lang-rules/src/default_<lang>.rs (one rule per column;
§7.5.1 below), called from crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_appendable_tail_the_writer_did_not_have_takes_its_default,
crates/lang-rules/tests/codec.rs::an_appendable_tail_takes_an_explicit_default_over_table_nine,
crates/lang-rules/tests/codec.rs::an_appendable_tail_of_an_enumeration_takes_its_first_literal,
crates/lang-rules/tests/codec.rs::an_explicit_default_beats_table_nine_at_the_member_position
Status: done
§7.2.2.7 TryConstruct: DISCARD, USE_DEFAULT, TRIM
Spec: §7.2.2.7, Tab.10/11 — the default is DISCARD; TRIM applies only
to string, sequence and map.
Repo: crates/lang-rules/src/emit/decode.rs,
crates/wire/src/try_construct.rs.
Tests: crates/lang-rules/tests/codec.rs::an_absent_annotation_is_discard_and_a_bare_one_is_use_default,
crates/lang-rules/tests/codec.rs::a_bounded_member_narrows_after_the_whole_value_is_off_the_wire,
crates/lang-rules/tests/codec.rs::an_element_and_its_collection_narrow_separately
Status: done
§7.4.5 KeyHash
§7.4.5 The key: zero-padded up to sixteen octets, MD5 beyond
Spec: §7.4.5 — the key holder is serialised PLAIN_CDR2 big-endian; at sixteen octets or fewer it is the hash itself (zero-padded), beyond that MD5 over the octets.
Repo: crates/lang-rules/src/emit/encode.rs (key branch),
crates/wire/src/digest.rs.
Tests: crates/lang-rules/tests/codec.rs::a_keyed_type_gets_a_key_hash_over_its_key_members_only,
crates/lang-rules/tests/codec.rs::a_holder_of_sixteen_bytes_or_fewer_is_the_hash_and_a_longer_one_is_md5ed,
crates/lang-rules/tests/codec.rs::the_holder_is_big_endian_and_plain_cdr2_aligned_whatever_the_sample_is,
crates/lang-rules/tests/codec.rs::an_unbounded_key_is_md5ed_because_its_length_is_not_known_until_the_sample_is,
crates/lang-rules/tests/runtime_agreement.rs::the_key_hash_sequence_produces_a_stable_sixteen_bytes
Status: done
§7.4.5 A type with no key gets no KeyHash
Spec: §7.4.5 — only a type with key members carries a KeyHash.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_type_with_no_key_gets_no_key_hash,
crates/lang-rules/tests/c_end_to_end.rs::a_keyed_type_gets_a_holder_and_an_unkeyed_one_does_not
Status: done
§7.4 The walk against the runtime
§7.4 Every call the generator emits exists in the runtime
Spec: §7.4 — generated code calls the wire runtime; a call with no counterpart is a link error rather than a conformance statement.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs, runtime/c/include/.
Tests: crates/lang-rules/tests/runtime_agreement.rs::every_call_the_generator_emits_exists_in_the_runtime,
crates/lang-rules/tests/codec_backend_prerequisites.rs::the_operations_the_walks_emit_all_exist_in_the_reference_runtime
Status: done
§7.4.3 The generated call sequence writes the bytes the plan names
Spec: §7.4.3 — what the plan fixes as framing, order and member ID has to be in the octets too.
Repo: crates/lang-rules/src/encode.rs (the Rust column),
crates/wire/src/writer.rs.
Tests: crates/lang-rules/tests/runtime_agreement.rs::the_sequence_a_final_struct_generates_writes_the_bytes_the_plan_says,
crates/lang-rules/tests/runtime_agreement.rs::the_sequence_an_appendable_struct_generates_frames_its_members,
crates/lang-rules/tests/runtime_agreement.rs::the_sequence_a_mutable_struct_generates_carries_its_member_ids
Status: done
§7.4 No silent drop
Spec: §7.4 — a member the walk has no write form for must not be left out; it has to be named.
Repo: crates/lang-rules/src/emit/encode.rs (error paths),
tools/silent-drop-allowlist.tsv.
Tests: crates/lang-rules/tests/codec.rs::a_member_with_no_writer_is_reported_rather_than_left_out,
crates/lang-rules/tests/unevaluated.rs::an_array_length_that_does_not_evaluate_is_refused_by_the_codec_too
Status: done
§7.5.1 What a column is made of
§7.5.1 Four parts for the types, a fifth for the codec
Spec: §7.5.1 — the plain language binding is each PSM’s own; this repository carries it per language as a CST, a rule catalogue, a materialiser, a renderer and — for the encoding — a codec backend.
Repo: crates/lang-cst/src/, crates/lang-rules/src/rule/,
crates/lang-rules/src/adapter/, crates/lang-render/src/,
crates/lang-rules/src/emit/; the ledger in
docs/language-columns-status.md.
Tests: crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs,
crates/lang-rules/tests/codec_backend_prerequisites.rs::the_type_only_columns_are_each_missing_a_part_a_codec_backend_rests_on
Status: done
§7.5.1 Every language has a runtime, an endpoint SDK and a cell generator
Spec: §7.5.1 — a binding that exists by halves is not a binding; the inventory is checked against the filesystem, not against a list.
Repo: runtime/, endpoints/,
crates/lang-rules/tests/every_language_has_its_parts.rs.
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,
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
§7.5.1 One IDL becomes declarations in every language
Spec: §7.5.1 — the same source has to produce, in every column, the type it declares; a column with no output is a silently dropped declaration.
Repo: crates/lang-rules/src/generate.rs (declarations).
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_every_wired_language
Status: done
§7.5.1 …and a full codec
Spec: §7.4.3 with §7.5.1 — beside the types, every column generates
an encoder and a decoder for every struct, union and valuetype.
Repo: crates/lang-rules/src/generate.rs (source),
crates/lang-rules/src/emit/encode.rs (codec_name).
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_a_full_codec_in_every_wired_language
Status: done
§7.2.2.4 A completeness table per construct and language
Spec: §7.2.2.4 — the constructs of the type system model are countable; a cell with no coverage has to say why.
Repo: crates/lang-rules/src/coverage.rs (no catch-all arm: a new
language breaks the build until every construct carries a decision).
Tests: crates/lang-rules/tests/adapter.rs::the_coverage_table_has_a_cell_for_every_construct_and_language,
crates/lang-rules/tests/adapter.rs::the_table_reports_what_is_covered_and_what_is_not,
crates/lang-rules/tests/adapter.rs::an_uncovered_cell_says_why_rather_than_only_that
Status: done
§7.5.1 Every rule catalogue validates and fires on the same model
Spec: §7.5.1 — the language-specific decisions are rules over a common model, not special cases inside the walk.
Repo: crates/lang-rules/src/rule/mod.rs,
crates/lang-rules/src/apply.rs.
Tests: crates/lang-rules/tests/apply.rs::every_catalogue_validates_against_the_rule_format,
crates/lang-rules/tests/apply.rs::every_catalogue_serialises_and_reads_back_the_same,
crates/lang-rules/tests/apply.rs::every_language_catalogue_fires_on_the_same_model
Status: done
§7.2.2.4.8 VerbatimText
§7.2.2.4.8 @verbatim reaches every column it names
Spec: §7.2.2.4.8 — VerbatimText {language, placement, text}; the
text is emitted unchanged at the named placement, and "*" reaches every
language.
Repo: crates/lang-rules/src/verbatim.rs.
Tests: crates/lang-rules/tests/verbatim_end_to_end.rs::the_wildcard_reaches_all_four_columns,
crates/lang-rules/tests/verbatim_end_to_end.rs::cpp_places_all_six_slots_in_spec_order,
crates/lang-rules/tests/verbatim_end_to_end.rs::a_directive_for_an_unknown_language_is_not_emitted,
crates/lang-rules/tests/verbatim_end_to_end.rs::repeated_directives_keep_their_declaration_order,
crates/lang-rules/tests/verbatim_every_column.rs::the_wildcard_reaches_every_column,
crates/lang-rules/tests/verbatim_every_column.rs::every_column_places_the_six_slots_in_its_declarations,
crates/lang-rules/tests/verbatim_every_column.rs::every_column_ends_its_source_file_with_the_end_file_text,
crates/lang-rules/tests/verbatim_every_column.rs::a_directive_reaches_its_own_column_and_no_other
Status: done
§7.5 The DCPS PSM
§7.5 Every column declares the DCPS PSM
Spec: §7.5 with DDS 1.4 — the types the clause names have to exist in every language binding.
Repo: crates/lang-rules/src/generate.rs,
crates/lang-rules/tests/dcps_psm_idl.rs.
Tests: crates/lang-rules/tests/dcps_psm_idl.rs::the_dcps_psm_idl_declares_the_types_the_clause_names,
crates/lang-rules/tests/dcps_psm_idl.rs::every_language_declares_the_dcps_psm
Status: done
§7.3.1 The driver
§7.3.1 idlc generate --lang takes every language under its own name
Spec: §7.3.1 — the IDL type representation is the input; the output is a language binding.
Repo: tools/idlc/src/generate.rs (parse_language,
language_names, source), tools/idlc/src/main.rs
(--lang, --out, --encoding, --endian).
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 Measured octets
§7.4 Three columns agree over the corpus
Spec: §7.4 — two independent readings of the same clause have to produce the same octets.
Repo: crates/wire-probe/src/lib.rs, tools/wireprobe/.
Tests: crates/wire-probe/tests/three_column_gate.rs::the_three_columns_agree,
crates/wire-probe/tests/three_column_gate.rs::the_c_column_covers_the_same_configurations,
crates/wire-probe/tests/three_column_gate.rs::the_rust_column_is_byte_for_byte_what_it_was
Status: done
§7.4 A new column against the recorded Rust baseline
Spec: §7.4 — a column is measured against a fixed recording rather than built beside the others: three columns that moved together still resemble each other.
Repo: crates/wire-probe/tests/fixtures/rust_column_baseline.txt
(145,740 slots, pinned case by case), crates/wire-probe/src/matrix.rs.
Tests: crates/wire-probe/tests/reference_columns.rs::the_reference_row_is_the_one_the_baseline_was_taken_with,
crates/wire-probe/tests/reference_columns.rs::the_comparison_bites,
crates/wire-probe/tests/reference_columns.rs::every_configuration_reaches_the_driver_as_flags,
crates/wire-probe/tests/typescript_column_gate.rs::the_typescript_column_writes_what_the_rust_column_recorded
Status: done
Note: reference_columns.rs::the_new_columns_answer_the_matrix_the_rust_column_answered
compares the C++ and Java columns only once
target/release/wireprobe-cpp-matrix and wireprobe-java-matrix are
built; without them the test says so on standard output and compares
nothing. The three tests of that file cited above measure with no foreign
driver.
§7.4 The corpus produces the recorded bytes in all four modes
Spec: §7.4 — per case XCDR1/XCDR2 and both byte orders.
Repo: tests/interop-corpus/, crates/wire-probe/src/canonical.rs.
Tests: crates/wire-probe/tests/interop_corpus.rs::every_case_produces_the_bytes_its_readme_records_in_all_four_modes,
crates/wire-probe/tests/interop_corpus.rs::every_case_goes_through_all_three_emitters,
crates/wire-probe/tests/interop_corpus.rs::every_case_emits_a_keyhash_and_an_encapsulated_payload
Status: done
§7.4 The read direction: every case comes back the value that went in
Spec: §7.4 — encoding and decoding are inverse to each other.
Repo: crates/wire-probe/src/canonical.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/wire-probe/tests/decode_round_trip.rs::every_case_comes_back_the_value_that_went_in,
crates/wire-probe/tests/decode_round_trip.rs::no_prefix_of_a_payload_reads_as_a_shorter_sample,
crates/wire-probe/tests/probe_agreement.rs::every_corpus_case_is_read_the_same_way_by_all_three_probes
Status: done
Audit Status
35 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). cargo test -p zerodds-wire-probe --no-fail-fast —
350 green, 4 failed: csharp_column_gate, java_column_gate and
java_round_trip fail because the C# and Java probes do not compile on
this machine, and union_label_match::the_shape_with_no_storage_is_left_to_the_clause
is a standing finding; none of the four is cited as evidence in this
document.
Open items: none.
zerodds-xcdr2-bindings-conformance 1.0 — Spec-Coverage
Quelle: internal/standards/cache/omg/dds-xtypes-1.3.pdf (§7.2, §7.4) —
DDS-XTypes 1.3, Type-System-Model und Data Representation.
Der gemeinsame Bericht über den Mechanismus, den alle einundzwanzig
Sprachspalten teilen. Was eine einzelne Spalte selbst entscheidet, steht
in ihrem eigenen Dokument — zerodds-xcdr2-c-1.0.md,
zerodds-xcdr2-java-1.0.md und so fort; die Nachweise bleiben je Sprache
getrennt, weil jede Laufzeit die Klausel eigenständig liest.
Der Mechanismus besteht aus vier Stücken:
crates/lang-rules/· docs.rs — zwei Walks (src/emit/encode.rs,src/emit/decode.rs), generisch überemit::CodecTarget; je Sprache ein Regelkatalog, ein Materialisierer, ein Codec-Backend und eine Table-9-Regel.crates/lang-cst/· docs.rs — je Sprache ein konkreter Syntaxbaum.crates/lang-render/· docs.rs — die Textform je Sprache.tools/idlc/— der Treiber, den ein Anwender aufruft.
Was nicht geteilt wird, ist die Wire-Laufzeit: die zwanzig
Verzeichnisse unter runtime/ lesen DDS-XTypes 1.3 §7.4 jeweils aus dem
Klauseltext und rufen einander nicht auf. Wo zwei Spalten über ein Oktett
uneins sind, hat eine der beiden die Spezifikation falsch gelesen.
§7.4.3 Die beiden Walks
§7.4.3 Ein Encode-Walk für jede Spalte
Spec: §7.4.3, XCDR Version 2 — welches Member geschrieben wird, in welcher Reihenfolge, unter welchem Header und mit welchem Length-Code, ist eine Eigenschaft der Kodierung und nicht der Zielsprache.
Repo: crates/lang-rules/src/emit/encode.rs (codec_from,
CodecOptions).
Tests: crates/lang-rules/tests/codec.rs::a_final_struct_of_primitives_encodes_as_a_run_of_writes,
crates/lang-rules/tests/one_walk_two_targets.rs::both_backends_write_the_same_members_in_the_same_order
Status: done
§7.4.3 Ein Decode-Walk, Member für Member das Inverse
Spec: §7.4.3 — der Leser nimmt dieselben Member in derselben Reihenfolge unter derselben Rahmung entgegen.
Repo: crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::the_decoder_mirrors_the_encoder_member_for_member,
crates/lang-rules/tests/one_walk_two_targets.rs::the_walk_asks_for_one_unary_operator_and_no_others
Status: done — der Walk fragt nach einem unären Operator (!) und nach keinem anderen;
ein Bitmask-Leser behält die deklarierten Bits mit einem einfachen &, ohne ~.
§7.4.3 Die Naht: CodecTarget
Spec: §7.4.3 — die Kodierungsentscheidung ist sprachunabhängig; was sprachabhängig bleibt, ist ihre Schreibweise.
Repo: crates/lang-rules/src/emit/mod.rs (CodecTarget, Scalar,
Handle, runtime_static).
Tests: crates/lang-rules/tests/one_walk_two_targets.rs::the_difference_between_the_two_is_spelling,
crates/lang-rules/tests/one_walk_two_targets.rs::a_sequence_is_one_loop_and_two_ways_of_asking_its_length
Status: done
§7.2.3 Extensibility und Rahmung
§7.2.3 FINAL ohne DHEADER, APPENDABLE mit DHEADER
Spec: §7.2.3, Tab.12 — FINAL/APPENDABLE/MUTABLE; §7.4.3 gibt
APPENDABLE die vorangestellte uint32-Body-Länge (DHEADER), FINAL keine.
Repo: crates/lang-rules/src/emit/encode.rs (Rahmungszweige aus dem
Layout-Plan crates/ast-layout/src/key.rs).
Tests: crates/lang-rules/tests/codec.rs::an_appendable_struct_carries_the_dheader_the_plan_asks_for,
crates/lang-rules/tests/codec.rs::the_extensibility_the_source_wrote_decides_the_framing
Status: done
§7.4.3.4.2 MUTABLE: ein EMHEADER je Member, Length-Code aus dem Plan
Spec: §7.4.3.4.2 — EMHEADER trägt Member-ID und Length-Code; LC=4 nimmt ein NEXTINT, LC=6/7 zählen in 4- bzw. 8-Byte-Einheiten.
Repo: crates/lang-rules/src/emit/encode.rs (EMHEADER-Zweig),
crates/lang-rules/src/emit/mod.rs (CodecTarget liefert die
Schreibweise).
Tests: crates/lang-rules/tests/codec.rs::a_mutable_struct_writes_an_emheader_per_member,
crates/lang-rules/tests/codec.rs::the_length_code_policy_is_visible_in_the_output,
crates/lang-rules/tests/one_walk_two_targets.rs::a_mutable_aggregate_opens_and_closes_a_header_in_both
Status: done
§7.4.3 Jeder geöffnete Header wird auch geschlossen
Spec: §7.4.3 — eine DHEADER- oder EMHEADER-Länge steht vor dem Body und ist erst nach ihm bekannt; sie muss nachgetragen werden.
Repo: crates/lang-rules/src/emit/encode.rs (Patch-Stelle je
geöffnetem Header), crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::every_parameter_header_the_decoder_opens_it_also_closes,
crates/lang-rules/tests/runtime_agreement.rs::the_generator_emits_a_patch_for_every_framing_header_it_opens
Status: done
§7.4.2 XCDR1: Parameter-Liste mit Sentinel
Spec: §7.4.2 — PL_CDR1 rahmt jedes Member als Parameter und schließt
die Liste mit PID_SENTINEL.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs (XCDR1-Zweige).
Tests: crates/lang-rules/tests/c_end_to_end.rs::a_mutable_struct_under_xcdr1_ends_with_a_sentinel,
crates/lang-rules/tests/c_end_to_end.rs::a_mutable_aggregate_under_xcdr1_stops_at_the_sentinel
Status: done
§7.2.2.4 Konstrukte
§7.2.2.4.4.4.7 @optional
Spec: §7.2.2.4.4.4.7 — ein Struct-Member darf optional sein; ein Union-Member nie. Die Abwesenheit wird kodiert, nicht weggelassen.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_optional_member_writes_its_marker_from_the_option_and_not_from_a_literal,
crates/lang-rules/tests/codec.rs::an_optional_member_under_xcdr1_marks_the_absence_with_a_declared_length_of_zero,
crates/lang-rules/tests/codec.rs::an_optional_member_of_a_mutable_type_omits_the_whole_parameter
Status: done
§7.2.2.4.3 Sammlungen: DHEADER nur bei nicht-primitiven Elementen
Spec: §7.2.2.4.3 und §7.4.3.5.3 — eine Sammlung, deren Elemente selbst gerahmt sind, trägt einen Collection-DHEADER; eine Sammlung primitiver Elemente trägt keinen.
Repo: crates/lang-rules/src/emit/encode.rs (Sammlungszweig).
Tests: crates/lang-rules/tests/codec.rs::a_collection_of_aggregates_is_delimited_and_one_of_primitives_is_not,
crates/lang-rules/tests/codec.rs::a_sequence_writes_its_elements_by_their_own_writer,
crates/lang-rules/tests/codec.rs::a_collection_directly_inside_a_collection_is_emitted
Status: done
§7.2.2.4.3 Bound: eine begrenzte Sequenz prüft, eine unbegrenzte nicht
Spec: §7.2.2.4.3 — eine Sequenz kann eine Schranke tragen; ein Schreiber, der sie überschreitet, ist nicht konform.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_bounded_sequence_checks_its_bound_and_an_unbounded_one_has_none,
crates/lang-rules/tests/codec.rs::a_bounded_string_is_written_through_the_form_that_refuses_an_overrun
Status: done
§7.2.2.4.3 Array: keine Länge auf der Wire
Spec: §7.2.2.4.3 — die Elementzahl eines Arrays steht im Typ, nicht im Datenstrom.
Repo: crates/lang-rules/src/emit/encode.rs (Array-Zweig).
Tests: crates/lang-rules/tests/codec.rs::an_array_writes_no_length_because_its_count_is_in_the_type
Status: done
§7.2.2.4.1.1 Enumeration: eigener Codec, Breite aus bit_bound
Spec: §7.2.2.4.1.1 und §7.2.2.4.1 — eine Enumeration hat ein
bit_bound von 1 bis 32; ihre Wire-Breite folgt daraus.
Repo: crates/lang-rules/src/emit/encode.rs (codec_name je
Enumeration), crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_enum_member_is_written_through_the_enumerations_own_codec,
crates/lang-rules/tests/codec.rs::the_enumerations_codec_writes_the_width_its_bit_bound_calls_for,
crates/lang-rules/tests/codec.rs::the_enumeration_codec_takes_the_integer_the_plan_gives_it
Status: done
§7.2.2.4.2 Alias: geschrieben als das, was er benennt
Spec: §7.2.2.4.2 — ein Alias hat kein eigenes Kind auf der Wire; er
wird zu seinem base_type aufgelöst.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_typedef_is_written_as_what_it_aliases
Status: done
§7.2.2.4.4.3 Union: Diskriminator zuerst, dann das gewählte Member
Spec: §7.2.2.4.4.3 — der Diskriminator ist immer das erste Member
und trägt must_understand=true.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_mutable_decoder_dispatches_on_the_member_id_and_a_positional_one_does_not,
crates/lang-rules/tests/codec.rs::a_union_case_label_that_does_not_evaluate_is_refused
Status: done
§7.2.2.4.4 Verschachteltes Aggregat kodiert sich selbst
Spec: §7.2.2.4.4 — ein Member, dessen Typ ein Aggregat ist, wird durch dessen eigene Kodierung geschrieben, mit dessen eigener Rahmung.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_nested_aggregate_encodes_itself
Status: done
§7.2.2.4.4.4.9 Table 9 und TryConstruct
§7.2.2.4.4.4.9 Ein Member, das der Strom nicht trug, nimmt seinen Default
Spec: §7.2.2.4.4.4.9 und Tab.9 — der Default ist entweder explizit
annotiert oder implizit: 0, false, '\0', "", leere Sammlung,
erster Enum-Literal.
Repo: crates/lang-rules/src/default_<lang>.rs (eine Regel je
Spalte; §7.5.1 unten), aufgerufen aus
crates/lang-rules/src/emit/decode.rs.
Tests: crates/lang-rules/tests/codec.rs::an_appendable_tail_the_writer_did_not_have_takes_its_default,
crates/lang-rules/tests/codec.rs::an_appendable_tail_takes_an_explicit_default_over_table_nine,
crates/lang-rules/tests/codec.rs::an_appendable_tail_of_an_enumeration_takes_its_first_literal,
crates/lang-rules/tests/codec.rs::an_explicit_default_beats_table_nine_at_the_member_position
Status: done
§7.2.2.7 TryConstruct: DISCARD, USE_DEFAULT, TRIM
Spec: §7.2.2.7, Tab.10/11 — Default ist DISCARD; TRIM gilt nur für
string, sequence und map.
Repo: crates/lang-rules/src/emit/decode.rs,
crates/wire/src/try_construct.rs.
Tests: crates/lang-rules/tests/codec.rs::an_absent_annotation_is_discard_and_a_bare_one_is_use_default,
crates/lang-rules/tests/codec.rs::a_bounded_member_narrows_after_the_whole_value_is_off_the_wire,
crates/lang-rules/tests/codec.rs::an_element_and_its_collection_narrow_separately
Status: done
§7.4.5 KeyHash
§7.4.5 Schlüssel: bis 16 Byte null-gepolstert, darüber MD5
Spec: §7.4.5 — der KeyHolder wird PLAIN_CDR2 in Big-Endian serialisiert; ist er höchstens 16 Byte groß, ist er selbst der Hash (null-gepolstert), sonst MD5 über die Bytes.
Repo: crates/lang-rules/src/emit/encode.rs (Key-Zweig),
crates/wire/src/digest.rs.
Tests: crates/lang-rules/tests/codec.rs::a_keyed_type_gets_a_key_hash_over_its_key_members_only,
crates/lang-rules/tests/codec.rs::a_holder_of_sixteen_bytes_or_fewer_is_the_hash_and_a_longer_one_is_md5ed,
crates/lang-rules/tests/codec.rs::the_holder_is_big_endian_and_plain_cdr2_aligned_whatever_the_sample_is,
crates/lang-rules/tests/codec.rs::an_unbounded_key_is_md5ed_because_its_length_is_not_known_until_the_sample_is,
crates/lang-rules/tests/runtime_agreement.rs::the_key_hash_sequence_produces_a_stable_sixteen_bytes
Status: done
§7.4.5 Ein Typ ohne Schlüssel bekommt keinen KeyHash
Spec: §7.4.5 — nur ein Typ mit Key-Membern trägt einen KeyHash.
Repo: crates/lang-rules/src/emit/encode.rs.
Tests: crates/lang-rules/tests/codec.rs::a_type_with_no_key_gets_no_key_hash,
crates/lang-rules/tests/c_end_to_end.rs::a_keyed_type_gets_a_holder_and_an_unkeyed_one_does_not
Status: done
§7.4 Der Walk gegen die Laufzeit
§7.4 Jeder emittierte Aufruf existiert in der Laufzeit
Spec: §7.4 — der erzeugte Code ruft die Wire-Laufzeit; ein Aufruf ohne Gegenstück ist ein Linkfehler statt einer Konformitätsaussage.
Repo: crates/lang-rules/src/emit/encode.rs,
crates/lang-rules/src/emit/decode.rs, runtime/c/include/.
Tests: crates/lang-rules/tests/runtime_agreement.rs::every_call_the_generator_emits_exists_in_the_runtime,
crates/lang-rules/tests/codec_backend_prerequisites.rs::the_operations_the_walks_emit_all_exist_in_the_reference_runtime
Status: done
§7.4.3 Die erzeugte Aufruffolge schreibt die Bytes, die der Plan nennt
Spec: §7.4.3 — was der Plan als Rahmung, Reihenfolge und Member-ID festlegt, muss auch in den Oktetten stehen.
Repo: crates/lang-rules/src/encode.rs (Rust-Spalte),
crates/wire/src/writer.rs.
Tests: crates/lang-rules/tests/runtime_agreement.rs::the_sequence_a_final_struct_generates_writes_the_bytes_the_plan_says,
crates/lang-rules/tests/runtime_agreement.rs::the_sequence_an_appendable_struct_generates_frames_its_members,
crates/lang-rules/tests/runtime_agreement.rs::the_sequence_a_mutable_struct_generates_carries_its_member_ids
Status: done
§7.4 Kein stiller Ausfall
Spec: §7.4 — ein Member, für das der Walk keine Schreibform hat, darf nicht ausgelassen werden; er muss benannt werden.
Repo: crates/lang-rules/src/emit/encode.rs (Fehlerpfade),
tools/silent-drop-allowlist.tsv.
Tests: crates/lang-rules/tests/codec.rs::a_member_with_no_writer_is_reported_rather_than_left_out,
crates/lang-rules/tests/unevaluated.rs::an_array_length_that_does_not_evaluate_is_refused_by_the_codec_too
Status: done
§7.5.1 Was eine Spalte ausmacht
§7.5.1 Vier Teile für die Typen, ein fünftes für den Codec
Spec: §7.5.1 — das Plain Language Binding ist je PSM eigen; dieses Repository führt es je Sprache als CST, Regelkatalog, Materialisierer, Renderer und — für die Kodierung — ein Codec-Backend.
Repo: crates/lang-cst/src/, crates/lang-rules/src/rule/,
crates/lang-rules/src/adapter/, crates/lang-render/src/,
crates/lang-rules/src/emit/; die Aufstellung in
docs/language-columns-status.md.
Tests: crates/lang-rules/tests/codec_backend_prerequisites.rs::a_codec_backend_never_exists_without_the_three_parts_it_needs,
crates/lang-rules/tests/codec_backend_prerequisites.rs::the_type_only_columns_are_each_missing_a_part_a_codec_backend_rests_on
Status: done
§7.5.1 Jede Sprache hat Laufzeit, Endpoint-SDK und Zellgenerator
Spec: §7.5.1 — ein Binding, das nur zur Hälfte existiert, ist kein Binding; der Bestand wird gegen das Dateisystem geprüft, nicht gegen eine Liste.
Repo: runtime/, endpoints/,
crates/lang-rules/tests/every_language_has_its_parts.rs.
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,
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
§7.5.1 Eine IDL wird in jeder Sprache zu Deklarationen
Spec: §7.5.1 — dieselbe Quelle muss in jeder Spalte den Typ hervorbringen, den sie deklariert; eine Spalte ohne Ausgabe ist eine stillschweigend verlorene Deklaration.
Repo: crates/lang-rules/src/generate.rs (declarations).
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_every_wired_language
Status: done
§7.5.1 …und zu einem vollen Codec
Spec: §7.4.3 zusammen mit §7.5.1 — jede Spalte erzeugt neben den
Typen auch Encoder und Decoder für jedes struct, union und
valuetype.
Repo: crates/lang-rules/src/generate.rs (source),
crates/lang-rules/src/emit/encode.rs (codec_name).
Tests: crates/lang-rules/tests/generate_contract.rs::one_idl_becomes_a_full_codec_in_every_wired_language
Status: done
§7.2.2.4 Eine Vollständigkeitstabelle je Konstrukt und Sprache
Spec: §7.2.2.4 — die Konstrukte des Type-System-Model sind abzählbar; eine Zelle ohne Deckung muss sagen, warum.
Repo: crates/lang-rules/src/coverage.rs (kein Catch-all-Arm: eine
neue Sprache bricht den Build, bis jedes Konstrukt eine Entscheidung
trägt).
Tests: crates/lang-rules/tests/adapter.rs::the_coverage_table_has_a_cell_for_every_construct_and_language,
crates/lang-rules/tests/adapter.rs::the_table_reports_what_is_covered_and_what_is_not,
crates/lang-rules/tests/adapter.rs::an_uncovered_cell_says_why_rather_than_only_that
Status: done
§7.5.1 Jeder Regelkatalog validiert und feuert auf demselben Modell
Spec: §7.5.1 — die sprachspezifischen Entscheidungen sind Regeln über einem gemeinsamen Modell, nicht Sonderfälle im Walk.
Repo: crates/lang-rules/src/rule/mod.rs,
crates/lang-rules/src/apply.rs.
Tests: crates/lang-rules/tests/apply.rs::every_catalogue_validates_against_the_rule_format,
crates/lang-rules/tests/apply.rs::every_catalogue_serialises_and_reads_back_the_same,
crates/lang-rules/tests/apply.rs::every_language_catalogue_fires_on_the_same_model
Status: done
§7.2.2.4.8 VerbatimText
§7.2.2.4.8 @verbatim erreicht jede Spalte, die es benennt
Spec: §7.2.2.4.8 — VerbatimText {language, placement, text}; der
Text wird an der benannten Stelle unverändert ausgegeben, und "*"
erreicht jede Sprache.
Repo: crates/lang-rules/src/verbatim.rs.
Tests: crates/lang-rules/tests/verbatim_end_to_end.rs::the_wildcard_reaches_all_four_columns,
crates/lang-rules/tests/verbatim_end_to_end.rs::cpp_places_all_six_slots_in_spec_order,
crates/lang-rules/tests/verbatim_end_to_end.rs::a_directive_for_an_unknown_language_is_not_emitted,
crates/lang-rules/tests/verbatim_end_to_end.rs::repeated_directives_keep_their_declaration_order,
crates/lang-rules/tests/verbatim_every_column.rs::the_wildcard_reaches_every_column,
crates/lang-rules/tests/verbatim_every_column.rs::every_column_places_the_six_slots_in_its_declarations,
crates/lang-rules/tests/verbatim_every_column.rs::every_column_ends_its_source_file_with_the_end_file_text,
crates/lang-rules/tests/verbatim_every_column.rs::a_directive_reaches_its_own_column_and_no_other
Status: done
§7.5 DCPS-PSM
§7.5 Jede Spalte deklariert das DCPS-PSM
Spec: §7.5 zusammen mit DDS 1.4 — die Typen, die die Klausel benennt, müssen in jeder Sprachbindung existieren.
Repo: crates/lang-rules/src/generate.rs,
crates/lang-rules/tests/dcps_psm_idl.rs.
Tests: crates/lang-rules/tests/dcps_psm_idl.rs::the_dcps_psm_idl_declares_the_types_the_clause_names,
crates/lang-rules/tests/dcps_psm_idl.rs::every_language_declares_the_dcps_psm
Status: done
§7.3.1 Der Treiber
§7.3.1 idlc generate --lang nimmt jede Sprache unter ihrem eigenen Namen
Spec: §7.3.1 — die IDL-Type-Representation ist die Eingabe; die Ausgabe ist eine Sprachbindung.
Repo: tools/idlc/src/generate.rs (parse_language,
language_names, source), tools/idlc/src/main.rs
(--lang, --out, --encoding, --endian).
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 Gemessene Oktette
§7.4 Drei Spalten stimmen über den Korpus überein
Spec: §7.4 — zwei unabhängige Lesungen derselben Klausel müssen dieselben Oktette hervorbringen.
Repo: crates/wire-probe/src/lib.rs,
tools/wireprobe/.
Tests: crates/wire-probe/tests/three_column_gate.rs::the_three_columns_agree,
crates/wire-probe/tests/three_column_gate.rs::the_c_column_covers_the_same_configurations,
crates/wire-probe/tests/three_column_gate.rs::the_rust_column_is_byte_for_byte_what_it_was
Status: done
§7.4 Eine neue Spalte gegen die aufgezeichnete Rust-Grundlinie
Spec: §7.4 — eine Spalte wird gegen eine festgehaltene Aufzeichnung gemessen, nicht neben den anderen gebaut: drei Spalten, die sich gemeinsam bewegt haben, ähneln einander weiterhin.
Repo: crates/wire-probe/tests/fixtures/rust_column_baseline.txt
(145 740 Slots, Fall für Fall), crates/wire-probe/src/matrix.rs.
Tests: crates/wire-probe/tests/reference_columns.rs::the_reference_row_is_the_one_the_baseline_was_taken_with,
crates/wire-probe/tests/reference_columns.rs::the_comparison_bites,
crates/wire-probe/tests/reference_columns.rs::every_configuration_reaches_the_driver_as_flags,
crates/wire-probe/tests/typescript_column_gate.rs::the_typescript_column_writes_what_the_rust_column_recorded
Status: done
Anmerkung: reference_columns.rs::the_new_columns_answer_the_matrix_the_rust_column_answered
vergleicht die C++- und die Java-Spalte erst, wenn
target/release/wireprobe-cpp-matrix bzw. wireprobe-java-matrix gebaut
sind; ohne sie meldet der Test das auf der Standardausgabe und vergleicht
nichts. Die drei oben zitierten Tests dieser Datei messen ohne
Fremdtreiber.
§7.4 Der Korpus liefert in allen vier Modi die aufgezeichneten Bytes
Spec: §7.4 — je Fall XCDR1/XCDR2 und beide Byte-Reihenfolgen.
Repo: tests/interop-corpus/, crates/wire-probe/src/canonical.rs.
Tests: crates/wire-probe/tests/interop_corpus.rs::every_case_produces_the_bytes_its_readme_records_in_all_four_modes,
crates/wire-probe/tests/interop_corpus.rs::every_case_goes_through_all_three_emitters,
crates/wire-probe/tests/interop_corpus.rs::every_case_emits_a_keyhash_and_an_encapsulated_payload
Status: done
§7.4 Die Leserichtung: jeder Fall kommt als der Wert zurück, der hineinging
Spec: §7.4 — Kodierung und Dekodierung sind zueinander invers.
Repo: crates/wire-probe/src/canonical.rs,
crates/lang-rules/src/emit/decode.rs.
Tests: crates/wire-probe/tests/decode_round_trip.rs::every_case_comes_back_the_value_that_went_in,
crates/wire-probe/tests/decode_round_trip.rs::no_prefix_of_a_payload_reads_as_a_shorter_sample,
crates/wire-probe/tests/probe_agreement.rs::every_corpus_case_is_read_the_same_way_by_all_three_probes
Status: done
Audit-Status
35 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). cargo test -p zerodds-wire-probe --no-fail-fast — 350 grün,
4 failed: csharp_column_gate, java_column_gate und java_round_trip
scheitern daran, dass die C#- bzw. Java-Sonde auf diesem Rechner nicht
übersetzt, und union_label_match::the_shape_with_no_storage_is_left_to_the_clause
ist ein bestehender Befund; keine der vier ist in diesem Dokument als
Nachweis zitiert.
Offene Punkte: keine.