Each market (each tenant) has a culture pack. It is the single source of what “good” means there; the judge,
the simulator and the prompt update all read it. The files in lab/rl/culture/*.yaml are samples: each is
seeded into the workspace’s registry the first time it is seen, and from then on the registry copy is what
every reader uses and what the Environment tab edits. An edit survives a rollout (it used to be written
back into the file on the pod, which the next deploy put back).
the dimensions a reply is scored on (for Saudi real estate: dialect fidelity, respect and adab, factual accuracy, progress to a viewing, family and decision-makers, prayer and calendar awareness, compliance and safety), each with a weight, cue phrases that are rewarded or penalised, and the guidance Train adds to the prompt when reviewers tick that reason
guardrails
must and never: things a reply is penalised for regardless of the rest
personas
the simulated customers the Arena plays: name, city, mood, hidden need, a staged script for the mock
v1 prompt
the baseline policy every tenant starts from, with one seed example
The pack is edited in the registry, from the Environment tab except where noted (the words reports use and
the calendar go through the API for now):
Rubric and guardrails: weights, cues and guidance in the rubric editor, or Draft from your playbooks:
paste scripts, policies and screenshots and a draft rubric comes back for you to review before saving. After
saving, press Rescore all calls so existing scores follow the new rubric; scenarios regroup on the next
Regroup.
The world itself: name, language, dialect, currency and the market summary.
v1 prompt and examples: what the first version of a new world starts from, and what a reset comes back
to. It is policy material, so it sits under Policies (What v1 starts from), not under Environment.
Versions already made keep their own prompt; to write a version by hand, use New version from this one
under a version in Policies.
Customers: the simulated personas, each with a mood, a starting trust, what they say first, hidden
needs and what a good call gets them to. Used where no real call exists.
Download as YAML gives the pack back in the shape the samples ship in, so a world can live in a repo and be
reviewed, and Back to the shipped sample restores the file’s copy (calls, versions and picks stay). The
same over the API: PUT /api/rl/packs/{id} with any of name, summary, language, dialect,
currency, calendar, baseline_system, personas, seed_examples, words; PUT .../rubric;
GET .../export; POST .../reseed.
In a YAML sample, a description: whose value contains a colon followed by a space must be quoted, or the
pack fails to load and every reply scores zero.
Either create a world in the dashboard, or copy an existing sample under lab/rl/culture/, change the rubric
and personas, and add a tenant in lab/rl/tenants.yaml pointing at it; the new file is seeded on the next
deploy. The webhook accepts that tenant’s app id from then on. See Call logs.