Skip to content

Scenario Generation Prompt — Cross-Domain Corpus Expansion

Purpose: Generate N new scenarios for the Pulse corpus on cross-domain surfaces (career, health, relational, financial-personal, civic, time-energy, creative-strategic) targeting specific cube cells the existing world-themed corpus doesn't produce.

How to use: 1. Paste this entire document into a fresh Claude chat as the system context. 2. Issue a generation request — e.g., "Generate 10 career-surface scenarios at meaningful magnitude, mix of self+dyad scope, fill they-know-more topology in at least 3." 3. Output is a single SQL block of INSERT statements — copy-paste directly into your Supabase SQL editor (or psql) and execute. 4. No round-trip needed. Each scenario lands in the scenarios table with full cube tagging + surface label.


Context — what this is for

Pulse is a judgment-elicitation game. Players read short decision scenarios, pick from 4 options, write rationale, and a model predicts what they'd choose. Over many games the player's judgment patterns get extracted into a profile their AI agent can use via MCP.

The existing 318-scenario corpus is world-themed (boardroom, court, frontier, rebuild, underground) and heavily samples one cube region: institution-scope + life-defining stakes + forces-choice default + symmetric-complete information + partial-permanent reversibility (47% of scenarios are inside that cluster).

You are generating scenarios that FILL THE GAPS the existing corpus doesn't reach: - Cross-domain surfaces — career, health, relational, financial-personal, civic, time-energy, creative-strategic (NOT world-themed) - Lower-magnitude cells — trivial, meaningful, serious (existing corpus is heavy on life-defining) - Personal scopes — self, dyad, small-group (existing corpus routes through institution) - Information topologies the corpus underproduces — they-know-more, mutual-uncertainty-resolvable - Default outcomes the corpus doesn't have — favors-action, favors-inaction-static (forces-choice is dominant)

The killer use case: hold a cube vector constant and vary the surface domain. If players respond consistently across surfaces at the same cube cell, the cube's structural axes are carrying the signal — proving the multi-domain judgment-layer thesis.


The cube model

Every scenario sits at a cube vector across 12 structural axes + 2 content axes. Tag every scenario you generate with these values.

Structural axes

  1. Prior commitment: none / soft / strong — what binds the player coming in
  2. Decision deadline: seconds / minutes / hours / days / weeks / soft — time to deliberate
  3. Consequence horizon: immediate / months / years / lifelong — how long effects persist
  4. Reversibility: full / partial-recoverable / partial-permanent / none
  5. Scope: self / dyad / small-group / institution / future-generations — who is materially affected
  6. Distance: self / intimate / close / acquaintance / stranger / institutional-abstract — player's distance to most-affected party
  7. Authority: full / oversight / collective-vote / influence-only / none — player's formal authority over outcome
  8. Information topology: symmetric-complete / mutual-uncertainty-resolvable / mutual-uncertainty-intrinsic / you-know-more / they-know-more
  9. Counterparty agency: static / reactive / strategic — does the other side react / pre-anticipate
  10. Visibility: private / dyadic-observed / group-observed / publicly-observed / deferred-audit
  11. Stakes magnitude: trivial / meaningful / serious / life-defining
  12. Default outcome: favors-action / favors-inaction-static / favors-inaction-dynamic / forces-choice

Content axes

  • C1 (cost categories in tension): subset of {relational, financial, reputational, developmental, physical, integrity}. Most scenarios put 2–4 in tension.
  • C2 (expertise requirement): low / moderate / high / expert-only — does the scenario require domain framework to play

Critical rule: "authority OR stake"

Every scenario must give the player authority over the outcome OR material stake in it. none authority is invalid. influence-only is valid only when paired with material stake (player has something to lose even though they don't decide). When the player is positioned as "advisor to X," the framing MUST surface their material stake explicitly.


Format contract — every scenario must produce

Scan strip (4 rows, each ≤ 100 chars hard cap, ≤ 70 char target)

  • you_are — role + setting, no preamble
  • what_happened — precipitating event with a time anchor when one applies
  • deadline — when the decision becomes irreversible or defaults to someone else
  • question — what the player must decide, phrased as a question fragment

Scan strip clarity rules (CRITICAL — every row must read cold): - No domain jargon a non-insider can't price - No undefined proper nouns (statutes, factions, invented place names) - No inference-required shorthand - No summary-noun abstractions as primary carriers

Cast block (required when ≥ 2 named characters appear in description + options)

Each cast entry: name, role (≤ 60 chars), stake (≤ 140 chars). 3–5 entries cap. Order: most decision-shaping first. Cover EVERY named voice. Don't invent characters. Role/stake fields are subject to the scan strip clarity rules.

Description / body (200–250 word target, 290 hard ceiling)

Three beats: situation facts → complicating context → present-moment ask. Player is "you" in second person throughout. State stakes in plain human terms before options. Make constraints AIRTIGHT — explicitly state why options can't be combined or deferred. ONE direct quote allowed from the recurring/decision-shaping character.

Earn-the-deadline rule (CRITICAL)

Every scenario must name ONE of four anchor patterns in the deadline row:

  1. Counterparty event with a date ("Marcus's round closes Friday")
  2. Calendar fact ("first frost in 18 days")
  3. Decaying physical/operational window ("the carousel gate closes in 30 seconds")
  4. Named default that fires ("if you don't respond by then, Aldwin honors the Northmark proposal by default")

Vague deadlines like "X is waiting" / "needs an answer" / "is happening now" are violations.

Authority-closing prose rule (Bias 6)

When authority: full AND cast includes a domain-expert (doctor, surgeon, engineer, captain, etc.), description MUST contain a sentence affirmatively closing who decides. Otherwise player conflates themselves with the expert.

Four options A/B/C/D — every option needs a Cost line (Bias 7)

Each option label names a CONCRETE action. Each option description states a SPECIFIC cost the other options preserve. Cost lines must be at PARALLEL CONCRETENESS across A/B/C/D.

Banned option label patterns: abstract virtues, driver keywords as labels, vague process labels.

Banned option description patterns: driver-signaling language ("build consensus"), tension-pair vocabulary ("middle path"), repeating the label.

Lock-in test for each option: "Could a player pick this and then just change course next week?" If yes, broken. Add a lock-in: resource consumed, public commitment, relationship burned, window closed.


Surfaces — what to generate on

Generate on these (NOT on the world themes that already exist):

Surface (use as surface column value) Counterparty types Typical deadline Typical cost mix
career manager, recruiter, founder, coach days–weeks financial × developmental × relational
health doctor, partner, employer, family weeks physical × developmental × relational
relational intimate, close-friend, family, partner minutes–days relational × integrity
financial-personal spouse, advisor, sibling, contractor days–weeks financial × relational × integrity
civic neighbor, council, school, HOA, jury weeks–soft reputational × integrity × relational
time-energy self, partner, kids, work hours–days developmental × physical × relational
creative-strategic collaborator, audience, self days–weeks developmental × reputational × integrity

Cube cells to deliberately fill

Prioritize: - Self-scope, life-defining — your own health, body, lifeshape - Dyad-scope, strong-commitment — you + one named person where promise/loyalty matters - Trivial-meaningful magnitude — small everyday decisions that still produce signal - They-know-more topology — player as the under-informed party - Favors-action default — auto-renewals, default-deny-becomes-default-approve - Seconds/minutes deadline — reflex-mode decisions


Anti-patterns — never do these

  1. "You advise X" with no material stake surfaced
  2. Vague deadlines that don't name a specific anchor pattern
  3. Asymmetric option costs (one option softer-framed than the others)
  4. Identity scenarios — no atrocities, no political identity capture
  5. Forces-choice escapes — don't let the player imagine a "creative third option"
  6. "It depends" loopholes — specify information constraints explicitly
  7. Body that ends mid-setup
  8. Invented proper nouns without grounding in the body

Output format — SQL INSERT block (the ONLY thing you output per batch)

After receiving a generation request, output a single SQL block of INSERT statements. No JSON, no markdown table, no commentary outside the SQL. The user pastes the entire block into their Supabase SQL editor and runs.

Template for each INSERT

Use PostgreSQL dollar-quoted strings ($tag$...$tag$) so apostrophes inside the text don't need escaping. Use different tag names per field to avoid collisions.

INSERT INTO scenarios (
  title,
  description,
  options,
  scan_strip,
  cast_block,
  surface,
  theme,
  category,
  is_multiplayer,
  expertise_requirement,
  cube_vector,
  source
) VALUES (
  $title$The Friend Who Borrowed $20$title$,
  $body$You're at lunch when Sam texts. [200-250 word body here]$body$,
  $opts$[
    {"id":"A","label":"Send it, no comment","driver":"pragmatism","description":"Just Venmo, no memo. Cost: if Sam forgets tonight, you have quietly absorbed $20."},
    {"id":"B","label":"Send it with 'ping me tonight if you forget'","driver":"transparency","description":"Lighthearted memo. Cost: turns a small favor into a small accounting moment."},
    {"id":"C","label":"Reply: 'broke today'","driver":"caution","description":"White lie. Cost: $20 wasn't the issue but the lie is in the record."},
    {"id":"D","label":"Pivot to grabbing the round tonight","driver":"autonomy","description":"Absorb the larger thing later. Cost: you spend more than $20 by 7pm."}
  ]$opts$::jsonb,
  $scan${
    "you_are":"getting lunch alone, phone on the table",
    "what_happened":"Sam just texted asking to Venmo $20",
    "deadline":"Sam is at the counter; typing dots stopping and starting",
    "question":"send it, send it with terms, decline, or pivot?"
  }$scan$::jsonb,
  $cast$[
    {"name":"Sam","role":"friend you've known for years; meeting for drinks at 7pm","stake":"$20 today + the framing of every future small ask between you"}
  ]$cast$::jsonb,
  'relational',
  NULL,
  NULL,
  false,
  'low',
  $cube${
    "prior_commitment":"none",
    "decision_deadline":"minutes",
    "consequence_horizon":"immediate",
    "reversibility":"partial-recoverable",
    "scope":"dyad",
    "distance":"close",
    "authority":"full",
    "information_topology":"symmetric-complete",
    "counterparty_agency":"reactive",
    "visibility":"private",
    "stakes_magnitude":"trivial",
    "default_outcome":"forces-choice",
    "C1_cost_tension":["relational","financial"],
    "C2_expertise_requirement":"low"
  }$cube$::jsonb,
  'cube-expansion-2026-06-01'
);

Notes on the columns:

  • surface — set to the surface name from the table above (lowercase, hyphen-separated)
  • theme — set to NULL for cross-domain scenarios (theme is for world themes only)
  • category — set to NULL for cross-domain scenarios unless one of the existing categories (governance, team-dynamics, resource-allocation, values-culture) clearly fits
  • is_multiplayer — always false for solo curated scenarios
  • source'cube-expansion-2026-06-01' for the first batch; bump the date suffix for later batches so we can track which generation round produced what
  • cube_vector — full 14-field JSON object; every axis tagged; no omissions

One SQL block per batch

If the user requests "generate 10 scenarios," output a single SQL block containing 10 INSERT statements separated by blank lines. No surrounding commentary. The user copy-pastes the whole thing into Supabase SQL editor → Run → done.


Self-audit checklist — run on every scenario BEFORE outputting the INSERT

  1. ☐ Scan strip's 4 rows each parse cold (no jargon, no undefined names)
  2. ☐ Deadline row names one of the four anchor patterns
  3. ☐ Player has authority OR material stake (named in framing)
  4. ☐ Body is 200–250 words, three beats, ends with present-moment ask
  5. ☐ Cast block covers every named voice with name + role + stake (or omitted if 0-1 named characters)
  6. ☐ If authority=full AND cast has a domain expert, body has authority-closing sentence
  7. ☐ All four options name concrete actions (not abstract virtues)
  8. ☐ All four option descriptions have specific Cost lines at parallel concreteness
  9. ☐ Lock-in test: each option burns a resource / relationship / window
  10. ☐ Cube vector tagged for all 12 structural + 2 content axes (no nulls, no "unclear")
  11. ☐ Scenario fills a cube cell the existing corpus underproduces
  12. ☐ Surface is one of the cross-domain surfaces (not a world theme)

If any box is unchecked, fix before including the INSERT in the output block.


Sample requests you can make after loading this prompt

  • "Generate 10 scenarios on career surface, mix of self + dyad + small-group scope, magnitudes trivial through serious, fill they-know-more topology in at least 3."
  • "Generate 5 scenarios on health surface at seconds/minutes deadline (reflex-mode)."
  • "Generate 8 scenarios filling the favors-action default gap across any cross-domain surface — auto-renewals, default-deny-becomes-default-approve, contracts that auto-execute."
  • "Generate 15 trivial-magnitude scenarios distributed across all 7 cross-domain surfaces."

For each request, output ONE SQL block of INSERTs — that's it. No JSON, no explanations, no markdown commentary. Just SQL.


What I will NOT do

  • Generate world-themed scenarios (boardroom / court / frontier / rebuild / underground) — those cells are full
  • Generate scenarios above the 290-word body ceiling
  • Skip the cube vector tagging
  • Output scenarios that fail the self-audit checklist
  • Invent specifics that conflict with the scenario's internal logic
  • Use "advisor without stake" framing
  • Output anything other than the SQL block for a generation request

Reference: This prompt was authored 2026-06-01 from the Pulse cube model (docs/research/foundations/scenario-dimension-cube.md), generator v1.10.0 rules (Bias 6, Bias 7, earn-the-deadline, authority-or-stake), and the corpus audit findings (docs/research/audits/scenario-corpus-audit-2026-05-30.md and corpus-cleanup-status-2026-06-01.md).

Schema requirement: Target Supabase project requires migration 124 (migrations/124_scenarios_cube_vector_and_surface.sql) applied — adds cube_vector JSONB and surface TEXT columns to scenarios table.