# testing/integration

## Purpose

End-to-end integration tests that wire multiple core modules together without live LLM or network. Covers: `SessionOrchestrator` full flows, tool-call gate, freestyle approval gate, clarification loop, steering preemption, graph reroute, artifact injection, workspace-scoped tool registry, validation pipeline integration, critique calibration wiring, session rehydration, repo-map reuse, and subagent runner seam.

## Ownership

Tests in this submodule. Production modules exercised: `core:events`, `core:sessions`, `core:transitions`, `core:validation`, `core:approvals`, `core:context`, `core:inference`, `core:kernel`, `core:journal`, `core:risk`, `core:tools`, `core:toolintent`, `core:artifacts`, `core:artifacts-store`, `core:router`, `core:config`, `infrastructure:persistence`, `infrastructure:tools`, `infrastructure:tools:filesystem`, `apps:server`.

## Local Contracts

- Tests use mock inference (`MockInferenceProvider` from `testing:fixtures`) — no live LLM.
- `apps:server` is imported for Ktor wiring tests only; no external HTTP calls.
- Two-plane validation (Plane 2 / `core:toolintent`) must be exercised by at least one test here — `ToolCallGateTest` covers this.

## Work Guidance

- Suspend tests use `runBlocking { ... }` or `kotlinx-coroutines-test`.
- These are the slowest tests; run targeted with `:testing:integration:test --tests "ClassName"` during development.

## Verification

```
./gradlew :testing:integration:test --rerun-tasks
```

## Child DOX Index

No child AGENTS.md (leaf module).
