zeph 0.22.3

Lightweight AI agent with hybrid inference, skills-first architecture, and multi-channel I/O
# Nextest configuration for zeph project
# https://nexte.st/book/configuration.html

[profile.default]
# Default profile for local development
# No default filter - run all unit tests
# Integration tests are in separate test binaries (tests/*_integration.rs)
# and can be run explicitly with --test flag or using the ci profile
# Blanket bump from nextest's 100ms default to tolerate process-teardown
# latency under concurrent load (see #5617).
leak-timeout = "500ms"

[[profile.default.overrides]]
# tokio::task::spawn_blocking worker-thread teardown can outlast the default
# leak-timeout under load even though the handle is joined before the test
# returns (false-positive LEAK, see #5425).
filter = 'package(zeph-index) & (test(index_file_spawn_blocking_dedup_path) | test(index_file_with_blocking_spawner))'
leak-timeout = "1s"

[profile.ci]
# CI profile that runs ALL tests including integration tests
# Override with: cargo nextest run --profile ci
default-filter = "all()"
# Integration tests are largely I/O-bound (testcontainers, network).
# Running more threads than vCPUs improves throughput while waiting on containers.
test-threads = 8

[[profile.ci.overrides]]
# Integration tests pull container images and hit transient network issues
# (e.g. Docker Hub rate limits under parallel CI runs). Retry twice with
# backoff before failing the test.
filter = "binary(~integration)"
retries = { backoff = "exponential", count = 2, delay = "10s", jitter = true }

[test-groups.postgres-containers]
# postgres_integration binaries (zeph-db, zeph-index, zeph-memory) each spin up
# their own Postgres testcontainer per test with no shared coordination. At the
# default test-threads = 8, dozens of containers can start concurrently, which
# overloads Docker Desktop and trips testcontainers-rs 0.27.3's startup-timeout
# leak (see #5546/#5547 — that crate version has no Ryuk reaper, so a timed-out
# container is never cleaned up). Capping concurrency here is cheaper than
# annotating ~40 individual tests with #[serial]. `test-threads` is not a valid
# per-override key (nextest silently ignores it there) — a test-group with
# max-threads is the correct mechanism.
max-threads = 2

[[profile.ci.overrides]]
filter = "binary(postgres_integration)"
test-group = "postgres-containers"

[test-groups.qdrant-containers]
# Same failure class as postgres-containers: qdrant_integration and
# document_integration each start their own Qdrant testcontainer per test.
# Uncapped concurrency (test-threads = 8) can overload Docker and surface
# testcontainers-rs 0.27.3 races — observed locally as PortNotExposed when 5
# containers start at once (see also #5546/#5547 for the startup-timeout leak).
max-threads = 2

[[profile.ci.overrides]]
filter = "binary(qdrant_integration) or binary(document_integration)"
test-group = "qdrant-containers"

[profile.ci.junit]
# Store JUnit XML report for CI
path = "target/nextest/ci/junit.xml"

[profile.ci-partition]
# Used by the partitioned test matrix in CI (unit tests only).
# Each shard receives --partition hash:K/8 on the command line.
test-threads = 8
# Blanket bump from nextest's 100ms default to tolerate process-teardown
# latency under concurrent load (see #5617).
leak-timeout = "500ms"

[[profile.ci-partition.overrides]]
# Warn (but don't fail) if any test exceeds 30s — surfaces slow tests early.
filter = "all()"
slow-timeout = { period = "30s" }

[[profile.ci-partition.overrides]]
# tokio::task::spawn_blocking worker-thread teardown can outlast the default
# leak-timeout under load even though the handle is joined before the test
# returns (false-positive LEAK, see #5425).
filter = 'package(zeph-index) & (test(index_file_spawn_blocking_dedup_path) | test(index_file_with_blocking_spawner))'
leak-timeout = "1s"

[profile.ci-partition.junit]
path = "target/nextest/ci/junit.xml"