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. |
||
|---|---|---|
| .. | ||
| binding_graph | ||
| __init__.py | ||
| admissibility.py | ||
| articulation.py | ||
| articulation_legality.py | ||
| attention.py | ||
| bridge_trace.py | ||
| dialogue.py | ||
| discourse_planner.py | ||
| exhaustion.py | ||
| graph_constraint.py | ||
| graph_planner.py | ||
| grounding_accessors.py | ||
| intent.py | ||
| intent_bridge.py | ||
| intent_ratifier.py | ||
| math_candidate_graph.py | ||
| math_candidate_parser.py | ||
| math_parser.py | ||
| math_problem_graph.py | ||
| math_realizer.py | ||
| math_roundtrip.py | ||
| math_solver.py | ||
| math_symbolic_equivalence.py | ||
| math_symbolic_normalizer.py | ||
| math_verifier.py | ||
| math_versor_arithmetic.py | ||
| morphology.py | ||
| ood_surface_generator.py | ||
| operators.py | ||
| perturbation_suite.py | ||
| proposition.py | ||
| realizer.py | ||
| realizer_guard.py | ||
| result.py | ||
| rotor_admissibility.py | ||
| salience.py | ||
| semantic_templates.py | ||
| stream.py | ||
| surface.py | ||
| templates.py | ||