Files

330 lines
13 KiB
YAML

# Scenario reel - template lisible + promptable.
#
# Usage rapide:
# 1) Edite surtout `prompt_input`.
# 2) Si tu changes `steps_runtime_order`, garde la syntaxe canonique:
# <event_type>:<event_name>-><target_step_id>
# 3) Les ids de scenes/actions/packs doivent exister dans `data/story/**`.
prompt_input:
meta:
request_name: "A_COMPLETER"
owner: "A_COMPLETER"
board_target: "freenove_esp32s3"
objective: "A_COMPLETER"
boot_policy:
startup_mode: "story" # story | media_manager
persist_after_validation: true
rollback_command_required: true
qr_rule:
enabled: true
scene_id: "SCENE_QR_DETECTOR"
expected_payload: "DETECTION CODE QR comportant WIN avec la camera"
match_mode: "exact" # exact | prefix | contains
case_insensitive: true
success_events:
- "serial:QR_OK"
- "unlock:UNLOCK_QR"
failure_event: "QR_INVALID"
media_hub:
enabled: true
hub_step_id: "STEP_MEDIA_MANAGER"
hub_scene_id: "SCENE_MEDIA_MANAGER"
entries: []
led_policy:
strict_rgb: true
defaults:
ws2812: 1
led_auto: 1
rgb: "18/45/95"
scene_overrides:
- scene_id: "SCENE_LA_DETECTOR"
rgb: "32/224/170"
custom_steps:
# Format cible:
# - step_id: "STEP_X"
# scene: "SCENE_X"
# audio_pack: ""
# actions: ["ACTION_TRACE_STEP"]
# transitions:
# - "serial:BTN_NEXT->STEP_Y"
- "A_COMPLETER"
serial_test_plan:
- "SC_LOAD DEFAULT"
- "SCENE_GOTO SCENE_QR_DETECTOR"
- "QR_SIM A_COMPLETER"
- "SC_EVENT espnow ACK_WIN1"
- "SC_EVENT button ANY"
- "BOOT_MODE_STATUS"
- "RESET"
acceptance_criteria:
- "Pas de PANIC|ASSERT|ABORT|REBOOT|rst:"
- "Transitions scene avec ACK ... ok=1"
- "Ownership camera/mic/amp coherent"
- "LED WS2812 conformes policy + RGB"
- "Boot mode media_manager persistant apres QR valide"
notes:
- "Decrire ici contraintes gameplay reelles."
- "Ajouter exceptions/aliases scene si necessaire."
scene_screen_audio_catalog_all:
# Catalogue complet pour avancer scene par scene (ecran + son).
# `default_audio_pack_id` peut etre vide si scene muette.
# `runtime_step_ids` reference les steps qui utilisent cette scene dans DEFAULT.
- scene_id: "SCENE_U_SON_PROTO"
screen_json: "data/story/screens/SCENE_U_SON_PROTO.json"
default_audio_pack_id: "PACK_BOOT_RADIO"
runtime_step_ids: ["SCENE_U_SON_PROTO"]
- scene_id: "SCENE_LA_DETECTOR"
screen_json: "data/story/screens/SCENE_LA_DETECTOR.json"
default_audio_pack_id: "PACK_SONAR_HINT"
runtime_step_ids: ["SCENE_LA_DETECTOR"]
- scene_id: "SCENE_WIN_ETAPE1"
screen_json: "data/story/screens/SCENE_WIN_ETAPE1.json"
default_audio_pack_id: "PACK_CONFIRM_WIN_ETAPE1"
runtime_step_ids: ["RTC_ESP_ETAPE1", "WIN_ETAPE1"]
- scene_id: "SCENE_WARNING"
screen_json: "data/story/screens/SCENE_WARNING.json"
default_audio_pack_id: "PACK_BOOT_RADIO"
runtime_step_ids: ["STEP_WARNING"]
- scene_id: "SCENE_LEFOU_DETECTOR"
screen_json: "data/story/screens/SCENE_LEFOU_DETECTOR.json"
default_audio_pack_id: "PACK_SONAR_HINT"
runtime_step_ids: ["SCENE_LEFOU_DETECTOR"]
- scene_id: "SCENE_WIN_ETAPE2"
screen_json: "data/story/screens/SCENE_WIN_ETAPE2.json"
default_audio_pack_id: "PACK_CONFIRM_WIN_ETAPE2"
runtime_step_ids: ["RTC_ESP_ETAPE2"]
- scene_id: "SCENE_QR_DETECTOR"
screen_json: "data/story/screens/SCENE_QR_DETECTOR.json"
default_audio_pack_id: ""
runtime_step_ids: ["SCENE_QR_DETECTOR"]
- scene_id: "SCENE_FINAL_WIN"
screen_json: "data/story/screens/SCENE_FINAL_WIN.json"
default_audio_pack_id: ""
runtime_step_ids: ["SCENE_FINAL_WIN"]
- scene_id: "SCENE_MEDIA_MANAGER"
screen_json: "data/story/screens/SCENE_MEDIA_MANAGER.json"
default_audio_pack_id: ""
runtime_step_ids: ["STEP_MEDIA_MANAGER"]
audio_pack_catalog_all:
- pack_id: "PACK_BOOT_RADIO"
json: "data/story/audio/PACK_BOOT_RADIO.json"
default_file: "/music/boot_radio.mp3"
used_by_steps: ["SCENE_U_SON_PROTO", "STEP_WARNING"]
- pack_id: "PACK_SONAR_HINT"
json: "data/story/audio/PACK_SONAR_HINT.json"
default_file: "/music/sonar_hint.mp3"
used_by_steps: ["SCENE_LA_DETECTOR", "SCENE_LEFOU_DETECTOR"]
- pack_id: "PACK_CONFIRM_WIN_ETAPE1"
json: "data/story/audio/PACK_CONFIRM_WIN_ETAPE1.json"
default_file: "/music/win.mp3"
used_by_steps: ["RTC_ESP_ETAPE1"]
- pack_id: "PACK_CONFIRM_WIN_ETAPE2"
json: "data/story/audio/PACK_CONFIRM_WIN_ETAPE2.json"
default_file: "/music/win.mp3"
used_by_steps: ["RTC_ESP_ETAPE2"]
- pack_id: "PACK_WIN"
json: "data/story/audio/PACK_WIN.json"
default_file: "/music/win.mp3"
used_by_steps: ["WIN_ETAPE1"]
- pack_id: "PACK_MORSE_HINT"
json: "data/story/audio/PACK_MORSE_HINT.json"
default_file: "/music/morse_hint.mp3"
used_by_steps: []
scene_action_trigger_catalog_all:
# Catalogue complet actions + triggers par scene.
# `default_entry_triggers` = evenements qui menent a la scene.
# `default_exit_triggers` = evenements qui quittent la scene.
- scene_id: "SCENE_U_SON_PROTO"
default_actions: ["ACTION_TRACE_STEP", "ACTION_HW_LED_ALERT"]
default_entry_triggers: ["on_boot", "audio_done:AUDIO_DONE"]
default_exit_triggers: ["button:ANY", "serial:FORCE_ETAPE2"]
runtime_step_ids: ["SCENE_U_SON_PROTO"]
- scene_id: "SCENE_LA_DETECTOR"
default_actions: ["ACTION_TRACE_STEP", "ACTION_QUEUE_SONAR"]
default_entry_triggers: ["button:ANY", "serial:FORCE_ETAPE2"]
default_exit_triggers: ["serial:BTN_NEXT", "unlock:UNLOCK", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE1", "timer:ETAPE2_DUE"]
runtime_step_ids: ["SCENE_LA_DETECTOR"]
- scene_id: "SCENE_WIN_ETAPE1"
default_actions: ["ACTION_TRACE_STEP", "ACTION_HW_LED_ALERT", "ACTION_ESP_NOW_SEND_ETAPE1", "ACTION_QUEUE_SONAR"]
default_entry_triggers: ["serial:BTN_NEXT", "unlock:UNLOCK", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE1", "espnow:ACK_WIN1", "serial:FORCE_DONE"]
default_exit_triggers: ["serial:BTN_NEXT", "serial:FORCE_DONE", "espnow:ACK_WARNING"]
runtime_step_ids: ["RTC_ESP_ETAPE1", "WIN_ETAPE1"]
- scene_id: "SCENE_WARNING"
default_actions: ["ACTION_TRACE_STEP", "ACTION_HW_LED_ALERT"]
default_entry_triggers: ["serial:BTN_NEXT", "serial:FORCE_DONE", "espnow:ACK_WARNING"]
default_exit_triggers: ["button:ANY", "serial:FORCE_ETAPE2", "audio_done:AUDIO_DONE"]
runtime_step_ids: ["STEP_WARNING"]
- scene_id: "SCENE_LEFOU_DETECTOR"
default_actions: ["ACTION_TRACE_STEP", "ACTION_QUEUE_SONAR"]
default_entry_triggers: ["button:ANY", "serial:FORCE_ETAPE2"]
default_exit_triggers: ["serial:BTN_NEXT", "unlock:UNLOCK", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE2", "timer:ETAPE2_DUE"]
runtime_step_ids: ["SCENE_LEFOU_DETECTOR"]
- scene_id: "SCENE_WIN_ETAPE2"
default_actions: ["ACTION_TRACE_STEP", "ACTION_HW_LED_ALERT", "ACTION_ESP_NOW_SEND_ETAPE2", "ACTION_QUEUE_SONAR"]
default_entry_triggers: ["serial:BTN_NEXT", "unlock:UNLOCK", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE2"]
default_exit_triggers: ["espnow:ACK_WIN2", "serial:FORCE_DONE"]
runtime_step_ids: ["RTC_ESP_ETAPE2"]
- scene_id: "SCENE_QR_DETECTOR"
default_actions: ["ACTION_TRACE_STEP", "ACTION_QR_CODE_SCANNER_START"]
default_entry_triggers: ["espnow:ACK_WIN2", "serial:FORCE_DONE"]
default_exit_triggers: ["serial:QR_OK", "unlock:UNLOCK_QR", "serial:BTN_NEXT", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE2"]
runtime_step_ids: ["SCENE_QR_DETECTOR"]
- scene_id: "SCENE_FINAL_WIN"
default_actions: ["ACTION_TRACE_STEP", "ACTION_WINNER"]
default_entry_triggers: ["serial:QR_OK", "unlock:UNLOCK_QR", "serial:BTN_NEXT", "action:ACTION_FORCE_ETAPE2", "serial:FORCE_WIN_ETAPE2"]
default_exit_triggers: ["timer:WIN_DUE", "serial:BTN_NEXT", "unlock:UNLOCK", "action:FORCE_WIN_ETAPE2", "serial:FORCE_WIN_ETAPE2"]
runtime_step_ids: ["SCENE_FINAL_WIN"]
- scene_id: "SCENE_MEDIA_MANAGER"
default_actions: ["ACTION_TRACE_STEP", "ACTION_SET_BOOT_MEDIA_MANAGER"]
default_entry_triggers: ["timer:WIN_DUE", "serial:BTN_NEXT", "unlock:UNLOCK", "action:FORCE_WIN_ETAPE2", "serial:FORCE_WIN_ETAPE2", "boot_mode:media_manager"]
default_exit_triggers: []
runtime_step_ids: ["STEP_MEDIA_MANAGER"]
scenario:
id: "DEFAULT"
version: 2
initial_step: "SCENE_U_SON_PROTO"
app_bindings:
- "APP_AUDIO"
- "APP_SCREEN"
- "APP_GATE"
- "APP_WIFI"
- "APP_ESPNOW"
- "APP_QR_UNLOCK"
steps_runtime_order:
- step_id: "SCENE_U_SON_PROTO"
screen_scene_id: "SCENE_U_SON_PROTO"
audio_pack_id: "PACK_BOOT_RADIO"
actions:
- "ACTION_TRACE_STEP"
- "ACTION_HW_LED_ALERT"
transitions:
- "audio_done:AUDIO_DONE->SCENE_U_SON_PROTO"
- "button:ANY->SCENE_LA_DETECTOR"
- "serial:FORCE_ETAPE2->SCENE_LA_DETECTOR"
- step_id: "SCENE_LA_DETECTOR"
screen_scene_id: "SCENE_LA_DETECTOR"
audio_pack_id: ""
actions:
- "ACTION_TRACE_STEP"
- "ACTION_QUEUE_SONAR"
transitions:
- "timer:ETAPE2_DUE->SCENE_U_SON_PROTO"
- "serial:BTN_NEXT->RTC_ESP_ETAPE1"
- "unlock:UNLOCK->RTC_ESP_ETAPE1"
- "action:ACTION_FORCE_ETAPE2->RTC_ESP_ETAPE1"
- "serial:FORCE_WIN_ETAPE1->RTC_ESP_ETAPE1"
- step_id: "RTC_ESP_ETAPE1"
screen_scene_id: "SCENE_WIN_ETAPE1"
audio_pack_id: "PACK_CONFIRM_WIN_ETAPE1"
actions:
- "ACTION_TRACE_STEP"
- "ACTION_HW_LED_ALERT"
- "ACTION_ESP_NOW_SEND_ETAPE1"
- "ACTION_QUEUE_SONAR"
transitions:
- "espnow:ACK_WIN1->WIN_ETAPE1"
- "serial:FORCE_DONE->WIN_ETAPE1"
- step_id: "WIN_ETAPE1"
screen_scene_id: "SCENE_WIN_ETAPE1"
audio_pack_id: "PACK_WIN"
actions:
- "ACTION_TRACE_STEP"
- "ACTION_HW_LED_ALERT"
transitions:
- "serial:BTN_NEXT->STEP_WARNING"
- "serial:FORCE_DONE->STEP_WARNING"
- "espnow:ACK_WARNING->STEP_WARNING"
- step_id: "STEP_WARNING"
screen_scene_id: "SCENE_WARNING"
audio_pack_id: "PACK_BOOT_RADIO"
actions:
- "ACTION_TRACE_STEP"
- "ACTION_HW_LED_ALERT"
transitions:
- "audio_done:AUDIO_DONE->STEP_WARNING"
- "button:ANY->SCENE_LEFOU_DETECTOR"
- "serial:FORCE_ETAPE2->SCENE_LEFOU_DETECTOR"
- step_id: "SCENE_LEFOU_DETECTOR"
screen_scene_id: "SCENE_LEFOU_DETECTOR"
audio_pack_id: ""
actions:
- "ACTION_TRACE_STEP"
- "ACTION_QUEUE_SONAR"
transitions:
- "timer:ETAPE2_DUE->STEP_WARNING"
- "serial:BTN_NEXT->RTC_ESP_ETAPE2"
- "unlock:UNLOCK->RTC_ESP_ETAPE2"
- "action:ACTION_FORCE_ETAPE2->RTC_ESP_ETAPE2"
- "serial:FORCE_WIN_ETAPE2->RTC_ESP_ETAPE2"
- step_id: "RTC_ESP_ETAPE2"
screen_scene_id: "SCENE_WIN_ETAPE2"
audio_pack_id: "PACK_CONFIRM_WIN_ETAPE2"
actions:
- "ACTION_TRACE_STEP"
- "ACTION_HW_LED_ALERT"
- "ACTION_ESP_NOW_SEND_ETAPE2"
- "ACTION_QUEUE_SONAR"
transitions:
- "espnow:ACK_WIN2->SCENE_QR_DETECTOR"
- "serial:FORCE_DONE->SCENE_QR_DETECTOR"
- step_id: "SCENE_QR_DETECTOR"
screen_scene_id: "SCENE_QR_DETECTOR"
audio_pack_id: ""
actions:
- "ACTION_TRACE_STEP"
- "ACTION_QR_CODE_SCANNER_START"
transitions:
- "serial:QR_OK->SCENE_FINAL_WIN"
- "unlock:UNLOCK_QR->SCENE_FINAL_WIN"
- "serial:BTN_NEXT->SCENE_FINAL_WIN"
- "action:ACTION_FORCE_ETAPE2->SCENE_FINAL_WIN"
- "serial:FORCE_WIN_ETAPE2->SCENE_FINAL_WIN"
- step_id: "SCENE_FINAL_WIN"
screen_scene_id: "SCENE_FINAL_WIN"
audio_pack_id: ""
actions:
- "ACTION_TRACE_STEP"
- "ACTION_WINNER"
transitions:
- "timer:WIN_DUE->STEP_MEDIA_MANAGER"
- "serial:BTN_NEXT->STEP_MEDIA_MANAGER"
- "unlock:UNLOCK->STEP_MEDIA_MANAGER"
- "action:FORCE_WIN_ETAPE2->STEP_MEDIA_MANAGER"
- "serial:FORCE_WIN_ETAPE2->STEP_MEDIA_MANAGER"
- step_id: "STEP_MEDIA_MANAGER"
screen_scene_id: "SCENE_MEDIA_MANAGER"
audio_pack_id: ""
actions:
- "ACTION_TRACE_STEP"
- "ACTION_SET_BOOT_MEDIA_MANAGER"
transitions: []
current_firmware_snapshot:
source_to_update_files:
- "game/scenarios/default_unlock_win_etape2.yaml"
- "docs/protocols/story_specs/scenarios/default_unlock_win_etape2.yaml"
- "data/story/scenarios/DEFAULT.json"