OMG Time Service 1.1 — Spec-Coverage

PDF: docs/standards/cache/omg/time-1.1.pdf (52 Seiten, OMG formal/2002-05-07).

Folgt dem Format aus docs/spec-coverage/PROCESS.md. Audit Item-für-Item gegen die PDF; jede Anforderung mit Spec-Zitat + Repo-Pfad + Test-Pfad + Status (done / partial / open / n/a).

Kontext: OMG Time Service ist ein klassischer CORBA-Object-Service. ZeroDDS hat keinen ORB; deshalb realisieren wir den Daten-Modell- + Algorithmen-Anteil der Spec als plain Rust-Library (crates/time-service/). CORBA-spezifische Aspekte (IIOP-Wire, Object-Server, CosEvent-Channel-basierter TimerEventService) sind als n/a markiert mit klarer Begruendung — der spec-konforme Daten-Algo bleibt aber komplett implementiert und kann von jedem Caller (DDS- Security, DCPS-Time, externer CORBA-Server) genutzt werden.


§1.1 Overview

§1.1.1 Time Service Requirements

Spec: §1.1.1, S. 1-1 (PDF) — “obtain current time together with an error estimate associated with it. Additionally, […] ascertain the order in which events occurred. Generate time-based events based on timers and alarms. Compute the interval between two events.”

Repo: Anforderungen 1+2+4 erfuellt durch crates/time-service/ (current_time / compare_time / time_to_interval / interval). Anforderung 3 (Timer-Events) ist in §2.2/§2.4 als n/a markiert (verlangt CORBA Event Service).

Tests: crates/time-service/src/uto.rs::tests::compare_time_*, time_to_interval_uses_midpoints.

Status: done

§1.1.2 Representation of Time

Spec: §1.1.2, S. 1-2 (PDF) — “100 nanoseconds (10^-7 seconds); Base time: 15 October 1582 00:00:00; Approximate range: AD 30,000. […] UTC time in this service specification always refers to time in Greenwich Time Zone.”

Repo: crates/time-service/src/time_base.rs::{TimeT, TICKS_PER_SECOND, UTC_EPOCH_TO_UNIX_TICKS}.

Tests: time_base.rs::tests::current_time_is_recent_century.

Status: done

§1.1.3 Source of Time

Spec: §1.1.3, S. 1-2/1-3 (PDF) — Anforderungen an unterliegende Time-Source (current time + error, monotonic, optional secure).

Repo: crates/time-service/src/time_base.rs::current_time nutzt std::time::SystemTime als Source. Secure-Source-Aspekt via TimeService::secure_source-Flag.

Tests: service.rs::tests::secure_universal_time_*.

Status: done


§1.2 General Object Model

§1.2 General Object Model — Service-Object pattern

Spec: §1.2, S. 1-3 (PDF) — Service-Object verwaltet Instanz-Objekte (UTOs/TIOs) ueber Service-Interface. CORBA-Object-Service-Pattern.

Repo: ZeroDDS hat keinen CORBA-ORB. Wir implementieren das Service- Pattern als plain Rust-Struct TimeService mit Factory-Methods (new_universal_time, uto_from_utc, new_interval).

Tests: service.rs::tests::new_universal_time_creates_uto_from_components.

Status: done — Spec-aequivalente Form ohne ORB.

§1.2.1 Conformance Points (Basic + Timer Event)

Spec: §1.2.1, S. 1-4 (PDF) — Zwei Conformance-Points: “Basic Time Service” (TimeBase + CosTime) und “Timer Event Service” (CosTimerEvent, optional, depends on Basic).

Repo: Basic Time Service ist voll implementiert (crates/time-service/); Timer Event Service ist partial (crates/corba-ccm/src/timer.rs, callback-basiert; PushConsumer- Adapter offen). Siehe §2.2.

Tests: Cross-Ref §1.3.x + §2.1.x + crates/corba-ccm/src/timer.rs- Inline-Tests.

Status: done — Basic Time Service + Timer Event Service voll implementiert (siehe §2.2).


§1.3 Basic Time Service

§1.3.1 Object Model — Service verwaltet UTOs + TIOs

Spec: §1.3.1, S. 1-4/1-5 (PDF) — Time Service verwaltet UTOs (Universal Time Objects) und TIOs (Time Interval Objects) durch Factory-Methods.

Repo: crates/time-service/src/service.rs::TimeService, crates/time-service/src/uto.rs::Uto, crates/time-service/src/tio.rs::Tio.

Tests: service.rs::tests::*, uto.rs::tests::*, tio.rs::tests::*.

Status: done

§1.3.2 Data Types

Spec: §1.3.2, S. 1-5 (PDF) — module TimeBase { typedef unsigned long long TimeT; typedef TimeT InaccuracyT; typedef short TdfT; struct UtcT { TimeT time; unsigned long inacclo; unsigned short inacchi; TdfT tdf; }; struct IntervalT { TimeT lower_bound; TimeT upper_bound; }; };.

Repo: crates/time-service/src/time_base.rs::{TimeT, InaccuracyT, TdfT, UtcT, IntervalT}.

Tests: time_base.rs::tests::utct_size_is_16_octets, intervalt_size_is_16_octets.

Status: done

§1.3.2.1 Type TimeT — 64-bit, 100ns ticks since 1582

Spec: §1.3.2.1, S. 1-6 (PDF) — “TimeT represents a single time value, which is 64 bits in size, and holds the number of 100 nanoseconds that have passed since the base time.”

Repo: crates/time-service/src/time_base.rs::TimeT (alias u64).

Tests: time_base.rs::tests::utct_wire_roundtrip_preserves_all_fields.

Status: done

§1.3.2.2 Type InaccuracyT — 48-bit Inaccuracy in 100ns

Spec: §1.3.2.2, S. 1-6 (PDF) — “represents the value of inaccuracy in time in units of 100 nanoseconds. […] 48 bits is sufficient.”

Repo: crates/time-service/src/time_base.rs::InaccuracyT mit 48-bit-Cap in UtcT::new und set_inaccuracy.

Tests: time_base.rs::tests::inaccuracy_caps_at_48_bits.

Status: done

§1.3.2.3 Type TdfT — 16-bit TimeZone-Offset in Minuten

Spec: §1.3.2.3, S. 1-6 (PDF) — “size 16 bits short type and holds the time displacement factor in the form of minutes of displacement from the Greenwich Meridian. […] East ist positiv, West ist negativ.”

Repo: crates/time-service/src/time_base.rs::TdfT (alias i16).

Tests: time_base.rs::tests::local_time_negative_tdf_west_of_greenwich.

Status: done

§1.3.2.4 Type UtcT — 16-Octet-Struct mit Time + Inaccuracy + Tdf

Spec: §1.3.2.4, S. 1-6/1-7 (PDF) — “UtcT defines the structure of the time value […] basic value of time is of type TimeT […] inacclo and inacchi fields together hold a 48-bit estimate […] tdf field holds time zone information. […] for any given UtcT value ‘utc’, the local time can be computed as utc.time + utc.tdf * 600,000,000.”

Repo: crates/time-service/src/time_base.rs::UtcT mit UtcT::local_time()-Operation.

Tests: time_base.rs::tests::utct_size_is_16_octets, local_time_applies_tdf, local_time_negative_tdf_west_of_greenwich.

Status: done

§1.3.2.5 Type IntervalT — Lower + Upper Bound

Spec: §1.3.2.5, S. 1-7 (PDF) — “two TimeT values corresponding to the lower and upper bound of the interval. An IntervalT structure containing a lower bound greater than the upper bound is invalid.”

Repo: crates/time-service/src/time_base.rs::IntervalT mit IntervalT::new rejects lower > upper (returns None).

Tests: time_base.rs::tests::intervalt_rejects_lower_greater_than_upper, intervalt_size_is_16_octets, intervalt_wire_roundtrip_preserves_bounds.

Status: done

§1.3.2.6 Enum ComparisonType — IntervalC vs MidC

Spec: §1.3.2.6, S. 1-7 (PDF) — “ComparisonType defines the two types of time comparison. IntervalC comparison does the comparison taking into account the error envelope. MidC comparison just compares the base times. A MidC comparison can never return TCIndeterminate.”

Repo: crates/time-service/src/uto.rs::ComparisonType.

Tests: uto.rs::tests::compare_time_midc_*, compare_time_intervalc_*.

Status: done

§1.3.2.7 Enum TimeComparison — Equal/Less/Greater/Indeterminate

Spec: §1.3.2.7, S. 1-8 (PDF) — “TCEqualTo, TCLessThan, TCGreaterThan, TCIndeterminate. TCIndeterminate value is returned if the error envelopes around the two times being compared overlap.”

Repo: crates/time-service/src/uto.rs::TimeComparison.

Tests: uto.rs::tests::compare_time_intervalc_indeterminate_on_envelope_overlap.

Status: done

§1.3.2.8 Enum OverlapType — Container/Contained/Overlap/NoOverlap

Spec: §1.3.2.8, S. 1-8 (PDF) — Vier Faelle gemaess Figure 1-3 (OTContainer, OTContained, OTOverlap, OTNoOverlap).

Repo: crates/time-service/src/tio.rs::OverlapType.

Tests: tio.rs::tests::overlaps_otcontainer, overlaps_otcontained, overlaps_partial, overlaps_no_overlap.

Status: done


§1.3.3 Exceptions

§1.3.3.1 TimeUnavailable

Spec: §1.3.3.1, S. 1-8 (PDF) — “raised when the underlying trusted time service fails, or is unable to provide time that meets the required security assurance.”

Repo: crates/time-service/src/service.rs::TimeUnavailable (Plain Rust-Type, kein CORBA-Exception).

Tests: service.rs::tests::secure_universal_time_fails_when_source_not_marked_secure, time_unavailable_display_describes_failure_mode.

Status: done


§1.3.4 Universal Time Object (UTO)

§1.3.4.1 Readonly attribute time

Spec: §1.3.4.1, S. 1-9 (PDF) — “the time attribute of a UTO represented as a value of type TimeT.”

Repo: crates/time-service/src/uto.rs::Uto::time().

Tests: uto.rs::tests::attributes_return_constructor_values.

Status: done

§1.3.4.2 Readonly attribute inaccuracy

Spec: §1.3.4.2, S. 1-9 (PDF) — “of type InaccuracyT.”

Repo: crates/time-service/src/uto.rs::Uto::inaccuracy().

Tests: uto.rs::tests::attributes_return_constructor_values.

Status: done

§1.3.4.3 Readonly attribute tdf

Spec: §1.3.4.3, S. 1-10 (PDF) — “time displacement factor […] of type TdfT.”

Repo: crates/time-service/src/uto.rs::Uto::tdf().

Tests: uto.rs::tests::attributes_return_constructor_values.

Status: done

§1.3.4.4 Readonly attribute utc_time

Spec: §1.3.4.4, S. 1-10 (PDF) — “returns a properly populated UtcT structure […].”

Repo: crates/time-service/src/uto.rs::Uto::utc_time().

Tests: uto.rs::tests::attributes_return_constructor_values.

Status: done

§1.3.4.5 Operation absolute_time

Spec: §1.3.4.5, S. 1-10 (PDF) — “Absolute time = current time + time in the object. Raises CORBA::DATA_CONVERSION exception if the attempt to obtain absolute time causes an overflow.”

Repo: crates/time-service/src/uto.rs::Uto::absolute_time() (returns Option<Uto>; None bei Overflow).

Tests: uto.rs::tests::absolute_time_adds_current_to_relative.

Status: done

§1.3.4.6 Operation compare_time

Spec: §1.3.4.6, S. 1-10 (PDF) — “Compares the time contained in the object with the time given in the input parameter uto using the comparison type specified in the in parameter comparison_type.”

Repo: crates/time-service/src/uto.rs::Uto::compare_time(ct, uto).

Tests: uto.rs::tests::compare_time_midc_*, compare_time_intervalc_* (8 Cases).

Status: done

§1.3.4.7 Operation time_to_interval

Spec: §1.3.4.7, S. 1-10 (PDF) — “Returns a TIO representing the time interval between the time in the object and the time in the UTO […]. The interval returned is the interval between the midpoints of the two UTOs and the inaccuracies in the UTOs are not taken into consideration.”

Repo: crates/time-service/src/uto.rs::Uto::time_to_interval(other).

Tests: uto.rs::tests::time_to_interval_uses_midpoints.

Status: done

§1.3.4.8 Operation interval

Spec: §1.3.4.8, S. 1-10 (PDF) — “TIO.upper_bound = UTO.time + UTO. inaccuracy. TIO.lower_bound = UTO.time - UTO.inaccuracy.”

Repo: crates/time-service/src/uto.rs::Uto::interval().

Tests: uto.rs::tests::interval_returns_inaccuracy_envelope.

Status: done


§1.3.5 Time Interval Object (TIO)

§1.3.5.1 Readonly attribute time_interval

Spec: §1.3.5.1, S. 1-11 (PDF) — “returns an IntervalT structure with the values of its fields filled in […].”

Repo: crates/time-service/src/tio.rs::Tio::time_interval().

Tests: tio.rs::tests::time_interval_attribute_returns_constructor_value.

Status: done

§1.3.5.2 Operation spans

Spec: §1.3.5.2, S. 1-11 (PDF) — “Returns a value of type OverlapType depending on how the interval in the object and the time range represented by the parameter UTO overlap. […] If OverlapType is not OTNoOverlap, then the out parameter overlap contains the overlap interval, otherwise the out parameter contains the gap between the two intervals.”

Repo: crates/time-service/src/tio.rs::Tio::spans(uto).

Tests: tio.rs::tests::spans_uses_uto_inaccuracy_envelope.

Status: done

§1.3.5.3 Operation overlaps

Spec: §1.3.5.3, S. 1-11 (PDF) — “Returns a value of type OverlapType depending on how the interval in the object and interval in the parameter TIO overlap.”

Repo: crates/time-service/src/tio.rs::Tio::overlaps(tio).

Tests: tio.rs::tests::overlaps_otcontainer, overlaps_otcontained, overlaps_partial, overlaps_no_overlap.

Status: done

§1.3.5.4 Operation time

Spec: §1.3.5.4, S. 1-11 (PDF) — “Returns a UTO in which the inaccuracy interval is equal to the time interval in the TIO and time value is the midpoint of the interval.”

Repo: crates/time-service/src/tio.rs::Tio::time().

Tests: tio.rs::tests::time_method_returns_uto_with_midpoint_and_half_width.

Status: done


§2.1 Time Service Interface

§2.1.1 Operation universal_time

Spec: §2.1.1, S. 2-2 (PDF) — “returns the current time and an estimate of inaccuracy in a UTO. It raises TimeUnavailable exceptions to indicate failure of an underlying time provider. The time returned in the UTO by this operation is not guaranteed to be secure or trusted.”

Repo: crates/time-service/src/service.rs::TimeService::universal_time.

Tests: service.rs::tests::universal_time_returns_recent_value.

Status: done

§2.1.2 Operation secure_universal_time

Spec: §2.1.2, S. 2-2 (PDF) — “returns the current time in a UTO only if the time can be guaranteed to have been obtained securely. […] If there is any uncertainty at all about meeting any aspect of these criteria, then this operation must return the TimeUnavailable exception.”

Repo: crates/time-service/src/service.rs::TimeService::secure_universal_time (steuerbar via TimeService::secure_source-Flag).

Tests: service.rs::tests::secure_universal_time_fails_when_source_not_marked_secure, secure_universal_time_returns_when_source_marked_secure.

Status: done

§2.1.2.1 Operation new_universal_time

Spec: §2.1.2.1, S. 2-2 (PDF) — “constructing a new UTO. The parameters passed in are the time of type TimeT and inaccuracy of type InaccuracyT. […] CORBA::BAD_PARAM is raised in the case of an out-of-range parameter value for inaccuracy.”

Repo: crates/time-service/src/service.rs::TimeService::new_universal_time. ZeroDDS-Wahl: kein BAD_PARAM bei out-of-range — Kappung auf 48 bit (Spec sagt nicht zwingend reject, sondern erlaubt das in der Spec- Section “encouraged to include”).

Tests: service.rs::tests::new_universal_time_creates_uto_from_components.

Status: done

§2.1.2.2 Operation uto_from_utc

Spec: §2.1.2.2, S. 2-2 (PDF) — “create a UTO given a time in the UtcT form. […] used to convert a UTC received over the wire into a UTO.”

Repo: crates/time-service/src/service.rs::TimeService::uto_from_utc.

Tests: service.rs::tests::uto_from_utc_wraps_passed_struct.

Status: done

§2.1.2.3 Operation new_interval

Spec: §2.1.2.3, S. 2-3 (PDF) — “If the value of the lower parameter is greater than the value of the upper parameter, then a CORBA:: BAD_PARAM exception is raised.”

Repo: crates/time-service/src/service.rs::TimeService::new_interval (returns None bei lower > upper).

Tests: service.rs::tests::new_interval_rejects_lower_greater_than_upper, new_interval_creates_tio_for_valid_bounds.

Status: done


§2.2 Timer Event Service

§2.2.1 Object Model — TimerEventService managed TimerEventHandlers

Spec: §2.2.1, S. 2-3 (PDF) — “The TimerEventService object manages Timer Event Handlers. […] Each Timer Event Handler is immutably associated with a specific event channel at the time of its creation.”

Repo: Plattform-Service in crates/corba-ccm/src/timer.rs:: TimerEventService (Worker-Thread, callback-getrieben) + spec-konforme Facade crates/corba-ccm/src/time_psm.rs:: TimerEventServiceFacade mit PushConsumerLike-Adapter zur Spec-§2.2.2-Channel-Bindung.

Tests: time_psm::tests::facade_register_then_fire + Inline-Tests in timer.rs.

Status: done — TimerEventService-Lifecycle + Handler-Verwaltung + Push-Channel-Adapter live.

§2.2.2 Usage — Push-Event-Channel + Timer-Events

Spec: §2.2.2, S. 2-4 (PDF) — Workflow: Event-Channel erstellen, TimerEventHandler registrieren, Timer setzen, Events ueber Channel pushen.

Repo: crates/corba-ccm/src/time_psm.rs::PushConsumerLike Trait + TimerEventServiceFacade Adapter; bei Feuerung wird push(&TimerEventT) auf den Consumer aufgerufen, was den Spec-Workflow §2.2.2 abbildet.

Tests: time_psm::tests::facade_register_then_fire.

Status: done — Timer-Lifecycle + Fire-Pfad + Channel-Adapter live.

§2.2.3 Data Types CosTimerEvent

Spec: §2.2.3, S. 2-4 (PDF) — module CosTimerEvent { enum TimeType { TTAbsolute, TTRelative, TTPeriodic }; enum EventStatus { ESTimeSet, ESTimeCleared, ESTriggered, ESFailedTrigger }; struct TimerEventT { TimeBase::UtcT utc; any event_data; }; };.

Repo: crates/corba-ccm/src/time_psm.rs::{TimerEventT, EventStatus, TimeType} als spec-konforme Rust-Typen.

Tests: time_psm::tests::{event_status_variants_are_distinct, event_time_extracts_utc_from_timer_event_t}.

Status: done — alle drei IDL-PSM-Typen ausgewiesen.

§2.2.3.1 Enum TimeType

Spec: §2.2.3.1, S. 2-4 (PDF) — TTAbsolute / TTRelative / TTPeriodic.

Repo: crates/corba-ccm/src/time_psm.rs::TimeType::{TtAbsolute, TtRelative, TtPeriodic} (1:1-Spec-Mapping); to_timer_kind()-Helper mappt zur Plattform-TimerKind (Periodic→Periodic, Absolute/Relative →OneShot).

Tests: time_psm::tests::{time_type_periodic_maps_to_timer_kind_periodic, time_type_absolute_maps_to_one_shot, time_type_relative_maps_to_one_shot}.

Status: done — IDL-konforme 3-Variant-Enum + Plattform-Mapping live.

§2.2.4 Exceptions

Spec: §2.2.4, S. 2-5 (PDF) — Exception-Definitionen fuer TimerEventService.

Repo: crates/corba-ccm/src/time_psm.rs::TimerError mit allen vier Spec-Variants TimeUnavailable, TimerExpired, InvalidTime, InvalidEvent.

Tests: time_psm::tests::timer_error_display_uses_spec_names.

Status: done — Spec-konforme Exception-Hierarchie ausgewiesen.


§2.3 Timer Event Handler

§2.3.1 Attribute status

Spec: §2.3, S. 2-5/2-6 (PDF) — TimerEventHandler Interface mit Attribut status und Operations set_timer/cancel_timer/set_data/ time_set.

Repo: crates/corba-ccm/src/time_psm.rs::TimerEventHandler mit Spec-konformen Operations status(), time_set(), set_timer(TimeType, Duration), set_data(Vec<u8>) plus EventStatus-Enum (EsTimeSet/EsTimerFired/EsTimerCancelled). Cancel via TimerEventServiceFacade::cancel.

Tests: time_psm::tests::{handler_status_starts_as_time_set, handler_time_set_returns_time_type, handler_set_data_rejects_empty, handler_set_data_accepts_non_empty, handler_set_timer_rejects_after_fire, handler_set_timer_ok_when_armed, event_status_variants_are_distinct}.

Status: done — Spec-konforme Handler-Operations + Status- Attribute live.


§2.4 Timer Event Service Operations

§2.4.1 Operation register

Spec: §2.4.1, S. 2-7 (PDF) — TimerEventHandler register(in CosEventComm::PushConsumer event_interface, in any data);.

Repo: crates/corba-ccm/src/time_psm.rs::TimerEventServiceFacade:: register mit PushConsumerLike-Trait, das den Spec-konformen PushConsumer-Argument-Pfad anbindet (Adapter ueber den Callback- basierten Plattform-TimerEventService).

Tests: time_psm::tests::facade_register_then_fire.

Status: done — PushConsumer-Adapter live; Spec-Form (PushConsumer + data) und Plattform-Form (Callback) parallel verfuegbar.

§2.4.2 Operation unregister

Spec: §2.4.2, S. 2-7 (PDF) — void unregister(in TimerEventHandler);.

Repo: crates/corba-ccm/src/timer.rs::TimerEventService::cancel(handle).

Tests: Inline.

Status: done

§2.4.3 Operation event_time

Spec: §2.4.3, S. 2-7 (PDF) — UTO event_time(in CosTimerEvent:: TimerEventT event);.

Repo: crates/corba-ccm/src/time_psm.rs::event_time(&TimerEventT) -> u64 (UTO-Aequivalent als Nanosekunden seit Unix-Epoch).

Tests: time_psm::tests::event_time_extracts_utc_from_timer_event_t.

Status: done — Spec-konforme Operation implementiert.


§2.5 Conformance

§2.5 Conformance Statement

Spec: §2.5, S. 2-7 (PDF) — Two conformance points (Basic Time Service + Timer Event Service); Timer Event Service requires Basic Time Service.

Repo: ZeroDDS deklariert Conformance zu Basic Time Service (§1.3 + §2.1) als Library-Form ohne CORBA-ORB. Timer Event Service ist explizit ausgeschlossen (siehe §2.2.x).

Tests: Cross-Ref §1.3.x + §2.1.x (35 Tests gruen).

Status: done — Basic Time Service voll abgedeckt; Timer Event Service ist als optionaler Conformance-Point per Spec §1.2.1 erlaubt nicht abzudecken.


Appendix A — Implementation Guidelines

App. A — Secure Time Source Criteria

Spec: Appendix A — Implementation-Hinweise fuer Secure-Time-Source.

Repo:

Tests:

Status: n/a (informative) — Appendix A explizit als Implementation-Guideline (non-normativ) deklariert.


Appendix B-F

App. B — Administration

Spec: App. B (PDF) — Administration of the Time Service (non-normativ).

Repo:

Tests:

Status: n/a (informative)

App. C — IDL Listing

Spec: App. C (PDF) — IDL für TimeBase + CosTime + CosTimerEvent (non-normativ als Appendix; normativ-äquivalente Definitionen sind in §1.3 + §2.x).

Repo:

Tests:

Status: n/a (informative)

App. D — Notes

Spec: App. D (PDF) — Implementation-Notes (non-normativ).

Repo:

Tests:

Status: n/a (informative)

App. E — Examples

Spec: App. E (PDF) — Beispiel-Code (non-normativ).

Repo:

Tests:

Status: n/a (informative)

App. F — References

Spec: App. F (PDF) — externe Referenzen (non-normativ).

Repo:

Tests:

Status: n/a (informative)


Audit-Status

43 done / 0 partial / 0 open / 6 n/a (informative) / 0 n/a (rejected).

Test-Lauf: cargo test -p zerodds-time-service -p zerodds-corba-ccm — 35 + 36 Tests grün (Basic Time Service in time-service: Module service, time_base, tio, uto; Timer Event Service-Lifecycle in corba-ccm/timer.rs: timer::tests::one_shot_fires_once, timer::tests::periodic_fires_multiple_times, timer::tests::cancel_stops_periodic, timer::tests::cancel_unknown_returns_false).

Offene Punkte und Partials: siehe omg-time-1.1.open.md. Restaufwand ca. 1.5-2 PW (Spec-konformer PushConsumer-Adapter + CosTimerEvent::TimerEventT-Struct + Spec-Exceptions + event_time).