# Normalizer v2.0.1 Spec

## Goal

`v2.0.1` keeps decomposition-first architecture but reduces unnecessary clarification on one-step in-scope accounting queries.

Core target:
- keep schema/scope stability;
- keep deterministic routing in code;
- lower false clarification behavior.

## Key Contract Changes

Schema: `normalized_query_v2_0_1`

Fragment-level fields added:
- `execution_readiness`: `executable | executable_with_soft_assumptions | needs_clarification`
- `clarification_reason`: `string | null`
- `soft_assumption_used`: `period_from_session_context | company_scope_defaulted | problem_scan_mode_enabled` (array)

## Readiness Policy

Policy is applied in code (post-check), not only in prompt:

`decide_fragment_execution_policy(fragment, session_context)`

Rules:
1. `out_of_scope` or `unclear` -> `needs_clarification`.
2. In-scope but business area/route cannot be identified -> `needs_clarification`.
3. In-scope and operationally clear -> `executable` or `executable_with_soft_assumptions`.
4. Missing period does not force clarification if session context provides active period.
5. Scan/review/anomaly/rule-check colloquial requests are executable if accounting area is understandable.

## Global Clarification Rule

`global_notes.needs_clarification = true` only when **all** in-scope fragments are blocked by clarification.

If at least one in-scope fragment is executable, clarification is not global fallback.

## Routing Compatibility

Routing remains deterministic (`routeHintAdapter`), but:
- fragments with `execution_readiness=needs_clarification` get `no_route`;
- soft assumptions do not block routing.

