330 lines
13 KiB
YAML
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"
|