Responsibilities
The ExperimentTracker manages:- Experiment lifecycle state transitions
- Candidate generation, validation, evaluation, and status changes
- Benchmark execution records
- Resource usage (GPU, memory, time)
- Configuration snapshots
- Error and failure states
Event Stream Semantics
The tracker implements an immutable append-only event stream. Every event is a JSON record with the following fields:
Events are never modified or deleted. Corrections are appended as new events referencing the original. This guarantees a complete, tamper-evident history.
Event Types
Lifecycle Eventsexperiment.createdexperiment.preparingexperiment.runningexperiment.evaluatingexperiment.completedexperiment.failedexperiment.cancelledexperiment.archived
candidate.generatedcandidate.validatedcandidate.evaluatedcandidate.status_changed
benchmark.startedbenchmark.sample_completedbenchmark.finished
error.validation_failederror.evaluation_failederror.merge_failederror.resource_exhausted
resource.gpu_allocatedresource.gpu_releasedresource.memory_peak
Append-Only Guarantee
The tracker storage layer enforces append-only semantics at the API level. There are no update or delete operations. Event streams are partitioned by experiment_id for query efficiency.Query Interface
The ExperimentTracker exposes:Integration
Retention
Event streams are retained according to experiment state:- COMPLETED: retained indefinitely
- FAILED: retained for 90 days, then archived to cold storage
- CANCELLED: retained for 30 days, then archived
- ARCHIVED: moved to cold storage immediately
The ExperimentTracker is the source of truth for experiment state. Other components may cache state for performance, but the tracker record is authoritative in any conflict.