# core/validation — AGENTS.md

## Purpose

Layered validation pipeline: validates workflow graphs (structure, cycles, reachability), session state, semantic rules, JSON schema conformance, and artifact payloads before any state-mutating operation proceeds.

## Ownership

CORREX kernel team. Hard Invariant #7 applies here: LLM outputs are untrusted until this pipeline approves them.

## Local Contracts

- `ValidationPipeline` — top-level entry point; runs all registered validators in sequence and collects `ValidationReport`.
- `Validator` — interface for a single validator. Returns `ValidationOutcome` (pass/warn/fail) with `ValidationIssue` list.
- Built-in validators:
  - `GraphValidator` — validates `WorkflowGraph`: reachability, cycle detection (via `core:transitions` `CycleExtractor`), missing tool references.
  - `SemanticValidator` — applies `SemanticRule`s to workflow/stage definitions.
  - `SessionValidator` — validates session preconditions before launch.
  - `TransitionValidator` — validates transition edge definitions.
  - `ArtifactPayloadValidator` — validates artifact payloads against `JsonSchema`.
  - `JsonSchemaValidator` — JSON schema conformance check.
  - `SceneValidator` — validates scene definitions.
- `ValidationReport` / `ValidationIssue` / `ValidationOutcome` / `ValidationSeverity` / `ValidationSection` / `ValidationLocation` — report structure types.
- `ValidationContext` — context passed to all validators (session, graph, config).
- `ValidationRiskStats` — risk statistics derived from validation results, consumed by `core:risk`.
- `ApprovalRequest` / `ApprovalTrigger` — approval-related types used during validation-triggered approval flows.
- `CyclePolicy` / `CyclePolicyBinding` / `CycleSignature` / `CycleSignatureFactory` / `CycleExitRule` — cycle policy enforcement: detects recurring cycle patterns and applies policy (warn/fail/allow).
- `RiskSummary` — local re-export of risk summary type used in validation output.
- `MissingToolRule` / `SemanticRule` — built-in semantic rule implementations.

## Work Guidance

- Add new validators by implementing `Validator` and registering in `ValidationPipeline`. Do not add validation logic directly to `SessionOrchestrator` or other callers.
- `ValidationPipeline` must be run before any inference call processes its output (Hard Invariant #7).
- `CyclePolicy` is the mechanism for allowing controlled cycles in workflows; do not bypass it.
- `GraphValidator` calls `CycleExtractor` from `core:transitions` — this is the one legitimate cross-core reference; it is structural, not domain logic.

## Verification

```bash
./gradlew :core:validation:test --rerun-tasks
```

Tests in `testing/deterministic/` (GraphValidatorTest) and `testing/contracts/` (ContextSnapshotTest).

## Child DOX Index

No child AGENTS.md (leaf module).
