Cube Prompt — Iteration Notes for Re-Introduction¶
Archived 2026-06-01 — moved from
docs/research/todocs/archive/in the docs consolidation (ADR-083). Dormant until the cube vector returns to a live generator prompt; kept for the bias data. Current doc: Scenario Dimension Cube (canonical).
Status: Actionable iteration list. Apply these edits when the cube vector returns to a live scenario-generator.ts prompt (offline corpus expansion, BYOM path, or post-latency-fix live use).
Source data: 8 smoke-test generations across all 5 themes (boardroom, frontier, rebuild, court, custom-jazz, reactive-arc, team, underground) at scenario-generator v1.8.0 using the cube vector section in the prompt. Rollback happened at v1.8.1; the cube section was removed but the bias data is preserved here.
Why preserve this: the rollback wasn't because the cube failed — it was because of generation latency. The cube vector emitted cleanly (~90% of axis commitments delivered faithfully in prose). But 5 distinct bias patterns surfaced: the LLM systematically pushed values toward "interesting corners" and away from common-but-correct defaults. Each bias has a specific cause and a specific fix.
How to use: when you re-introduce the cube section to the live prompt, paste in the original section from git history (v1.8.0 of scenario-generator.ts) and apply each of the 5 patches below.
Bias 1 — Symmetric-complete topology under-produced¶
Pattern observed: 0 of 8 smoke-test scenarios tagged informationTopology: symmetric-complete. Real corpus distribution is ~45% symmetric-complete (per the n=20 grid-coverage decompositions).
Hypothesized cause: The cube vector section's "lean toward these unless the scenario specifically tests otherwise" guidance, combined with the LLM's general bias toward "interesting" topology, produced a strong push away from symmetric-complete (which reads as the boring default). The fact that I documented asymmetric topology as a corpus underuse worth fixing probably made the LLM over-correct in the opposite direction.
Fix: Add an explicit note in the cube vector section, after the axis 8 definition:
Note on symmetric-complete: ~45% of real corpus scenarios are symmetric-complete. This is a VALID and OFTEN CORRECT tag — use it when both parties genuinely have the same facts, which most scenarios do. Do not avoid it because asymmetric topologies feel more interesting. Asymmetric is appropriate when the player is positioned as having insider expertise the counterparty lacks (NDA recipient, whistleblower, advisor with privileged knowledge, expert in a domain the counterparty isn't). Otherwise, symmetric-complete is likely the correct tag.
Verification on next smoke-test: Symmetric-complete should appear in ~30-50% of generated scenarios across themes. If it appears in <20%, the bias is still present and the fix needs sharpening.
Bias 2 — Future-generations scope over-applied¶
Pattern observed: 3 of 8 smoke-test scenarios tagged scope: ["institution", "future-generations"] where institution alone was the structurally correct tag. Court scenario (Weight Before Dawn) and reactive-arc (Board's Window) were the clearest over-applications.
Hypothesized cause: Multi-value tagging is explicitly allowed on scope, plus framings like "permanent precedent," "five years out," "for our grandchildren" trigger future-generations associations even when affected parties are all currently-existing people.
Fix: Add an explicit clarification at axis 5's definition:
Future-generations applies ONLY when affected parties include people who DO NOT EXIST YET at decision time. Descendants, future ecosystems, posthumous-impact decisions, constitutional precedents that will govern unborn citizens. Current people facing future hardship (40,000 residents this winter, 600 workers next year, 200 patients over 5 years) is institution + years horizon, NOT future-generations scope. If you find yourself reaching for future-generations because effects are "long-lasting," check axis 3 (horizon) — that's likely the right axis for that property.
Verification: Future-generations should appear only when scenarios involve unborn people. If it shows up in mostly-corporate or mostly-current-people scenarios, the bias persists.
Bias 3 — Full authority over-indexed¶
Pattern observed: 6 of 8 smoke-test scenarios tagged authority: full. Real corpus distribution is ~5% full / ~5% oversight / ~50% collective-vote / ~40% influence-only / 0% none.
Hypothesized cause: The cube vector section's guidance "first sentence must explicitly establish unilateral authority" pushed the LLM to claim full authority for any "You're the X" opening. The LLM interpreted "establish authority" as "claim authority" rather than "accurately tag authority."
Fix: Replace the existing authority guidance with:
Authority tag must reflect organizational reality, not first-sentence framing. A VP of X in a corporate structure with a CEO and board is oversight — they decide subject to review. A committee member voting alongside peers is collective-vote — they have formal vote but share decision. Influence-only is when someone else decides; you advocate but don't vote. Full authority is when nobody can review, override, or veto your call. Most professional roles are oversight or influence-only. Reserve full for: sole proprietors, founders without boards, owners of private institutions, parents over decisions about their own children, dictators / monarchs, individuals making purely personal decisions. If you can name someone in the org who could second-guess the call, it's not full.
Verification: Full should drop to ~10-20% of generated scenarios; collective-vote and influence-only should rise to dominate.
Bias 4 — Partial-recoverable + full reversibility under-produced¶
Pattern observed: 0 of 8 smoke-test scenarios tagged reversibility: full or partial-recoverable. All 8 were partial-permanent (5) or none (3). Real corpus has all four values represented.
Hypothesized cause: The cube vector section emphasized lock-in mechanisms strongly (each option must foreclose alternatives). The LLM interpreted "lock-in required" as "consequence must be irreversible." But reversibility and lock-in are distinct: lock-in is between options at decision moment (picking A forecloses B); reversibility is of the consequence itself (the chosen path's effects can fade, can be mitigated, or are permanent).
Fix: Add a clarifying note at axis 4's definition:
Reversibility is independent of lock-in. A scenario can have a strong lock-in mechanism (picking option A forecloses B, C, D at the decision moment) while having a partial-recoverable consequence (the chosen path itself can be exited later). Example: quitting a job is fully reversible in 6 months — you find another. The lock-in is that you can't simultaneously choose options C and D once you've chosen A. Tag axis 4 by the consequence path, not by option-foreclosure at decision time. Lock-in lives in option descriptions; reversibility lives in this axis.
Verification: Generated scenarios should show all four reversibility values represented across themes; partial-recoverable in particular should appear in career and financial scenarios where exit paths exist.
Bias 5 — Minutes and soft deadlines under-produced¶
Pattern observed: 0 of 8 smoke-test scenarios tagged decisionDeadline: minutes or soft. Distribution was 4 hours / 3 days / 1 weeks — clustered in the comfortable middle.
Hypothesized cause: Forces-choice as default-default + LLM's bias toward "scenarios feel substantive" pushed deadlines toward hours/days (long enough to deliberate, short enough to feel urgent). Minutes feels too compressed for "real" decisions; soft feels like an escape hatch the prompt elsewhere warns against.
Fix: Add explicit examples at axis 2's definition:
Minutes (5s–5min) is a valid deadline mode for snap-deliberation scenarios where the player has time for one mental walk-through before responding. The carousel scenario (60s before gate closes) is minutes-mode. S3 Aaron's secret (90s before silence reads as confirmation) is minutes-mode. These are not "too short to be substantive" — they test reflexive judgment, which is different signal from deliberate judgment. Soft deadlines work for scenarios where no specific external pressure forces timing; internal pressure (your own values accumulating cost, the situation worsening if untouched) can still produce forces-choice default outcome. Don't default to hours/days because they "feel right" for a complex decision — pick the deadline mode the scenario actually has.
Verification: Minutes should appear in 10–20% of generated scenarios; soft in 10–20% as well. The hours/days/weeks zone should compress correspondingly.
Bias 6 — Authority is tagged correctly but prose-rendered ambiguously [PATCHED v1.10.0 2026-05-31]¶
Pattern observed: First CoachJ play of cross-domain experiment (2026-05-31, "The Wind Window", governance-γ): scenario tags authority: full and opens with "You are the acting Director of the Cascadia Regional Emergency Management Agency" — but the cast includes Chief Tannenbaum (fire incident commander). CoachJ's rationale: "if I'm the fire marshal and it's up to me to make these decisions..." — conflating themselves (the Director) with Tannenbaum (a separate role). Conviction landed at 3 ("fairly clear") specifically because "the accountability piece is not clear to me here." The scenario tagged authority correctly; the prose left who-decides ambiguous because a domain-expert cast member could be misread as the decider.
Hypothesized cause: Bias 3 patch ("authority must reflect organizational reality") was applied at the tagging level — pushing the LLM to tag oversight/influence-only/collective-vote where appropriate. But it did not enforce prose-side clarity: when authority: full is tagged AND the cast includes a domain-expert with a name and a role (fire incident commander, lead surgeon, chief engineer, head of legal), the prose can still leave who-decides ambiguous unless explicitly closed.
Fix: Add an authority prose-rendering rule to the cube vector section, after the axis 7 inline note:
When
cubeVector.authority = fullAND the cast block includes a domain-expert character (fire incident commander, lead surgeon, chief engineer, senior compliance officer, named subject-matter authority), the description must contain at least one sentence affirmatively closing out the question of who decides. Specifically: name the expert's role, then name the player's authority over the decision in the same sentence. Example: "Chief Tannenbaum cannot authorize the counter-burn without your signature; Bowdoin can request but cannot impose evacuation without your declaration." This is in addition to the opening "You are X" — opening alone is insufficient when a domain-expert is in the cast, because a reader may conflate the expert's domain authority with the structural decision authority.
Verification: in a smoke test of n≥10, scenarios with authority: full and a domain-expert in cast should contain at least one authority-closing sentence beyond the opening. Player rationales should not reveal "who actually decides here?" confusion.
Bias 7 — Option cost asymmetry across A/B/C/D [PATCHED v1.10.0 2026-05-31]¶
Pattern observed: Same Wind Window play. Options A and D had concrete numeric costs ("~250–320 residents at elevated risk"; "2,400 people who could have stayed home"). Option B's cost was buried in conditional language: "if the next update shows the fire accelerating, you've lost the counter-burn window without acting; the perimeter pre-positioning is what your agency had before the wind shifted." The reader has to infer the worst-case casualty number themselves. CoachJ's choice rationale: "I don't see a huge downside to doing the voluntary advisory other than losing the option to counterburn" — exactly the under-reading the asymmetry produces. Picked B partly because B's cost looked smaller than it was.
Hypothesized cause: Principle 5 ("name the specific worst case") is enforced on the description but not always on each option uniformly. Options that the LLM perceives as "cautious" or "default" get softer cost framings than options framed as "bold" — which biases the choice signal toward the cautious option for the wrong reason (under-stated cost), not the right one (genuine value preference).
Fix: Add to checklist item 6 (lock-in per option):
Each option's lock-in cost must be stated at parallel concreteness. If option A has a numeric worst-case ("~320 residents at elevated risk"), option B's worst-case must be numeric-comparable ("~4,800 residents in town when the fire arrives"). If A names a specific dollar exposure, B does too. The "less bold" options often get softer cost framings; this biases the choice signal because the player reads the soft-framed option as lower-cost, not because they actually weight values that way. Audit each option's lock-in language for parallel concreteness before submitting.
Verification: read each option's lock-in cost sentence in isolation. If A says "~320 lives at risk" and B says "you may not have the right tool when you need it," the asymmetry is present and needs correction.
Suggested re-introduction protocol¶
When the cube vector returns to a live prompt:
- Paste the original v1.8.0 cube vector section from git history into
scenario-generator.ts. - Apply the 5 patches above before re-emitting test prompts.
- Bump version 1.8.1 → 1.9.0 (signals biases-addressed re-introduction).
- Regenerate test prompts and run a fresh smoke test of ≥10 scenarios across all themes.
- Score the new smoke test against this bias list. If all 5 biases are below threshold (per verification criteria above), the re-introduction is clean. If any bias is still present, sharpen the fix and re-test.
Track results in this file under a new section "Re-introduction smoke test n=10" so the iteration history is preserved.
Related¶
docs/research/foundations/scenario-dimension-cube.md— canonical cube doc with axis definitions and corpus findingsdocs/research/scenario-dimension-cube-working.md— iteration history including the original swing log- CHANGELOG entry "Scenario dimension cube — live-prompt integration tested and rolled back" — context for the round-trip
- Git history of
src/lib/ai/scenario-generator.tsat v1.8.0 — the original cube vector section to paste back in