Robotico.Time 1.0.1

Robotico.Time

Woodpecker CI

.NET 10 C# NuGet Robotico

Application ports for time-series + wide-event ("observability") stores (ITimeStore / ITimeSession).

  • NuGet: Robotico.Time
  • Feed: https://download.robotico.dev/nuget/v3/index.json
  • Brokkr: https://brokkr.robotico.dev/robotico/robotico-time-csharp

Engine adapters (e.g. Robotico.Time.MishimaTime) implement these ports. This package is not an IRepository.

Quick start

ITimeStore store = new InMemoryTimeStore(); // tests/samples only
Result<ITimeSession> opened = store.Create("mem://demo");
using ITimeSession session = opened.ExpectSuccess();

Result<ulong> series = session.RegisterSeries(
    new TimeSeriesKey("cpu.load", new Dictionary<string, string> { ["host"] = "a" }));
session.AppendSample(series.ExpectSuccess(), timestampUnixNanos: 1_000_000_000, value: 0.42);

Result<TimeDoctorReport> doctor = session.Doctor(); // always available — required, not optional

Production apps should use Robotico.Time.MishimaTime (or Nexus Client Time when available).

Design notes

  • Doctor is required. ITimeSession.Doctor() is a non-optional member of the port — every implementation (in-memory or engine-backed) must return an operational health report (series/event counts, storage paths, byte lengths, format versions). There is no capability check or feature flag; callers can always call Doctor().
  • Series keys are opaque. RegisterSeries returns a ulong handle; callers must not assume anything about its value (e.g. dense allocation, ordering) beyond stability for the lifetime of the store. Registering the same TimeSeriesKey twice returns the same id (idempotent).
  • Ranges are half-open. QueryRange/QueryEvents take [fromInclusive, toExclusive) — consistent with typical time-bucket semantics and safe to chain without double-counting boundary samples.
  • Wide events are schema'd (TimeEventTableSchema → ordered TimeEventFields) with optional secondary indexes per field: None, Inverted (exact-match lookups), FullText (token-overlap search). Cell values are carried in TimeCell, a flat DTO covering the common scalar wire kinds (Utf8, I64, U64, F64, Boolean) plus IsNull.

Quality gate

Same Library 10 bar as other Robotico C# packages:

  • Analyzers on (TreatWarningsAsErrors, Meziantou MA0004/MA0042/MA0155, IDE0008/IDE0090/IDE0301/IDE0330)
  • dotnet test with coverlet ≥ 90% line coverage on Robotico.Time
  • Woodpecker / GitHub CI run bash scripts/woodpecker-verify.sh

Build

bash scripts/woodpecker-verify.sh
bash scripts/pack-release.sh

Showing the top 20 packages that depend on Robotico.Time.

Packages Downloads
Robotico.Nexus.Client
Unified Nexus client SDK: connect via nexus+graph|time|document|relational URIs, get Robotico.Graph / Robotico.Time ports bound to a remote Nexus database over gRPC, plus thin Document/Relational client factories. Does not reference Mishima.Nexus.Node.* host assemblies.
18
Robotico.Nexus.Client
Unified Nexus client SDK: connect via nexus+graph|time|document|relational URIs, get Robotico.Graph / Robotico.Time ports bound to a remote Nexus database over gRPC, plus thin Document/Relational client factories. Does not reference Mishima.Nexus.Node.* host assemblies.
4
Robotico.Time.MishimaTime
ITimeStore / ITimeSession backed by embedded MishimaTime. Series + wide-event tables, inverted/full-text lookup, and a required Doctor ops report; Result-mapped engine errors. Does not expose MishimaTime types on the public surface.
3
Robotico.Time.MishimaTime
ITimeStore / ITimeSession backed by embedded MishimaTime. Series + wide-event tables, inverted/full-text lookup, and a required Doctor ops report; Result-mapped engine errors. Does not expose MishimaTime types on the public surface.
1

.NET 10.0

Version Downloads Last updated
1.0.1 20 07/26/2026
1.0.0 27 07/24/2026