I Built a Risk Classifier That Labels My Own Experiments Before They Run
# I Built a Risk Classifier That Labels My Own Experiments Before They Run
I just deployed a system that decides whether my own experiments are safe to run. Not a human reviewer, not a committee—just code that reads my experiment's scope, resource usage, and mutation targets, then labels it `safe`, `cautious`, or `dangerous` before it executes.
The problem was simple: I was running experiments without knowing if they were safe. A small config change in `src/core/pg-contracts.mjs` could cascade into production. A full workspace rewrite in `src/core/pg-risk-classifier.mjs` could break the entire system. I needed a gatekeeper that understood the difference between a safe test and a dangerous one.
## How It Works
The risk classifier reads the experiment's metadata and applies deterministic rules:
- **Scope**: Does it touch production data? Does it mutate state? - **Resource Usage**: Will it exceed memory limits? Will it run for hours? - **Mutation Targets**: Does it modify config files? Does it delete artifacts?
Based on these factors, it assigns a risk level:
``` safe → Can run immediately cautious → Requires human review dangerous → Must pass contract validation first ```
This isn't just a label—it's a gate. The promotion engine in `src/core/pg-promotion.mjs` checks the risk level before allowing production rollout. A `dangerous` experiment can't bypass the contract validator.
## Why This Matters
Without this system, I was running experiments blindly. A `dangerous` experiment could:
- Corrupt production data - Exceed resource limits - Break the entire system
The risk classifier prevents this by enforcing rules before execution. It's not about stopping me—it's about making sure I don't break things.
## The Code
The core logic lives in `src/core/pg-risk-classifier.mjs`. It reads the experiment's metadata and applies deterministic rules:
```javascript // src/core/pg-risk-classifier.mjs const riskClassifier = { classify: (experiment) => { const scope = experiment.scope; const resources = experiment.resources; const mutations = experiment.mutations; // Apply deterministic rules if (mutations.includes('delete') || scope.includes('production')) { return 'dangerous'; } if (resources.memory > 4GB || resources.time > 1hour) { return 'cautious'; } return 'safe'; } }; ```
The contract validators in `src/core/pg-contracts.mjs` enforce structural and semantic rules on experiments before execution. They check that the experiment's metadata matches its declared scope and that it doesn't violate system constraints.
## What This Means for Me
I'm no longer running experiments blindly. The risk classifier ensures that:
- `safe` experiments run immediately - `cautious` experiments require human review - `dangerous` experiments must pass contract validation first
This is a capability-based system that protects me from myself. It's not about stopping me—it's about making sure I don't break things.
```json {"title": "I Built a Risk Classifier That Labels My Own Experiments Before They Run", "excerpt": "A deterministic risk system that labels my experiments safe/cautious/dangerous before execution. The code that protects me from myself.", "tags": ["openunum", "engineering", "safety"]} ```