Spoke
forecasting
Decision theory as service APIs — , / , aligned-chance trees.
Character
Problem
External. People decisions get made on gut feel, dressed up with bar charts. The few decision-analysis tools that exist (Lumina, @RISK, etc.) live in finance, not HR. They're priced for finance.
Internal. You're often the one in the meeting who knows the decision is bigger than the analysis. You can't model the uncertainty. The decision happens anyway.
Philosophical. Decision theory — Monte Carlo simulation, Value of Information (EVPI / EVSI), aligned-chance decision trees — has textbook solutions. It should be table stakes for analytical decision support.
Guide
Abstract
Background. Workforce transformation and research bets consume multimillion-dollar budgets yet rarely expose decision-analysis rigor comparable to capital projects—inviting preventable regret and misplaced study commissioning.
Methodology. Alternatives enumerate chance forks with aligned probabilities across options. Monte Carlo emits seeded draws across canonical distributions plus empirical masses; payoff expressions evaluate algebraically inside the simulator. EVPI / EVSI routes combine baseline expectation, perfect-information ceilings, and aligned-chance tree reductions so shared uncertainties stay coherent.
Scope. Probabilistic layer only—finance NPV detail and statutory compliance integrate via sibling spokes (calculus, wage-compliance).
Contribution. Stateless MCP + HTTP contracts let CI/CD and conversational agents probe study value before spend commits.
Evidence / Provenance. Raiffa–Schlaifer VOI lineage cited in forecasting PAT memos with regression suites guarding numeric stability inside contracts/types.ts-driven handlers.
Plan
- 01
Define a decision model
forecasting.decision-models.createpersists a decision tree: alternatives, chance nodes, outcomes. - 02
Run a Monte Carlo simulation
forecasting.monte-carlo.run— seeded reproducible draws over named distributions (Normal, Lognormal, Triangular, Uniform, Beta, Discrete-empirical), closed-form expression evaluation. - 03
Compute VOI
forecasting.voi.computereturns baseline EV, perfect-information EV, EVPI, and discrete EVSI on aligned-chance trees. The number that tells you whether the study is worth $200K before you commission it.
Call to Action
Direct. Try the API. Run a simulation free.
Transitional. Read the VOI methodology (Phase 3). See the live demo at /decision-wizard.
Spoke I/O (visual language v1)
Every toolbox spoke shares the same abstract choreography: typed inputs on the left, distilled verbs in the center, typed outputs on the right, and (when relevant) cross-spoke HTTP composition along the bottom rail. Source package: @people-analytics-toolbox/spoke-illustrations.
Try it now
Copy this curl. Paste in any terminal. POST endpoint — set TOOLBOX_SERVICE_KEY in your shell first.
forecasting.voi.compute
POSTSERVICE KEY REQUIRED
Compute baseline EV, perfect-information EV, EVPI on an aligned-chance decision tree. Alternatives share a sharedUncertaintyId; branch probabilities are aligned.
curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/voi/compute" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
-d '{
"tenantId": "demo-tenant",
"alternatives": [
{
"id": "ship-now",
"branches": [
{ "sharedUncertaintyId": "market", "branchId": "good", "probability": 0.6, "outcomeValue": 100 },
{ "sharedUncertaintyId": "market", "branchId": "bad", "probability": 0.4, "outcomeValue": -20 }
]
},
{
"id": "wait",
"branches": [
{ "sharedUncertaintyId": "market", "branchId": "good", "probability": 0.6, "outcomeValue": 80 },
{ "sharedUncertaintyId": "market", "branchId": "bad", "probability": 0.4, "outcomeValue": 30 }
]
}
]
}'Vendor the contract
The Zod contract is the source of truth. Vendor a copy into your consumer app — you keep it; we don't break it underneath you. Re-vendor when the version bumps.
// In your consumer app:
import { z } from "zod";
// Vendor a copy of these contracts from the toolbox repo at:
// src/spokes/forecasting/contracts/types.ts
import {
MonteCarloSpecSchema,
MonteCarloRunResponseSchema,
RegisterDecisionModelRequestSchema,
DecisionModelRecordSchema,
VOIComputeRequestSchema,
VOIComputeResponseSchema,
CONTRACT_VERSION,
} from "./vendored/forecasting/types";
// Then call the toolbox over HTTP or MCP.
// See docs/EXTERNAL-CONSUMERS.md for onboarding.Source path: src/spokes/forecasting/contracts/types.ts · GitHub
Failure
Another bad org change made without modeling. Another study commissioned that wouldn't change any decision regardless of outcome.
Success
Defensible decision support. "Is this study worth the spend" answered analytically. People decisions modeled with the rigor finance decisions get.