# RouteTransition

The path, raw input, candidate list, and ambient Layers for one route update.

## Signatures

```ts
export interface RouteTransition {
    readonly path: string;
    readonly input: unknown;
    readonly candidates: ReadonlyArray<CompiledEntry>;
    readonly layers?: ReadonlyArray<AnyLayer>;
}
```

## Why

Candidate selection and parameter decoding can be executed independently from path lookup.

## Ownership and lifetime

Callers construct this immutable transition value for one `transition` call. The executor reads it
during that call; any selected entry, decoded parameters, Layers, layouts, or catch handlers are then
retained by their dedicated scoped managers rather than by this record itself.

## Property: candidates

The ordered executable candidates selected by path lookup.

## Property: candidates: Why

These candidates already share the matcher path selected by path lookup. Their schemas and guards
fall through in registration order without rerunning path-shape selection.

## Property: candidates: Ownership and lifetime

The executor borrows this array for the transition. A selected entry identity remains current until
another route replaces it, but the executor does not copy or own the candidate array.

## Property: input

The raw path and query parameter record decoded by each candidate.

## Property: input: Why

Each candidate applies its own Effect Schema before a handler observes values.

## Property: input: Ownership and lifetime

Candidate schemas inspect this value during the transition. Only the decoded parameters for the
selected candidate are placed in the active `RefSubject`; the raw input is not retained.

## Property: layers

Additional Effect Layers applied to this transition.

## Property: layers: Why

Ambient route dependencies can participate in the same prepare, commit, rollback, and release protocol.

## Property: layers: Ownership and lifetime

The Layer manager compares these values by identity. Selected Layer identities and their child Scopes
remain active until a later transition removes them or the executor's root Scope closes.

## Property: path

The current pathname and search string being transitioned.

## Property: path: Why

Typed errors and candidate selection retain the exact location that produced them.

## Property: path: Ownership and lifetime

The executor reads this string while selecting candidates and reporting failures. It does not retain
the string after the transition completes.
