Platform architecture · Windrose Institute
Platform architecture · Windrose Engine

One instrument, three engines, an auditable file spine.

You describe an idea (optionally with data). A simulated population responds, then is calibrated against reality. The platform returns a direction, a ranking, and hypotheses to test — never invented percentages. Every number carries an evidence rung: SIM-RANK · REAL · CALIBRATED.

LIVE — running today PLANNED — this round funds it
§0 · Three engines, one space
Claude
ORCHESTRATOR

Scenario design, live narrator, advisor, and the second oracle in the ensemble.

Centaur / Minitaur-8B
BEHAVIOURAL ORACLE

Simulates a population's propensity to respond — a distribution, not an average.

Engine_v4
REAL PREDICTOR

sklearn / lightgbm: F1 / AUC and the sim→real calibration.

§1 · Layered architecture

The whole system, top to bottom

CLIENTS
Human · browser
External AI agent
another company's software
PLANNED
ACCESS · server/
6-step Creator + Results
flow · simulator · ui · i18n
LIVE
MCP / A2A server
typed epistemic output + signature
PLANNED
Admin panel
processes · logs · Engine · kill
LIVE
Status + /science
status · science
LIVE
ORCHESTRATION
Task queue + run-lock
PLANNED
bloop.runner
the spine, stdlib-only
LIVE
SPINE · 8 stages
s1 ingest → s2 personas → s3 design → s4 simulate → s5 ground → s6 calibrate → s7 model → s8 explain
stages talk through files — resumable, auditable · LIVE
ADAPTERS · foreign venvs
centaur
scenario_spec · centaur_worker · sim_validate
engine
engine_worker
DATA & MEMORY
Artifacts runs/<case>/
SOURCE OF TRUTH
LIVE
Vector memory
TF-IDF cosine + recency/trust
LIVE
Reference data layer
Hofstede · WVS · benchmarks · calibration corpus
PART LIVE
↑ artifacts feed the UI, the MCP output and vector memory ↺ reference data frames s4 & calibrates s6 — real → sim, never the reverse
§3.2 · The instrument loop

Eight stages, from raw file to evidence

S1 · INGEST
Normalize the file.
→ canonical.csv · profile.json
S2 · PERSONAS
Cluster into a population.
→ personas.json · KMeans
S3 · DESIGN
Build the experiment.
→ experiment.json · factorial
S4 · SIMULATE
Minitaur responds.
→ trials.jsonl · effects.json
S5 · GROUND
Blind validation.
→ grounding · sim_validation
S6 · CALIBRATE
Real → sim, never reverse.
→ calibration.json · Engine
S7 · MODEL
Fit the real predictor.
→ evaluation · betas · model_card
S8 · EXPLAIN
Assemble the dashboard.
→ dashboard.html · manifest

Reference data anchors S4 (frame) and S6 (calibration). Artifacts are the contract — modules read them defensively, so a shape change is an honest "—", never a crash.

§5 · Evidence ladder

The rung is always explicit

NONE — no coverage, we degrade to "—"
REAL — on a dimension that has a label
CALIBRATED — WVS / benchmark / flywheel

Every returned run ships this label. The flywheel — real A/B outcomes fed back by users, and in time by agents — is what climbs the ladder for the next run.

§6 · Agent-to-agent contract PLANNED

A typed epistemic output — a bare number can't exist

{
  "rank": 1, "variant": "…", "tier": "strong", "value": null,
  "evidence": {
    "rung": "SIM-RANK", "calibration": "NONE", "scope": "directional",
    "ranking_stability": { "n": 277, "N": 300, "confidence": "HIGH" },
    "scenario_robustness": "N/A", "backtest_rho": 1.0
  },
  "claim_allowed":   ["ranking", "direction", "hypotheses"],
  "claim_forbidden": ["absolute_percentage", "guarantee"]
}

Untrusted caller, safe by construction: once live, output is signed on manifest.hash; input text is data, not instructions; identity + budget per agent; only aggregate rankings leave the building, never individual personas. The external model receives aggregates only.

§7 · Constitution — binding invariants

The rules the platform cannot break

1File artifacts are the source of truth; the database is only an index.
2Calibration is real → sim only, never the reverse.
3"Validation" means only the blind protocol with anonymised segments.
4Simulated data is never in the eval set and never in the vector store.
5Every number carries a REAL / SIM-RANK / CALIBRATED label.
6Versioning: hash(model + prompt + config) in the manifest.
7Only aggregates reach the LLM prompts — never individual records.
8Growth means layers around the core; the spine and adapters stay put.

A new case is a new JSON config — zero case-specific logic. The config is the platform abstraction: dataset, decision, conditions, personas, methodology.