Timeline

Verified against commit 942a18727c on 2026-09-26 (UTC). Re-verify: git grep -n "MapGroup(\|Map\(Get\|Post\)(" -- src/Timeline/StellaOps.Timeline.WebService and ls src/Timeline/__Libraries/StellaOps.Timeline.Persistence/Migrations.

Service rows (host project, image, database and role, compose file, bundle presence, Doctor registration) are generated in docs/architecture/service-inventory.md; where this page and the inventory differ, the inventory is authoritative.

Purpose

Timeline is one deployable with two roles:

  1. Unified audit sink. Services push audit events to POST /api/v1/audit/ingest; they are stored in timeline.unified_audit_events (monthly partitions, per-tenant SHA-256 hash chain) with the verified identity of the caller that wrote each one (ingestIdentity), and served back with filtering, statistics, correlation clusters, chain verification, retention and GDPR controls, and anomaly detection (anomaly v2).
  2. HLC event timeline. Hybrid Logical Clock-ordered event queries, critical-path analysis, export and replay, plus the TimelineIndexer event store and its NATS/Redis ingestion worker, which run in the same process.

Deployables

DeployableSourceComposeRelease bundle
timeline-websrc/Timeline/StellaOps.Timeline.WebService/ (Program.cs)devops/compose/docker-compose.timeline.ymlYes: service timeline-web, image stellaops/timeline-web, aliases timeline.stella-ops.local, timelineindexer.stella-ops.local

Database

API surface

FamilyRoutesSource
HLC timelineGET /api/v1/timeline/hlc/{correlationId}, /critical-pathEndpoints/TimelineEndpoints.cs
HLC export and replay/api/v1/timeline/hlc/{correlationId}/export, /export/{exportId}[/download], /{correlationId}/replay, /replay/{replayId}[/cancel]Endpoints/ExportEndpoints.cs, Endpoints/ReplayEndpoints.cs
Unified audit/api/v1/audit/ingest, /events, /stats, /timeline/search, /correlations, /chain/verify, /anomalies*, /export*, /retention-policies, /actors/{actorId}/piiEndpoints/UnifiedAuditEndpoints.cs
Indexer eventsGET /api/v1/timeline, /{eventId}, /{eventId}/evidence; POST /api/v1/timeline/events; the same four also at the bare /timeline prefixProgram.cs (MapTimelineIndexerEndpoints)
Operations/health, /health/ready, /health/live, build info, /doctor/timeline/checksEndpoints/HealthEndpoints.cs, Program.cs

Replay and export bundle building are registered only in Development and Testing; elsewhere the Unsupported* implementations answer 501 (StellaOps.Timeline.Core/ServiceCollectionExtensions.cs).

Authorization

PolicyScopesUsed by
Timeline.Readtimeline:readReads, status lookups, indexer reads
Timeline.Writetimeline:writeExport and replay initiation, acknowledgement, indexer event ingest
Timeline.AuditIngestaudit:ingest or timeline:writePOST /api/v1/audit/ingest (only audit:ingest may name the event tenant, and its tenant-less events join the admin-only installation tenant; a timeline:write caller writes to its own tenant and records only itself as the actor; every event stores its verified writer)
Timeline.Admintimeline:adminAnomaly-rule CRUD, Notify dispatch worklist, GDPR PII redaction
Timeline.DoctorHealthops.healthDoctor endpoints

Source: Program.cs (AddStellaOpsScopePolicy, AddStellaOpsAnyScopePolicy) and Security/TimelinePolicies.cs.

Doctor checks

doctor.timeline.database.own-database-cutover, doctor.timeline.unified-audit-events.partitioning, doctor.timeline.eventing.co-tenancy (Doctor/TimelineDoctorChecks.cs), plus the standard service checks from AddServiceDoctorChecks("timeline").

Retired predecessors

Subordinate documents

DocumentStatus
architecture.mdcurrent
api-reference.md, openapi/v1.jsoncurrent generated reference
audit-retention.mddesign record, not re-verified 2026-09-26
anomaly-v2.mddesign record, not re-verified 2026-09-26
audit-emitter-coverage.mddesign record (2026-05-18 matrix), not re-verified 2026-09-26