Files
praxis/server
Praxis CI be3df525d8 feat(P01-03-01,P01-03-02): Pydantic scenario schema + refund YAML
server/scenarios/schema.py defines the typed model: Scenario (id, path,
market, language, title, difficulty, failure_mode, persona, setup,
success_criteria, common_mistakes, branches[], debrief) + Branch (id,
trigger.learner_signals, outcome, failure_mode, debrief_focus) +
ScenarioDebrief (model=deepseek-v4-flash:cloud, mode=no_think, D-020).
failure_mode field present per D-009. server/scenarios/loader.py loads
YAML → Pydantic, validates at load time, raises typed ValidationError on
bad input.

scenarios/customer_service_refund_ca_v01.yaml — the v0.1 Canada Customer
Service scenario (D-010): 'Angry customer requesting refund on a damaged
product', one branch point (accept_resolution vs escalate),
failure_mode=escalates_unresolved, success criteria, common mistakes,
debrief config. Matches the RESEARCH.md example.

5 unit tests pass (valid parse, invalid raises typed error, branch
outcome Literal, branch_by_id, real YAML load). load() returns a valid
Scenario with both branches.

---ci---
phase: 1
milestone: v0.1
plan: 03
task: 03-01,03-02
status: execute
persona: data-engineer
requirements:
  covered: [REQ-SCEN-01, REQ-SCEN-FMT-01]
---/ci---
2026-08-01 13:10:00 +00:00
..