lct-hack/scenarios/fire-apartment-l2.yaml
Ivan Gerasimov 6b2c96bab6 lct-03 и lct-04: журнал сессий и библиотека сценариев
БД: 11 таблиц, первая миграция. Группы и связь trainee → group заложены
сразу, даже пустыми — размечать накопленные сессии задним числом значит
делать лишнюю миграцию. Номер попытки живёт в сессии, отдельной таблицы
попыток нет: дельта считается запросом по (trainee_id, scenario_id).

Сценарии: строгая схема — опечатка в имени поля падает на старте, а не
игнорируется молча. ground_truth собирается кодом, попытка задать
incident_type, dds или required_facts в YAML отвергается: иначе генератор
разведёт факты и эталон и курсанта оштрафуют за правильный ответ. Руками
задаются только нормализованные адрес и число пострадавших — из фразы
«улица Ленина, 14, квартира 47, 5-й этаж» кодом «улица Ленина, 14»
не достать.

GET /api/scenarios/{id} больше не отдаёт чек-лист. Это содержимое
подсказок: отдать его целиком значит выдать в контрольном режиме то,
чего там быть не должно, в обход выдачи по одному пункту.

Тесты базы поднимают свой движок на каждый тест: глобальный кэшируется
и привязывается к первому событийному циклу.
2026-09-15 20:10:05 +03:00

66 lines
2.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Первый сценарий — тот самый, на котором замыкается вертикальный срез
# (docs/hackathon/CASE-DECISION.md: в первый день один сценарий целиком).
# Формат: docs/spec/SCENARIO-FORMAT.md
id: fire-apartment-l2
title: "Пожар в квартире, паникующий заявитель"
type: fire
level: L2
topics: [fires]
modes: [training, exam, self]
extends: checklists/fire.yaml
persona:
base: panic
arc:
- { stage: registration, mood: panic }
- { stage: interview, mood: panic }
- { stage: dispatch, mood: worried }
background:
loop: fire_crackle.mp3
gain_db: -18
first_line: "Алло! Алло! Помогите! Горим! А-а-а!"
facts:
- id: f_address
value: "улица Ленина, 14, квартира 47, 5-й этаж"
reveal_on: { question: q_address }
- id: f_what_burns
value: "горит балкон, дым пошёл в квартиру"
reveal_on: { question: q_what_burns }
- id: f_people
value: "в квартире жена и ребёнок, не выходят"
reveal_on: { question: q_people }
- id: f_smoke
value: "дым идёт в подъезд, на площадке ничего не видно"
reveal_on: { question: q_smoke }
- id: f_gas
value: "плита газовая, вентиль в кухне, перекрыть не успел"
reveal_on: { question: q_gas }
checklist:
- { id: q_address, fact: f_address }
- { id: q_what_burns, fact: f_what_burns }
- { id: q_people, fact: f_people }
- { id: q_smoke, fact: f_smoke }
- { id: q_gas, fact: f_gas }
required_fields:
- address
- floor
- incident_type
- dds
- victims_count
- description
ground_truth:
# incident_type, dds и required_facts выводит загрузчик — писать их здесь запрещено.
# Руками задаются только нормализованные ожидания, которые из текста факта
# кодом не достать.
address: "улица Ленина, 14"
victims: 2
tree:
pregenerated: false