Roles · City Event Engine

The engine as a staff of jobs. Each role = a charter (inherited prompt) + a scoped set of operators (verbs) + the tables it touches. Mutations go through operators.py only — never JSON, never raw SQL.  ← map · tables

The roles

The funnel — who owns each stage

The handoff is a query, not a meeting: a lead with a source attached but not yet built is Max's worklist — SELECT * FROM leads_inbox WHERE kind='source' AND stage!='built'. Then the Rater scores whatever Max made flow.

Operators & verbs — by person

Operator / verbTable(s) touchedState change
verify_target / build_source give venue.status='verified' its only real writer; set_source_status is the honest downgrade (a source yielding no events goes back to none — never a false built). The Rater's verbs aren't operators.py functions yet (the scorer is to be ported from library/scorer.py); they're the actions the role takes against event_scores + weights.json.

Inherited prompts (the charters)