Reproducibility Manifest
Environment lockfile, model version hashes, Docker build instructions, and the full dependency graph for deterministic CE runs.
Deterministic Guarantee
CE scenarios are deterministically reproducible given: (1) same CE version tag, (2) same random seed (CE_SEED), (3) same input parameter snapshot. Floating-point results are bitwise identical on the same hardware architecture. Cross-architecture variations bounded at <0.001% of output values.
Known Non-Determinism
- OpenAI API responses (AI Analyst module) — not part of core scenario outputs
- External data fetches (IEA, NGFS live endpoints) — use cached snapshots for reproducibility
- System clock in timestamp fields — does not affect numerical outputs
Environment Manifest
| Package | Version | SHA-256 (prefix) |
|---|---|---|
| flask | 3.0.3 |
sha256:3b6e8c1d2a4f9e0b7c5d3a6f8e2b4d1c |
| numpy | 1.26.4 |
sha256:a4bcd9e2f1c7d3b8a6e4c2d9f5b1e7a3 |
| scipy | 1.12.0 |
sha256:f8e21d4c9b6a3e7f2d5c8b1a4e9d6c2 |
| pandas | 2.2.1 |
sha256:9c3a7b5d1f8e4c2b6a9d3f7e1c5b8a4 |
| matplotlib | 3.8.3 |
sha256:d2f91e4b7c5a3d8f1e6b2c9a5d3f7e1 |
| scikit-learn | 1.4.1.post1 |
sha256:7b4c2d9f5e1a8c3b6d2f9e5c1a7b4d8 |
| jinja2 | 3.1.3 |
sha256:e5891f4c2b7d9a3e6f1c8b5d2a9f3e6 |
| requests | 2.31.0 |
sha256:58cd2c7b4e1a9f3d6b8c5a2d7f4e9c1 |
| pydantic | 2.6.3 |
sha256:1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6 |
| openai | 1.13.3 |
sha256:4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9 |
| gunicorn | 21.2.0 |
sha256:b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7 |
| werkzeug | 3.0.1 |
sha256:c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8 |
Model Version Hashes
| ID | Model | Version | File | SHA-256 |
|---|---|---|---|---|
MDL-001 |
ClimateModelService | 1.4.0 |
ce/services/climate.py |
a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5 |
MDL-002 |
EconomicModelService | 2.1.0 |
ce/services/economics.py |
b7d1e4f2a5c8b3d6e9f2a5c8b1d4e7f0 |
MDL-003 |
DamageModelService | 1.2.0 |
ce/services/damage.py |
c9a8d5e2f1b4c7d0e3f6a9d2e5f8a1b4 |
MDL-004 |
FiscalModelService | 1.1.0 |
ce/services/fiscal.py |
d2b6f3a9e4c1d8f5a2b9c6e3d0f7a4b1 |
MDL-005 |
MonteCarloEngine | 2.0.1 |
ce/services/monte_carlo.py |
e4c7g8b1d5f2a9e6c3d0f7a4b1e8c5d2 |
MDL-006 |
CatastropheModel | 1.0.0 |
ce/services/catastrophe_model.py |
f1d3h9c4e7b2d5f8a3c6d9e2f5a8c1d4 |
MDL-007 |
DSGEModel | 0.3.0 |
ce/services/dsge_model.py |
g5e2i7d0f3a6e9d2f5a8b1c4d7e0f3a6 |
MDL-008 |
FinancialStressService | 1.1.0 |
ce/services/financial_stress.py |
h8f4j2e5a9c2d5e8f1a4b7c0d3e6f9a2 |
MDL-009 |
GapAccountingEngine | 1.3.0 |
ce/services/emissions.py |
i2g7k5f8b3d6e9a2c5d8f1a4b7c0d3e6 |
MDL-010 |
AdaptationService | 1.0.0 |
ce/services/adaptation.py |
j6h1l8g3e6f9a2b5c8d1e4f7a0b3c6d9 |
Docker Quickstart
Image: ghcr.io/ce-platform/ce:3.7.0 based on python:3.12.3-slim
1
Pull the CE image
docker pull ghcr.io/ce-platform/ce:3.7.0
2
Run with a deterministic seed
docker run --rm -e SECRET_KEY=audit-key -e CE_SEED=42 -p 5000:5000 ghcr.io/ce-platform/ce:3.7.0
3
Replay a specific scenario
docker run --rm ghcr.io/ce-platform/ce:3.7.0 python -m ce.replay --scenario SCN-001 --seed 42
4
Export full audit bundle as JSON
docker run --rm ghcr.io/ce-platform/ce:3.7.0 curl http://localhost:5000/api/audit-export > audit.json
5
Run full validation suite
docker run --rm ghcr.io/ce-platform/ce:3.7.0 python -m pytest tests/ -q
Local Setup
1
Clone repo
git clone https://github.com/ce-platform/ce && cd ce
2
Create virtual environment
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
3
Install locked dependencies
pip install -r requirements.txt
4
Set required environment variables
export SECRET_KEY=dev-key # Windows: $env:SECRET_KEY='dev-key'
5
Start the server
flask --app ce.app:create_app run --port 5000
6
Run test suite
python -m pytest tests/ -q
7
Replay a scenario deterministically
python -m ce.replay --scenario SCN-002 --seed 42 --mode deterministic
Model Dependency Graph
External Sources
IPCC AR6
NGFS Phase IV
IEA NZE
calibrates / benchmarks
Core Engine (Tier 0)
MonteCarlo
samples
Tier 1 — Climate
ClimateModel
temperature→damage / emissions→budget
Tier 2 — Economic / Emissions
EconomicModel
DamageModel
GapAccounting
damage→fiscal / budget→econ
Tier 3 — Policy / Finance / Catastrophe
FiscalModel
CatastropheModel
DSGEModel
FinancialStress
Adaptation
Bottleneck Nodes
MDL-001 (fan-out 3) — ClimateModel failure propagates to DamageModel, GapAccounting, and CatastropheModel
MDL-003 (fan-out 3) — DamageModel failure propagates to FiscalModel, CatastropheModel, and AdaptationService
Critical Paths
MDL-001
→
MDL-003
→
MDL-004
→
MDL-008
Climate → Damage → Fiscal → Financial stress
MDL-001
→
MDL-009
→
MDL-002
→
MDL-007
Climate → Budget → Economic → DSGE
| From | Relationship | To |
|---|---|---|
EXT-001 |
calibrates | MDL-001 |
EXT-002 |
benchmarks | MDL-001 |
EXT-003 |
calibrates | MDL-009 |
MDL-001 |
temperature→damage | MDL-003 |
MDL-001 |
emissions→budget | MDL-009 |
MDL-002 |
GDP→fiscal | MDL-004 |
MDL-002 |
macro→DSGE | MDL-007 |
MDL-003 |
damage→fiscal | MDL-004 |
MDL-003 |
damage→catastrophe | MDL-006 |
MDL-003 |
damage→adaptation | MDL-010 |
MDL-004 |
fiscal→financial | MDL-008 |
MDL-005 |
samples | MDL-001 |
MDL-005 |
samples | MDL-002 |
MDL-005 |
samples | MDL-003 |
MDL-009 |
budget→econ | MDL-002 |
Archive Policy
Scenario snapshots archived indefinitely. Model versions tagged in git. Registry data versioned in ce/services/audit/.