SCENARIOS / SC-011 / ARTISAN MARKET
SC-011 Marketplace / Data Gen

Artisan Market

A craft marketplace where every string field is generated by faker.

Async Tick FSM
SELLER PRODUCT PRODUCT "Ada Voss" SKU-7421 COURIER CUSTOMER ORDER "Reed" DELIVER
SC-011 / SCHEMATICMarketplace / Data Gen
Clock tick
Update Asynchronous
Strings faker-generated
Entities 5 machine types
Integrity Full referential
OVERVIEW

A marketplace built to show off realistic data generation. Sellers open shops and list products and a courier; customers place orders that move through delivery. Every textual field — owner and shop names, emails, phone numbers, addresses, SKUs, product titles, card types and currencies — is sampled from a faker generator as each entity spawns, so the tables look like genuine business records rather than placeholders.

The fastest way to see how lifelike Mock Machines output can be. Point an agent or a BI tool at the exports and you get plausible CRM, catalogue and fulfilment tables with full referential integrity — names that match emails, orders that resolve to customers — without any real personal data.

TRAITS
Async
Independent, event-driven timelines
Tick
Discrete fixed-step time
FSM
Entities are finite-state machines
SCHEMA

Linked tables with guaranteed referential integrity.

TABLECOLUMNSDESCRIPTION
seller ID, owner, shop, email, phone, site, region, geo, current_state One row per seller: owner and shop name, contact details and location — all faker-generated.
product ID, sku, title, category, color, blurb, seller_id, current_state One row per product listing: SKU, title, category and the seller that listed it.
customer ID, name, handle, email, ship_to, phone, current_state One row per customer: name, handle, email and shipping address.
order ID, ref, card, last4, currency, customer_id, current_state One row per order: reference, card type, last-four and currency, with the customer reference.
courier ID, name, phone, vehicle, plate, depot, seller_id, current_state One row per courier: name, vehicle and plate, dispatched by a seller.
LIVE API

Generated REST endpoints. Also exposed as MCP tools.

POST /scenarios/artisan-market/experiments Seed a new market
POST /scenarios/artisan-market/experiments/{eid}/run Advance the market N turns
GET /scenarios/artisan-market/experiments/{eid}/entities/product Browse the generated catalogue
GET /scenarios/artisan-market/experiments/{eid}/events Append-only event log
GET /scenarios/artisan-market/experiments/{eid}/dataset Download the exported dataset
SEMANTIC LAYER

OSI-compatible definition, emitted with the dataset.

# artisan-market.osi.yaml — emitted automatically
semantic_model:
  name: "artisan-market"
  source: "duckdb://artisan-market.db"
  entities:
    - name: seller
      primary_key: id
  dimensions:
    - name: state
      type: categorical
    - name: t
      type: time
  measures:
    - name: row_count
      agg: count
    - name: active
      agg: sum
      filter: "state = 'ACTIVE'"