W-011: recognition refusal_reason now materializes in CognitiveTurnResult.refusal_reason via RECOGNITION_REFUSED enum value. Precedence: recognition wins over generation (earlier-fail boundary). W-012: ChatRuntime.chat() catches InnerLoopExhaustion from generate() and returns a typed refusal ChatResponse with refusal_reason populated, instead of propagating as an unhandled exception. Adds RefusalReason.RECOGNITION_REFUSED to generate/exhaustion.py. Lane SHAs: 7/7 match (demos don't exercise refusal paths — no re-pin). Smoke + cognition suites green. Full suite not run to completion. |
||
|---|---|---|
| .. | ||
| capability | ||
| cognition | ||
| contemplation | ||
| demos | ||
| physics | ||
| __init__.py | ||
| _safe_display.py | ||
| cli.py | ||
| config.py | ||
| epistemic_state.py | ||