Rückverfolgbarkeit Anforderung → Code → Nachweis
Erzeugt mit
cargo xtask trace; die CI prüft mitcargo xtask trace --check, dass dieser Bericht aktuell ist. Nicht von Hand bearbeiten.
Je Anforderung: Gefährdungen, Code, der die ID nennt, und Nachweise (Tests und Kani-Nachweise, die die ID nennen, im Nachweis genannte Funktionen, Szenarien).
bedienplatz.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-UI-001 | H-016 | apps/railitd/ui/src/plan.tscrates/railit-layout/src/lib.rs | beispielstadt_is_a_station_with_two_tracksnordbahn_has_three_areas_from_west_to_eastrailml_branch_and_svgoperator_desk_is_static_and_locked_downapps/railitd/tests/api.rsapps/railitd/tests/security.rsapps/railitd/ui/e2e/bedienplatz.test.tsapps/railitd/ui/e2e/nordbahn.test.tscrates/railit-layout/tests/layout.rs |
| REQ-UI-002 | H-016 | apps/railitd/ui/src/main.tsapps/railitd/ui/src/model.ts | operator_desk_is_static_and_locked_downapps/railitd/tests/security.rsapps/railitd/ui/e2e/bedienplatz.test.tsapps/railitd/ui/test/model.test.ts |
| REQ-UI-003 | H-006, H-016 | apps/railitd/src/service.rsapps/railitd/ui/src/check.tsapps/railitd/ui/src/main.tscrates/railit-runtime/src/names.rs | check_code_vectorsaux_operation_and_journalapps/railitd/tests/api.rsapps/railitd/ui/e2e/bedienplatz.test.tsapps/railitd/ui/test/check.test.ts |
| REQ-UI-004 | H-006, H-013, H-016 | – | apps/railitd/ui/e2e/nordbahn.test.tsapps/railitd/ui/test/model.test.ts |
| REQ-UI-005 | H-016, H-011 | apps/railitd/ui/src/api.tsapps/railitd/ui/src/main.tsapps/railitd/ui/src/model.tsapps/railitd/ui/src/panels.ts | apps/railitd/ui/e2e/bedienplatz.test.tsapps/railitd/ui/test/review.test.ts |
betrieb.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-OPS-001 | H-013 | crates/railit-ops/src/ops.rs | train_numbers_follow_the_routesapps/railitd/tests/api.rscrates/railit-ops/tests/ops.rsSzenario 14 |
| REQ-OPS-002 | H-013 | – | timetable_is_validated_against_the_networktimes_are_parsed_and_formattedcrates/railit-ops/tests/ops.rs |
| REQ-OPS-003 | H-013 | crates/railit-ops/src/ops.rs | ars_departs_on_time_and_requests_permissionsars_waits_for_permission_and_follows_platform_changescrates/railit-ops/tests/ops.rsSzenario 14 |
| REQ-OPS-004 | H-013 | crates/railit-ops/src/ops.rs | auto_signals_clear_for_any_described_traincrates/railit-ops/tests/ops.rs |
| REQ-OPS-005 | H-013 | crates/railit-ops/src/ops.rs | ars_waits_for_permission_and_follows_platform_changestimetable_and_dispatching_over_apiSzenario 15 |
| REQ-OPS-006 | H-013 | crates/railit-adapters/src/ils.rscrates/railit-ops/src/net.rscrates/railit-ops/src/ops.rscrates/railit-runtime/src/runtime.rs | trains_are_handed_over_eastwardstrains_are_handed_over_westwardshandover_telegram_roundtriphandover_waits_for_the_linkonly_local_trains_are_spawned_and_describedtakeover_does_not_spawn_running_trains_againsci_ilscrates/railit-ops/tests/ops.rscrates/railit-runtime/tests/ils.rs |
| REQ-OPS-007 | H-013, H-017 | apps/railitd/src/api.rsapps/railitd/src/standby.rsapps/railitd/src/takeover.rscrates/railit-ops/src/ops.rscrates/railit-runtime/src/names.rs | ops_state_moves_to_another_computerstandby_takes_over_with_the_followed_stateapps/railitd/tests/field.rscrates/railit-ops/tests/ops.rs |
dienst.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-SVC-001 | H-004 | – | check_correspondence |
| REQ-SVC-002 | H-003, H-006 | – | Analyse (Architektur) |
| REQ-SVC-003 | H-006 | – | operate_station_over_apiroles_areas_and_audit_with_tokens |
| REQ-SVC-004 | H-006 | – | operate_station_over_api |
| REQ-SVC-005 | H-008 | – | keygen_compile_verify_info |
| REQ-SVC-006 | H-006 | – | aux_operation_and_journalmutual_tls_identifies_users_by_certificate |
| REQ-SVC-007 | H-004, H-012 | – | network_with_areas_over_apievery_area_journal_replays |
| REQ-SVC-008 | H-006 | – | interlocking_over_grpcmutual_tls_identifies_users_by_certificateapps/railitd/tests/grpc.rs |
| REQ-SVC-009 | H-015, H-016 | apps/railitd/src/api.rsapps/railitd/src/metrics.rs | operate_station_over_apisafe_computer_nodes_over_apihistogram_is_cumulative_and_consistentapps/railitd/tests/api.rs |
| REQ-SVC-010 | H-011, H-016 | apps/railitd/src/api.rsapps/railitd/src/review.rs | aux_operation_and_journalapps/railitd/tests/api.rs |
| REQ-SVC-011 | H-011, H-015, H-016 | apps/railitd/src/api.rsapps/railitd/src/standby.rsapps/railitd/ui/src/model.tsapps/railitd/ui/src/panels.tscrates/railit-runtime/src/replication.rs | standby_follows_the_primaryarea_names_are_encodedapps/railitd/tests/api.rsapps/railitd/ui/e2e/bedienplatz.test.tsapps/railitd/ui/test/role.test.ts |
| REQ-SVC-012 | H-001, H-003, H-010, H-015, H-017 | apps/railitd/src/auth.rsapps/railitd/src/engine.rsapps/railitd/src/metrics.rsapps/railitd/src/service.rsapps/railitd/src/standby.rsapps/railitd/src/takeover.rscrates/railit-runtime/src/replication.rscrates/railit-runtime/src/runtime.rs | outputs_wait_for_all_areaslapse_releases_everything_and_rearms_after_catching_uparea_without_journal_lapsestakeover_in_beispielstadt_is_safetakeover_in_nordbahn_is_safestale_takeover_without_gate_opens_the_crossing_before_a_traingate_covers_only_a_current_standbyapps/railitd/tests/field.rscrates/railit-runtime/tests/takeover.rs |
| REQ-SVC-013 | H-001, H-003, H-015, H-017 | apps/railit-field/src/main.rsapps/railitd/src/takeover.rscrates/railit-adapters/src/net.rscrates/railit-fuzz/src/lib.rs | second_interlocking_is_rejected_while_the_leader_livesstandby_leads_after_the_leader_is_lostswitch_per_areaapps/railitd/tests/field.rscrates/railit-adapters/tests/net.rs |
| REQ-SVC-014 | H-001, H-003, H-015, H-016, H-017 | apps/railitd/src/takeover.rsapps/railitd/ui/src/model.ts | standby_takes_over_with_the_followed_statestandby_restarts_without_a_promiseapps/railitd/tests/field.rsapps/railitd/ui/test/role.test.ts |
embedded.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-EMB-001 | H-007, H-015 | – | node_matches_reference_kernelmemory_capacity_is_checkedcrates/railit-embedded/tests/node.rs |
| REQ-EMB-002 | H-005, H-014 | crates/railit-runtime/src/remote.rs | link_loss_is_fail_safecrates/railit-embedded/tests/node.rs |
| REQ-EMB-003 | H-014 | – | safety_layer_over_the_wiremalformed_payload_drops_the_linkroundtrip_across_payloadsgarbage_is_malformedpacker_respects_the_payload_limitnode_wirecrates/railit-embedded/tests/node.rs |
| REQ-EMB-004 | H-007, H-015 | – | watchdog_trips_on_overruncrates/railit-embedded/tests/node.rs |
| REQ-EMB-005 | H-007, H-015, H-016 | crates/railit-runtime/src/remote.rs | all_scenarios_pass_on_safe_computer_nodesnode_process_over_udpsafe_computer_nodes_over_apiapps/railit-node/tests/udp.rsapps/railitd/tests/api.rscrates/railit-runtime/tests/scenarios.rs |
| REQ-EMB-006 | H-015, H-016 | crates/railit-embedded/src/node.rscrates/railit-kernel/src/kernel.rscrates/railit-runtime/src/remote.rs | state_sync_rebuilds_the_mirrorstate_transfer_reproduces_the_statemirror_statecrates/railit-embedded/tests/node.rsSzenario 18 |
etcs.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-ETCS-001 | H-009 | – | etcs_train_over_apiapps/railitd/tests/api.rsSzenario 16 |
| REQ-ETCS-002 | H-001, H-009, H-012 | crates/railit-etcs/src/lib.rs | etcs_train_over_apiapps/railitd/tests/api.rsSzenario 16 |
| REQ-ETCS-003 | H-001, H-009 | crates/railit-etcs/src/lib.rs | Szenario 17 |
| REQ-ETCS-004 | H-001, H-009 | apps/railit-field/src/main.rsapps/railitd/src/field.rscrates/railit-adapters/src/ils.rscrates/railit-etcs/src/lib.rscrates/railit-runtime/src/runtime.rs | etcs_authority_reaches_into_another_processpreviews_roundtrip_and_are_boundedetcs_train_crosses_into_another_processapps/railitd/tests/field.rscrates/railit-runtime/tests/ils.rs |
fahrerlaubnis.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-MOV-001 | H-002, H-009 | – | ks_diverging_entry_shows_zs3_and_is_announcedhv_diverging_is_hp2_and_vr2hv_combined_and_distant |
| REQ-MOV-002 | H-009 | – | pictures_are_consistentsignal_drop_turns_announcement_backcrates/railit-movement/tests/aspects.rs |
| REQ-MOV-003 | H-009 | – | display_of_dark_and_substituteAnalyse (Architektur) |
| REQ-MOV-004 | H-001, H-002, H-009 | crates/railit-movement/src/etcs.rs | etcs_authority_follows_the_routes_with_proceedetcs_authority_carries_speed_and_survives_passingcrates/railit-movement/tests/aspects.rs |
| REQ-MOV-007 | H-009 | crates/railit-sim/src/lib.rs | pzb_2000_hz_brakes_at_a_stop_signalpzb_500_hz_stops_before_the_announced_signalpzb_90_supervisioncrates/railit-sim/tests/sim.rsSzenario 26 |
journal.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-JRN-001 | H-011 | crates/railit-journal/src/lib.rscrates/railit-runtime/src/runtime.rs | tampering_breaks_the_chainjournal_verify_and_replayapps/railit/tests/cli.rsapps/railitd/tests/api.rscrates/railit-runtime/tests/journal.rs |
| REQ-JRN-002 | H-011, H-007 | crates/railit-journal/src/lib.rscrates/railit-runtime/src/scenario.rs | journal_replays_to_the_same_stateforged_journal_is_detected_by_replayreplay_needs_the_recorded_planaux_operation_and_journalapps/railit/tests/cli.rsapps/railitd/tests/api.rscrates/railit-runtime/tests/journal.rscrates/railit-runtime/tests/scenarios.rs |
| REQ-JRN-003 | H-011 | crates/railit-runtime/src/runtime.rs | aux_operation_and_journal |
| REQ-JRN-004 | H-011 | crates/railit-journal/src/audit.rscrates/railit-journal/src/lib.rscrates/railit-journal/src/seal.rscrates/railit-runtime/src/runtime.rs | sealed_journal_verifies_with_the_station_keyrewritten_journal_cannot_carry_the_station_sealtampered_signature_is_detectedsealed_audit_logforeign_seals_block_reopeningsealed_journal_and_audit_logapps/railitd/tests/api.rscrates/railit-journal/tests/seal.rs |
| REQ-JRN-005 | H-011 | crates/railit-journal/src/lib.rs | deltas_reconstruct_every_input_listmalformed_deltas_are_rejectedforged_journal_is_detected_by_replay |
| REQ-JRN-006 | H-011 | apps/railit/src/bench.rscrates/railit-journal/src/lib.rscrates/railit-runtime/src/scenario.rs | snapshots_split_the_replayforged_snapshot_is_detected_by_replayjournal_covers_trip_and_reset_of_the_safety_layercrates/railit-runtime/tests/scenarios.rs |
| REQ-JRN-007 | H-011 | crates/railit-journal/src/lib.rscrates/railit-runtime/src/remote.rscrates/railit-runtime/src/scenario.rs | node_journal_replays_across_resyncssafe_computer_nodes_over_apiall_scenarios_pass_on_safe_computer_nodesapps/railitd/tests/api.rscrates/railit-runtime/tests/journal.rscrates/railit-runtime/tests/scenarios.rs |
| REQ-JRN-008 | H-011 | apps/railitd/src/review.rscrates/railit-journal/src/lib.rs | window_replays_from_the_nearest_snapshotjournal_follow_state_and_eventsapps/railit/tests/cli.rscrates/railit-runtime/tests/journal.rs |
| REQ-JRN-009 | H-011, H-015 | crates/railit-journal/src/lib.rs | follower_tracks_the_running_interlockingfollower_reads_node_journaljournal_follow_state_and_eventsmutated_journalsrechained_snapshot_mutationsapps/railit/tests/cli.rscrates/railit-fuzz/tests/smoke.rscrates/railit-runtime/tests/journal.rs |
| REQ-JRN-010 | H-011 | apps/railit/src/journal.rscrates/railit-journal/src/seal.rscrates/railit-journal/src/witness.rs | seals_carry_signed_times_and_witnesses_attest_themwitnesses_attest_lines_in_orderjournal_witnessapps/railit/tests/cli.rscrates/railit-journal/tests/seal.rs |
kern.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-IXL-001 | H-007 | crates/railit-kernel/src/kernel.rs | kernel_is_deterministiccrates/railit-kernel/tests/kernel.rs |
| REQ-IXL-002 | H-001 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | conflicting_routes_are_rejectedno_conflicting_routescrates/railit-kernel/tests/kernel.rsSzenario 03 |
| REQ-IXL-003 | H-001, H-005 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | occupied_or_disturbed_sections_block_routescontinuation_may_use_the_overlapflank_signals_are_held_at_stopcrates/railit-kernel/tests/kernel.rsSzenario 07 Szenario 08 |
| REQ-IXL-004 | H-003 | crates/railit-kernel/src/kernel.rs | single_point_operationaux_force_pointcommand_pointcrates/railit-kernel/tests/kernel.rs |
| REQ-IXL-005 | H-001, H-002, H-010 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | signal_drops_when_point_loses_supervisionsignal_drops_when_section_ahead_is_occupiedoccupied_overlap_blocks_proceedproceed_only_when_safecrates/railit-kernel/tests/kernel.rsSzenario 04 |
| REQ-IXL-006 | H-001, H-009 | crates/railit-kernel/src/kernel.rs | cancelling_respects_time_locktrain_entering_cancelled_route_keeps_lockscrates/railit-kernel/tests/kernel.rscrates/railit-kernel/tests/phase2.rsSzenario 05 |
| REQ-IXL-007 | H-001, H-003 | crates/railit-kernel/src/kernel.rs | route_lifecycle_with_partial_releaseoverlap_release_waits_for_time_and_vacancyflank_protection_is_released_with_its_sectionSzenario 01 Szenario 02 |
| REQ-IXL-008 | H-007 | crates/railit-kernel/src/invariants.rscrates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | invariant_violation_enters_safe_statefirst_cycle_commands_stop_everywherecrates/railit-kernel/tests/invariants.rscrates/railit-kernel/tests/kernel.rs |
| REQ-IXL-009 | H-005 | crates/railit-adapters/src/lib.rscrates/railit-kernel/src/lib.rs | nothing_is_clear_without_reportsstale_reports_drop_the_signalcrates/railit-kernel/tests/kernel.rs |
| REQ-IXL-010 | H-002 | crates/railit-kernel/src/kernel.rs | setting_times_out_when_points_do_not_moveSzenario 06 |
| REQ-IXL-011 | H-009 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | unauthorized_occupancy_is_alarmedsignal_passed_at_dangercrates/railit-kernel/tests/borders.rscrates/railit-kernel/tests/phase2.rsSzenario 11 |
| REQ-IXL-012 | H-001, H-009 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | overlap_is_locked_and_points_are_setcontinuation_may_use_the_overlapcrates/railit-kernel/tests/phase2.rsSzenario 08 |
| REQ-IXL-013 | H-001 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | flank_signals_are_held_at_stopcrates/railit-kernel/tests/phase2.rsSzenario 08 |
| REQ-IXL-014 | H-006 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | aux_needs_a_second_operator_in_timeaux_release_of_occupied_routeaux_reset_tvdaux_force_pointapps/railitd/tests/api.rscrates/railit-kernel/tests/borders.rscrates/railit-kernel/tests/coupling.rscrates/railit-kernel/tests/phase2.rsSzenario 10 Szenario 12 |
| REQ-IXL-015 | H-001, H-009 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | substitute_signal_lets_train_passsubstitute_signal_times_out_and_dropscancel_with_substitute_uses_time_locksubstitute_only_when_justifiedcrates/railit-kernel/tests/phase2.rsSzenario 10 |
| REQ-IXL-016 | H-010 | crates/railit-kernel/src/kernel.rscrates/railit-kernel/src/lib.rs | level_crossing_must_be_closed_before_proceedlevel_crossing_opens_after_train_has_leftshared_locks_match_routescrates/railit-kernel/tests/phase2.rsSzenario 09 |
| REQ-IXL-017 | H-012 | crates/railit-adapters/src/ils.rscrates/railit-kernel/src/invariants.rscrates/railit-kernel/src/invariants/reference.rscrates/railit-kernel/src/kernel/border.rs | never_both_sides_hold_permissiondesignated_side_takes_permission_after_settle_timeonly_newer_offers_are_takentake_back_permission_by_aux_operationpermission_conflict_is_alarmedapps/railitd/tests/api.rscrates/railit-kernel/tests/borders.rscrates/railit-runtime/tests/ils.rs |
| REQ-IXL-018 | H-012 | crates/railit-kernel/src/kernel/border.rs | permission_is_given_only_when_safecrates/railit-kernel/tests/borders.rs |
| REQ-IXL-019 | H-001, H-012 | crates/railit-kernel/src/kernel/border.rs | incoming_trains_are_authorized_only_without_permissionborders_are_consistentcrates/railit-kernel/tests/borders.rs |
| REQ-IXL-020 | H-001, H-012 | crates/railit-kernel/src/invariants.rscrates/railit-kernel/src/invariants/reference.rscrates/railit-kernel/src/kernel/border.rs | exit_needs_permission_and_clear_neighbourlost_neighbour_drops_exit_signalproceed_only_when_safecrates/railit-kernel/tests/borders.rs |
| REQ-IXL-021 | H-012 | crates/railit-kernel/src/kernel/border.rs | never_two_stations_feed_the_single_tracksingle_track_direction_changes_in_ordercrates/railit-kernel/tests/borders.rscrates/railit-runtime/tests/ils.rsSzenario 13 |
| REQ-IXL-022 | H-006, H-016 | apps/railitd/src/service.rscrates/railit-kernel/src/io.rs | confirmation_must_restate_the_operationapps/railitd/tests/api.rsapps/railitd/ui/e2e/bedienplatz.test.tscrates/railit-kernel/tests/phase2.rsSzenario 12 |
| REQ-IXL-023 | H-007 | crates/railit-kernel/src/invariants.rs | linear_check_agrees_with_referencekernel_never_becomes_unsafe |
| REQ-IXL-024 | H-015 | apps/railit/src/bench.rs | bench_measures_a_small_corridor |
| REQ-IXL-025 | H-001, H-003, H-015, H-017 | apps/railitd/src/takeover.rscrates/railit-kernel/src/kernel.rscrates/railit-runtime/src/runtime.rs | proceed_falls_to_halt_and_locks_remainlocked_route_and_train_in_route_continuepending_aux_expires_and_substitute_goes_outsafe_state_is_keptkernel_never_becomes_unsafecrates/railit-kernel/tests/common/mod.rscrates/railit-kernel/tests/invariants.rscrates/railit-kernel/tests/takeover.rscrates/railit-runtime/tests/takeover.rs |
| REQ-IXL-026 | H-002, H-003 | crates/railit-kernel/src/kernel.rs | single_move_takes_the_partner_alongroute_locks_all_four_pointsforced_move_takes_the_partner_alongcoupled_points_share_one_drivecrates/railit-adapters/tests/drives.rscrates/railit-kernel/tests/coupling.rsSzenario 25 Szenario 27 |
kommunikation.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-COM-001 | H-005, H-014 | – | corruption_is_detectedcrates/railit-rasta/tests/rasta.rsSzenario 18 |
| REQ-COM-002 | H-014 | – | foreign_sender_is_rejectedcrates/railit-rasta/tests/rasta.rs |
| REQ-COM-003 | H-014 | crates/railit-rasta/src/lib.rs | replayed_messages_are_discardedlost_messages_are_retransmitted_in_orderlost_last_message_is_noticed_by_heartbeatdelivery_is_an_in_order_prefixboth_directions_deliver_in_order_prefixescrates/railit-rasta/tests/rasta.rs |
| REQ-COM-004 | H-014 | – | delayed_messages_break_the_connectioncrates/railit-rasta/tests/rasta.rs |
| REQ-COM-005 | H-005, H-014 | – | heartbeats_keep_the_connection_alivesilence_times_outcrates/railit-rasta/tests/rasta.rs |
| REQ-COM-006 | H-005, H-014 | – | field_over_eulynx_and_rastaapps/railitd/tests/api.rsSzenario 18 Szenario 19 |
| REQ-COM-007 | H-005, H-014 | crates/railit-rasta/src/lib.rs | twenty_percent_loss_does_not_break_the_connectionboth_directions_deliver_in_order_prefixescrates/railit-rasta/tests/rasta.rsSzenario 18 |
| REQ-COM-008 | H-014, H-015 | apps/railit-field/src/main.rsapps/railitd/src/field.rscrates/railit-adapters/src/ils.rscrates/railit-adapters/src/net.rscrates/railit-fuzz/src/lib.rs | leader_connects_and_controls_the_fieldremote_field_over_rastafield_network_must_matchapps/railitd/tests/field.rscrates/railit-adapters/tests/net.rs |
| REQ-COM-009 | H-012, H-014 | – | telegram_roundtrip_and_rejectsinterrupted_link_delivers_nothing_and_recoverscorruption_is_never_deliveredpermission_stays_exclusive_over_disturbed_ilsdirection_change_waits_for_the_linkall_scenarios_pass_over_sci_ilsborders_over_sci_ilssci_ilsapps/railitd/tests/api.rscrates/railit-runtime/tests/ils.rscrates/railit-runtime/tests/scenarios.rsSzenario 22 |
| REQ-COM-010 | H-012, H-014 | crates/railit-adapters/src/ils.rscrates/railit-adapters/src/net.rs | split_processes_exchange_over_the_networkborder_between_processesareas_in_separate_processesswitch_per_areastandby_takes_over_a_part_of_the_networkils_netapps/railitd/tests/api.rsapps/railitd/tests/field.rscrates/railit-adapters/tests/net.rscrates/railit-runtime/tests/ils.rs |
| REQ-COM-011 | H-014 | apps/railit-field/src/main.rscrates/railit-adapters/src/net.rscrates/railit-adapters/src/redundant.rscrates/railit-fuzz/src/lib.rscrates/railit-rasta/src/redundancy.rs | duplicates_from_the_second_channel_are_filtereda_lost_frame_comes_over_the_other_channela_gap_is_skipped_after_t_seqdiagnosis_counts_missing_frames_per_channelredundant_channels_survive_a_channel_failurerasta_redundancyapps/railitd/tests/field.rs |
plan.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-PLN-001 | H-004 | crates/railit-plan/src/lib.rscrates/railit-plan/src/view.rs | Analyse (Typsystem) |
| REQ-PLN-002 | H-004 | crates/railit-plan/src/error.rscrates/railit-plan/src/view.rscrates/railit-planning/src/error.rs | inconsistent_plans_are_rejectedcrates/railit-plan/tests/image.rs |
| REQ-PLN-003 | H-004, H-008 | – | every_single_bit_flip_is_detectedcrates/railit-plan/tests/image.rs |
| REQ-PLN-004 | H-008 | crates/railit-plan/src/approval.rscrates/railit-plan/src/lib.rscrates/railit-plan/src/model.rscrates/railit-plan/src/view.rscrates/railit-planning/src/lib.rscrates/railit-runtime/src/keys.rscrates/railit-runtime/src/lib.rs | signatures_are_checkedunsigned_or_foreign_plans_are_refusedkeygen_compile_verify_infoapps/railitd/tests/api.rscrates/railit-plan/tests/image.rs |
| REQ-PLN-010 | H-001, H-005 | crates/railit-planning/src/error.rscrates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rscrates/railit-planning/src/verify.rs | signals_must_stand_at_tvd_boundariessignals_may_stand_shortly_before_the_tvd_boundarycrates/railit-planning/tests/planning.rs |
| REQ-PLN-011 | H-001, H-002 | crates/railit-planning/src/error.rscrates/railit-planning/src/lib.rs | example_routes_are_generatedladder_stations_plan_and_verify |
| REQ-PLN-012 | H-001 | crates/railit-plan/src/view.rscrates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rs | example_routes_are_generatedexample_phase2_dataladder_stations_plan_and_verifycrates/railit-planning/tests/planning.rs |
| REQ-PLN-013 | H-004 | crates/railit-planning/src/error.rscrates/railit-planning/src/lib.rscrates/railit-planning/src/verify.rs | verification_detects_tamperingcrates/railit-planning/tests/planning.rs |
| REQ-PLN-014 | H-004 | crates/railit-planning/src/error.rs | loops_without_signal_are_rejectedcrates/railit-planning/tests/planning.rs |
| REQ-PLN-015 | H-001, H-009 | crates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rs | example_phase2_datacrates/railit-planning/tests/planning.rs |
| REQ-PLN-016 | H-001 | crates/railit-planning/src/error.rscrates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rs | flanks_must_be_protectableexample_phase2_datacrates/railit-planning/tests/planning.rs |
| REQ-PLN-017 | H-009 | crates/railit-planning/src/error.rscrates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rs | distant_signals_need_a_unique_main_signalcrates/railit-planning/tests/planning.rs |
| REQ-PLN-018 | H-010, H-002 | crates/railit-planning/src/lib.rs | example_phase2_datalevel_crossing_within_long_overlapcrates/railit-planning/tests/planning.rs |
| REQ-PLN-019 | H-001, H-012 | crates/railit-planning/src/error.rscrates/railit-planning/src/generate.rscrates/railit-planning/src/lib.rs | nordbahn_compiles_per_areaborders_need_an_entry_signalinconsistent_border_data_is_rejectedcrates/railit-planning/tests/planning.rs |
| REQ-PLN-020 | H-007 | crates/railit-plan/src/view.rs | inconsistent_phase2_data_is_rejected |
| REQ-PLN-021 | H-001, H-002, H-004 | crates/railit-plan/src/format.rscrates/railit-plan/src/model.rscrates/railit-plan/src/view.rscrates/railit-planning/src/error.rscrates/railit-planning/src/generate.rs | routes_over_a_double_slip_require_all_four_pointssingle_slip_has_one_curvecrossover_points_move_togethertampered_couplings_are_rejectedcoupled_points_must_not_lie_in_an_approachcrates/railit-kernel/tests/coupling.rscrates/railit-planning/tests/slip.rsSzenario 25 |
| REQ-PLN-022 | H-008, H-004 | apps/railit-node/src/main.rsapps/railit/src/plan.rsapps/railitd/src/main.rscrates/railit-plan/src/approval.rscrates/railit-runtime/src/keys.rs | plans_need_approvals_from_distinct_trusted_reviewersplans_need_four_eyes_approvalkeygen_compile_verify_infoapps/railit/tests/cli.rs |
sicherheit.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-SEC-001 | H-006 | apps/railitd/src/auth.rs | users_file_is_validatedroles_areas_and_audit_with_tokenstoken_and_audit_verificationapps/railit/tests/cli.rsapps/railitd/tests/security.rs |
| REQ-SEC-002 | H-006 | apps/railitd/src/tls.rs | mutual_tls_identifies_users_by_certificateapps/railitd/tests/security.rs |
| REQ-SEC-003 | H-006 | apps/railitd/src/auth.rs | roles_grant_their_permissionsroles_areas_and_audit_with_tokensinterlocking_over_grpcapps/railitd/tests/security.rs |
| REQ-SEC-004 | H-006, H-011 | apps/railit/src/admin.rsapps/railitd/src/service.rscrates/railit-journal/src/audit.rs | chain_detects_tamperingreopened_log_continues_the_chainroles_areas_and_audit_with_tokenstoken_and_audit_verificationapps/railit/tests/cli.rsapps/railitd/tests/security.rs |
| REQ-SEC-005 | H-006 | – | open_mode_only_on_loopback |
| REQ-SEC-006 | H-006 | apps/railitd/src/tls.rs | revoked_client_certificates_are_refusedapps/railitd/tests/security.rs |
sicherheitsschicht.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-SAF-001 | H-001, H-007, H-015 | crates/railit-safety/src/channels.rscrates/railit-safety/src/lib.rs | healthy_channels_are_transparenttwo_out_of_two_trips_on_stray_commandtwo_out_of_two_detects_state_divergencevoted_outputs_are_reference_outputs_or_safeall_scenarios_pass_with_three_channelsvoter_forwards_only_confirmed_outputscrates/railit-runtime/tests/scenarios.rscrates/railit-safety/tests/voter.rsSzenario 21 |
| REQ-SAF-002 | H-007, H-015 | crates/railit-safety/src/channels.rscrates/railit-safety/src/lib.rs | two_out_of_three_masks_one_channelvoted_outputs_are_reference_outputs_or_safevoter_forwards_only_confirmed_outputsredundant_channels_over_apiapps/railitd/tests/api.rscrates/railit-safety/tests/voter.rsSzenario 20 |
| REQ-SAF-003 | H-007, H-015 | crates/railit-kernel/src/state.rscrates/railit-runtime/src/runtime.rscrates/railit-safety/src/channels.rscrates/railit-safety/src/lib.rs | two_out_of_three_masks_one_channeljournal_covers_trip_and_reset_of_the_safety_layerredundant_channels_over_apiapps/railitd/tests/api.rscrates/railit-safety/tests/voter.rsSzenario 20 |
| REQ-SAF-004 | H-001, H-006, H-009, H-015 | crates/railit-runtime/src/runtime.rscrates/railit-safety/src/channels.rscrates/railit-safety/src/lib.rs | two_out_of_two_trips_on_stray_commandexternal_trip_holds_all_signalsoutput_overflow_tripsjournal_covers_trip_and_reset_of_the_safety_layerredundant_channels_over_apiroles_grant_their_permissionsapps/railitd/tests/api.rscrates/railit-runtime/tests/journal.rsSzenario 20 Szenario 21 |
| REQ-SAF-005 | H-007, H-015 | crates/railit-safety/src/lib.rscrates/railit-safety/src/watchdog.rs | deadline_and_gapbackward_clock_trips_even_without_deadlineexternal_trip_holds_all_signalswatchdog_detects_every_overrunwatchdog_trips_on_overruncrates/railit-safety/tests/voter.rs |
| REQ-SAF-006 | H-007, H-014 | – | voter_forwards_only_confirmed_outputswatchdog_detects_every_overrunfixed_outputs_never_lose_silentlybitset_insert_remove_are_exactbitset_union_is_exacttime_never_overflowsmd4_never_panics_on_shortest_pdumd4_never_panics_on_two_blocksclosed_connection_never_deliverspacker_respects_the_payload_limitcrates/railit-embedded/src/proofs.rscrates/railit-rasta/src/proofs.rscrates/railit-safety/src/proofs.rscrates/railit-types/src/proofs.rs |
| REQ-SAF-007 | H-004, H-008, H-014 | – | seeds_passplan_mutation_sweeptruncated_sourcesrandom_plan_mutationsrandom_bytescrates/railit-fuzz/tests/smoke.rs |
| REQ-SAF-008 | H-015 | crates/railit-embedded/src/node.rscrates/railit-runtime/src/remote.rscrates/railit-runtime/src/runtime.rscrates/railit-safety/src/channels.rscrates/railit-safety/src/lib.rscrates/railit-safety/src/memory.rs | a_flipped_plan_bit_is_found_within_one_passintact_memory_passes_and_counts_passesmemory_check_finds_a_corrupted_plancrates/railit-embedded/tests/node.rs |
topologie.md
| ID | Gefährdung | Code | Nachweis |
|---|---|---|---|
| REQ-TOP-001 | H-004 | crates/railit-topology/src/error.rs | duplicate_names_are_rejected_across_kindscrates/railit-import/tests/toml_format.rscrates/railit-topology/tests/validation.rs |
| REQ-TOP-002 | H-004 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | open_and_double_connected_ports_are_rejectedapps/railit/tests/cli.rscrates/railit-import/tests/toml_format.rscrates/railit-topology/tests/validation.rs |
| REQ-TOP-003 | H-004 | crates/railit-topology/src/error.rs | invalid_ports_and_self_connections_are_rejectedcrates/railit-topology/tests/validation.rs |
| REQ-TOP-004 | H-004 | crates/railit-topology/src/error.rs | zero_length_tracks_are_rejectedcrates/railit-topology/tests/validation.rs |
| REQ-TOP-005 | H-004 | crates/railit-topology/src/error.rs | signals_outside_their_track_are_rejectedcrates/railit-import/tests/toml_format.rscrates/railit-topology/tests/validation.rs |
| REQ-TOP-006 | H-001, H-005 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | tvd_coverage_must_be_complete_and_uniquecrates/railit-import/tests/toml_format.rscrates/railit-topology/tests/validation.rs |
| REQ-TOP-007 | H-002 | crates/railit-topology/src/lib.rscrates/railit-topology/src/topology.rs | points_can_only_be_traversed_tip_to_branchexits_stay_on_nodecrates/railit-topology/tests/validation.rs |
| REQ-TOP-008 | H-004 | crates/railit-topology/src/lib.rscrates/railit-topology/src/topology.rs | Analyse (Typsystem) |
| REQ-TOP-009 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | all_errors_are_collected_with_context | |
| REQ-TOP-010 | H-004 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | open_and_double_connected_ports_are_rejected |
| REQ-TOP-011 | H-004, H-012 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | nordbahn_has_three_areas_and_two_linksevery_tvd_needs_exactly_one_areacrates/railit-import/tests/areas.rs |
| REQ-TOP-012 | H-004 | crates/railit-topology/src/builder.rscrates/railit-topology/src/error.rs | platforms_need_route_signals |
| REQ-TOP-013 | H-004, H-012 | crates/railit-topology/src/area.rs | area_cut_replaces_neighbours_by_bordersborder_terminals_can_be_written_by_handcrates/railit-import/tests/areas.rs |
| REQ-TOP-014 | H-004 | – | handmade_railml_is_importederrors_are_collected_with_locationbeispielstadt_survives_the_roundtripnordbahn_with_areas_and_stations_survives_the_roundtriprailml_roundtrip_yields_identical_plansrailml_export_validate_compileapps/railit/tests/cli.rscrates/railit-import/tests/railml.rscrates/railit-planning/tests/planning.rs |
| REQ-TOP-015 | H-004 | – | handmade_planpro_is_importederrors_are_collected_with_locationbeispielstadt_survives_the_roundtripgenerated_corridor_survives_the_roundtripplanpro_roundtrip_yields_identical_plansplanpro_networkcrates/railit-import/tests/planpro.rscrates/railit-planning/tests/planning.rsSzenario 23 |
| REQ-TOP-016 | H-001, H-004 | crates/railit-import/src/toml_format.rscrates/railit-topology/src/builder.rscrates/railit-topology/src/error.rscrates/railit-topology/src/model.rs | crossing_legs_share_one_tvdcrossing_survives_the_roundtripcrates/railit-import/tests/planpro.rscrates/railit-import/tests/railml.rscrates/railit-import/tests/toml_format.rsSzenario 24 |
| REQ-TOP-017 | H-001, H-002, H-004 | crates/railit-adapters/src/lib.rscrates/railit-import/src/planpro.rscrates/railit-import/src/railml.rscrates/railit-sim/src/lib.rscrates/railit-topology/src/area.rscrates/railit-topology/src/builder.rscrates/railit-topology/src/error.rscrates/railit-topology/src/model.rscrates/railit-topology/src/topology.rs | double_slip_is_built_from_coupled_pointsinvalid_couplings_are_rejectedslip_names_are_checked_firstslips_and_couplings_survive_the_roundtripslips_survive_the_planpro_roundtripbroken_slip_is_rejectedcrates/railit-adapters/tests/drives.rscrates/railit-import/tests/planpro.rscrates/railit-import/tests/railml.rscrates/railit-planning/tests/slip.rsSzenario 25 |
136 Anforderungen, davon 136 mit Nachweis.