tailtriage-core
tailtriage-core is the framework-agnostic capture foundation for tailtriage.
Use it when you want explicit request lifecycle instrumentation and bounded JSON artifacts without controller, Axum, or Tokio runtime-sampler APIs unless you add them separately.
What this crate does
tailtriage-core owns capture-side lifecycle semantics:
- request admission
- queue/stage/inflight instrumentation
- explicit request completion
- bounded in-memory retention
- JSON run artifact writing
The artifact produced here is analyzed by tailtriage-cli.
Crate selection
Use tailtriage-core when you want the smallest framework-agnostic capture surface.
Use tailtriage when you want the recommended default entry point: an aggregator/re-export crate with optional integrations behind features.
Installation
Quick start
use Tailtriage;
Request lifecycle
begin_request(...) / begin_request_with(...) returns StartedRequest with:
started.handlefor queue/stage/inflight instrumentationstarted.completionfor explicit finish
use ;
async
Two easy-to-miss helpers
For infallible async work, StageTimer::await_value(...) avoids a dummy Result:
# use Tailtriage;
# async
When queue depth is known at enqueue time, QueueTimer::with_depth_at_start(...) records it directly:
# use Tailtriage;
# async
Lifecycle contract
queue(...),stage(...), andinflight(...)do not finish requests.- Every admitted request must be finished exactly once.
- Dropping a completion token does not auto-finish.
- Non-strict lifecycle:
shutdown()writes the artifact and records unfinished-request warnings/metadata. strict_lifecycle(true): unfinished requests causeshutdown()to return an error and no artifact is written.
Finalization timestamps:
- Active
snapshot()output is not finalized (metadata.finalized_at_unix_ms == None). shutdown()writes final artifacts with both:metadata.finished_at_unix_msset to shutdown timemetadata.finalized_at_unix_msset to that same timestamp
- Older artifacts may deserialize with
metadata.finalized_at_unix_ms == None. - When
finalized_at_unix_msis present, prefer that field as the finalization signal;finished_at_unix_msremains for backward compatibility.
Capture modes
Modes change retention defaults only. They do not change lifecycle semantics and do not auto-start runtime sampling.
CaptureMode::LightCaptureMode::Investigation
Override limits with:
capture_limits(...)(full override)capture_limits_override(...)(field-level override)
What this crate does not do
This crate does not provide:
- repeated arm/disarm controller windows
- Tokio runtime sampling
- Axum middleware/extractors
- analysis/report generation
Use sibling crates for those surfaces: tailtriage-controller, tailtriage-tokio, tailtriage-axum, and tailtriage-cli.