ВЫПОЛНЕНИЕ
Проекция и прохождение
RuntimeBinding связывает SemanticMap с текущим состоянием; ThinkingMapTraversal проверяет локальные ходы и выдаёт проверяемый результат.
Рабочая последовательность
- 1.Загрузить структуру области.
- 2.Связать состояние, роль и текущие данные.
- 3.Спроецировать только локальные варианты.
- 4.Проверить шлюзы, TTL и границы циклов.
- 5.Вернуть типизированный результат.
semantic_map + runtime_binding
↓
local decision slice
↓
deterministic guard check
↓
typed traversal outcomeТри двери, а не одна
«Выполнить шаг» — это не один вызов. Их три, с разной степенью свободы. step() — широкий, рабочий путь: может вернуть 6 из 10 объявленных исходов. attempt_transition(), который реально совершает уже объявленный ход, гораздо уже: только ABSTAIN, COLLECT_EVIDENCE или CONTINUE. attempt_bridge() — переход между контекстами — самый узкий из всех: сначала проверяется контракт добросовестности (лицензия на замену против уровня риска), и только если он выполнен, состояние меняется. Без лицензии при высоком риске результат — ESCALATE, а не тихая ошибка.
Что модель на самом деле читает
Модель получает не рассказ, а slice(): предложенный ход, решение шлюза, доступные и недостающие данные, роли, булево can_fire, точные причины, почему ход невозможен («blockers»), и контракт ответа, который модель должна заполнить сама — утверждение, границы, основание, что можно говорить, чего нельзя, для кого. Система считает структурную часть. Модель добавляет только языковую.
Деталь, важная если реально читать JSON: gate.decision — это не имя enum в Python, а его значение — GateDecision.ABSTAIN доходит до модели строкой "insufficient", DEGRADE — "partial". Модель всегда читает сериализованную строку, никогда внутреннее имя.