Model — scenario seats-vs-outcomes v1.0.0, engine v1.0.0

How every number is produced

The engine is a set of pure functions with no randomness, no hidden state and no language model. Given the same inputs it always produces the same outputs, which is why an exported run can be replayed and checked.

Company parameters

Opening position for both companies. Editable in content/scenarios/relayworks-taskpilot.ts.
ParameterRelayWorksTaskPilot
Cash$3,000,000$1,000,000
Annual price, small$2,400$1,800
Annual price, enterprise$24,000$18,000
Variable cost per quarter, small$120$150
Variable cost per quarter, enterprise$1,200$1,500
Fixed operating cash cost per quarter$350,000$180,000
reliability0.900.70
automation0.250.80
integration0.850.30
reach0.800.25
Delivery capacity per quarter3 effort units2 effort units
Starting small teams40080
Starting enterprise teams1205

Traits are dimensionless scenario parameters bounded to [0,1], not empirical company scores. An initial reliability of 0.90 is a preference proxy, not a claim that 90% of real tasks succeed. Outcomes pricing is a fixed annualised bundle at the segment's assumed usage, so per-seat and per-task prices are only comparable after that normalisation.

Segments

Demand is fixed at 1000 teams. Segment expansion is a later extension, not an automatic revenue bonus.
ParameterSmall teamsEnterprise teams
Teams800200
reliability weight0.200.35
automation weight0.400.15
integration weight0.100.30
reach weight0.100.05
price penalty weight0.200.15
Reference annual price$2,400$24,000
Relationship bonus0.080.18
Quarterly reconsideration rate20%8%

Outside-option utility 0.20. Choice temperature 0.20. Prices may not fall below 50% of the role's original list price.

Decision catalog

One commitment per quarter. The order of this table is the opponent's final tie-break.
CommitmentCashEffortDelayEffect
Improve reliability$150,00011 quarterReliability +0.08, capped at 1.
Build enterprise integrations$200,00021 quarterIntegration +0.15, capped at 1.
Develop autonomous delivery$300,00022 quartersAutomation +0.25, reliability -0.05, variable cost +15%. Two quarters of effort.
Expand distribution$150,00011 quarterReach +0.15, capped at 1.
Reduce price$00immediateBoth segment prices fall 15% from their current values.
Change to outcome bundles$100,00011 quarterPrices reset to 80% of original, automation +0.10, enterprise integration -0.05.
Commission customer research$50,0000immediateReveals next quarter's scheduled environment change.
Hold and preserve cash$00immediateNo change. Unspent cash stays cash.

Outcome-bundle conversion is allowed once per company and already applies to TaskPilot at the start, so that role cannot buy it. Research is the round's primary commitment, creating a real opportunity cost. Projects completing after Q4 remain in the ledger as committed work with no terminal benefit.

Resolution order

prepareRound(previousState, environment) performs the first two steps and freezes the result. Both sides then choose from that same frozen state. resolveRound(preparedState, playerAction, opponentAction) performs the rest and returns the next state plus an ordered event ledger.

  1. Activate previously completed projects.
  2. Reveal the scheduled public environment event, exactly once.
  3. Accept both commitments simultaneously, judged against the start-of-decision information.
  4. Deduct investment cash.
  5. Apply immediate actions (price cut, research).
  6. Recalculate traits and prices against their bounds.
  7. Allocate customer transitions.
  8. Recognise quarterly revenue and operating cash costs.
  9. Mark negative ending cash as funding required.
  10. Create the explanation records you see in the ledger.

Formulas and parameters

Each ledger line in the game links to one of these ids.

F-UTIL Option utility

utility(j) = w_reliability x reliability(j) + w_automation x automation(j) + w_integration x integration(j) + w_reach x reach(j) - w_price x annualPrice(j) / referencePrice, plus the segment relationship bonus when j is the cohort's current supplier.

The outside option uses a fixed utility value and never receives a relationship bonus.

F-SOFTMAX Choice probability

share(j) = exp((utility(j) - maxUtility) / temperature) / sum over options of the same expression. The maximum logit is subtracted before exponentiating so the arithmetic stays stable.

F-ALLOC Cohort reallocation

For each segment and each origin cohort (incumbent, challenger, outside): retain (1 - reconsiderationRate) x cohort, and distribute reconsiderationRate x cohort across all three options using F-SOFTMAX. Segment totals are conserved. No customers are added afterwards.

F-REV Quarterly revenue

revenue = ending active customers x annual team price / 4.

A disclosed simplifying convention. Contracts, ramp, churn timing and partial-quarter recognition are not modelled.

F-VC Quarterly variable cost

variableCost = sum over segments of ending active customers x variable cost per customer per quarter.

F-OCF Operating cash flow

operatingCashFlow = revenue - variableCost - fixedCost.

This is not EBITDA and not audited profit. It is a simplified cash measure for the exercise.

F-CASH Ending cash

endingCash = openingCash - investmentOutlays + operatingCashFlow. Investments are one-off cash outlays, never recurring expenses.

P-SEGMENTS Segments and reconsideration

800 small teams and 200 enterprise teams. 20% of each small-team cohort and 8% of each enterprise cohort reconsider their supplier per quarter. Relationship bonus 0.08 for small teams and 0.18 for enterprise teams. Outside utility 0.20. Choice temperature 0.20.

P-WEIGHTS Segment buying weights

Small teams: reliability 0.20, automation 0.40, integration 0.10, reach 0.10, price penalty 0.20, reference price $2,400. Enterprise teams: reliability 0.35, automation 0.15, integration 0.30, reach 0.05, price penalty 0.15, reference price $24,000.

P-TRAITS Trait bounds

Reliability, automation, integration and reach are dimensionless scenario parameters clamped to [0,1]. They are preference proxies, not measurements.

P-PRICEFLOOR Price floor

No price may fall below 50% of the role's original list price. A price cut that would breach the floor is held at the floor, and the cut becomes unavailable once both segments sit on it.

P-VARCOST Variable cost changes

Autonomous delivery raises variable cost 15% at activation. The commodity-models event cuts both companies' variable costs 20%, once.

P-TIMING Activation and effort

A commitment with a one-quarter delay reserves effort in the quarter it is made and activates at the start of the next quarter. A two-quarter project reserves effort in two consecutive quarters and activates in the third. Capacity does not carry over, and a commitment that cannot reserve future effort is rejected. Projects due after the final quarter stay in the ledger as committed work with no terminal benefit.

P-EVENTS Environment events

Each preset schedules at most one event. It is revealed and applied exactly once, at the start of the quarter it fires, before either side chooses. The effect then persists and is never re-applied. Research bought in a quarter reveals the next quarter's scheduled change.

P-INSOLVENCY Funding required

Negative ending cash is marked as funding required. There is no automatic financing. Paid commitments are then blocked; price changes and hold remain available.

Environment presets

Foundation

Segment weights, costs and the outside option stay unchanged for all four quarters. Use this to read the economics without interference.

No events. Nothing changes for four quarters.

Reliability shock

At some point in the game, a publicised failure moves 0.10 of buying weight from automation to reliability in both segments. The quarter is hidden until it is revealed or researched.

  • Weight shift of 0.10 from automation to reliability in both segments.

Commodity models

At some point in the game, cheap general models cut both companies' delivery costs by 20% and make the outside option more attractive. The quarter is hidden until it is revealed or researched.

  • Both companies' variable costs fall 20%.
  • Outside-option utility rises from 0.20 to 0.30.

The quarter an event fires is deliberately not listed here. It becomes visible when the event happens, or a quarter early if you commission research.

The opponent

The P0 opponent is deliberately simple, and it is important that you know how simple. Each quarter it:

  1. enumerates its legal actions in the catalog order above;
  2. forecasts up to 2 quarters for each one, assuming you hold and no further public events occur;
  3. picks the action with the highest forecast ending cash;
  4. breaks ties on higher ending customer count, and then on catalog order.

The look-ahead is clipped to the quarters that remain. The opponent commits from the same information snapshot as you: it is handed a public snapshot with your research and the hidden event schedule stripped out, so it cannot read your unlocked action or see what is coming. It has no memory, no model of you, and no notion of long-term positioning. Beating it is not evidence that a strategy is good.

Rewind, branching and role reversal

Rewinding a quarter creates a new run from that pre-decision snapshot. Earlier decisions and the external event sequence are preserved, the original run is left untouched, and the new run records the original as its parent. The opponent policy is recomputed from the branched state rather than replaying its old moves.

Switching sides starts a fresh game from the original opening state and environment, with your complete recorded action sequence driving the other company. Those actions are replayed when legal. When one becomes illegal the script holds and states why; it is never silently upgraded to a stronger move. That session is labelled a fixed-opponent comparison. Outcomes are only comparable within the same scenario, and there is no universal strategy score.

Explanations

Every explanation in this build is generated from the engine's own event ledger by the rules on this page. There is no AI narration endpoint, no API key and no network call, so there is no narration failure that could interrupt play. Optional generated dialogue is a later phase; it would sit behind a server adapter, would never be able to write to game state, and the rule-based text here would remain the fallback.

Limitations

  • Every company, price, cost, trait and event in this exercise is a fictional design assumption. None of it is a measurement of a real market or a prediction about a real company.
  • Demand is fixed. There are 1,000 teams for all four quarters, so nobody can win by growing the market.
  • Revenue is recognised as ending customers times annual price divided by four. Contracts, ramp-up, billing terms and partial-quarter recognition do not exist here.
  • Customer choice is a softmax over four trait terms and one price term. Real buying behaviour has switching costs, procurement cycles, brand and channel effects that this model does not represent.
  • Traits are single numbers on a [0,1] scale. A reliability of 0.90 is a preference weight, not a claim that 90% of tasks succeed.
  • There is no financing, no hiring, no acquisitions, no product portfolio and no free-text strategy. One commitment per quarter, from a fixed catalog of eight.
  • The opponent is a two-quarter greedy cash maximiser that assumes you hold. It is deliberately simple and is easy to out-think; beating it is not evidence of a good strategy.
  • Four quarters is far too short for most of these investments to compound. Read the ordering of outcomes, not the magnitudes.
  • No playtest data, usage statistics or user research informs any number here.