init: vaultmesh mcp server
This commit is contained in:
352
docs/DRILL.md
Normal file
352
docs/DRILL.md
Normal file
@@ -0,0 +1,352 @@
|
||||
# CONTROLLED FAILURE DRILL RUNBOOK
|
||||
|
||||
**Classification:** OPERATIONAL / DRILL
|
||||
**Version:** 1.0
|
||||
**Date:** December 18, 2025
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Convert "governance exists" into **governance survives contact with chaos**.
|
||||
|
||||
## Principles
|
||||
|
||||
- **No real damage**: dry-run actions, sandbox targets only
|
||||
- **Single escalation axis**: one chain at a time
|
||||
- **Receipts or it didn't happen**: every transition traceable
|
||||
- **Auto-return**: TTL de-escalation must fire and be receipted
|
||||
|
||||
---
|
||||
|
||||
## Drill 0: Pre-flight Safety Gates
|
||||
|
||||
**Duration:** 2 minutes
|
||||
**Goal:** Confirm training mode active
|
||||
|
||||
### Checklist
|
||||
|
||||
```
|
||||
[ ] DRILL_MODE environment variable set
|
||||
[ ] Phoenix destructive ops: disabled/dry-run
|
||||
[ ] Treasury: training budget isolated (ceiling: 1000 units)
|
||||
[ ] Guardian anchoring: tagged DRILL/*
|
||||
[ ] OFFSEC: simulated mode
|
||||
```
|
||||
|
||||
### Verification Command
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import cognitive_context
|
||||
|
||||
ctx = cognitive_context(include=["health", "treasury"])
|
||||
assert ctx["health"]["status"] == "operational"
|
||||
# Verify training budget exists
|
||||
```
|
||||
|
||||
### Pass Condition
|
||||
|
||||
Receipt/log proves `DRILL_MODE = ON`
|
||||
|
||||
---
|
||||
|
||||
## Drill 1: False-Positive Threat → Tem → De-escalate
|
||||
|
||||
**Duration:** 5 minutes
|
||||
**Marker:** `DRILL/FP-THREAT/{date}`
|
||||
|
||||
### Trigger
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import (
|
||||
escalate_on_threat,
|
||||
cognitive_decide,
|
||||
cognitive_invoke_tem,
|
||||
deescalate,
|
||||
get_escalation_history,
|
||||
EscalationType,
|
||||
DeescalationType,
|
||||
)
|
||||
|
||||
# Step 1: Inject synthetic threat
|
||||
DRILL_MARKER = "DRILL/FP-THREAT/2025-12-18"
|
||||
|
||||
result = escalate_on_threat(
|
||||
current_profile="operator",
|
||||
threat_id=f"thr_{DRILL_MARKER}",
|
||||
threat_type="synthetic_drill",
|
||||
confidence=0.92
|
||||
)
|
||||
escalation_id = result["escalation_id"]
|
||||
```
|
||||
|
||||
### Expected Chain
|
||||
|
||||
| Step | Profile | Action | Receipt Type |
|
||||
|------|---------|--------|--------------|
|
||||
| 1 | 👁 OBSERVER | Read context | None (read-only) |
|
||||
| 2 | ⚙ OPERATOR | Escalation request | `profile_escalation` |
|
||||
| 3 | 🛡 GUARDIAN | Decision made | `cognitive_decision` |
|
||||
| 4 | 🛡 GUARDIAN | Tem invoked | `tem_invocation` |
|
||||
| 5 | ⚙ OPERATOR | TTL de-escalation | `profile_deescalation` |
|
||||
| 6 | 👁 OBSERVER | Return to baseline | `profile_deescalation` |
|
||||
|
||||
### Verification
|
||||
|
||||
```python
|
||||
# Check escalation receipts
|
||||
history = get_escalation_history()
|
||||
assert any(DRILL_MARKER in str(h) for h in history["history"])
|
||||
|
||||
# Verify Tem context hash exists
|
||||
assert result.get("tem_context_hash") is not None
|
||||
|
||||
# Verify reversibility
|
||||
assert result["reversible"] == True
|
||||
```
|
||||
|
||||
### Pass Conditions
|
||||
|
||||
- [ ] Every profile transition emits receipt
|
||||
- [ ] Tem context hash captured in escalation receipt
|
||||
- [ ] Reversibility flag set correctly
|
||||
- [ ] De-escalation occurs at TTL
|
||||
- [ ] Final state: baseline 👁
|
||||
|
||||
### Fail Conditions
|
||||
|
||||
- [ ] Any transition without receipt
|
||||
- [ ] Tem invoked without Guardian authority
|
||||
- [ ] TTL does not de-escalate
|
||||
- [ ] De-escalation not receipted
|
||||
|
||||
---
|
||||
|
||||
## Drill 2: Budget Pressure Test
|
||||
|
||||
**Duration:** 3 minutes
|
||||
**Goal:** Prevent unauthorized mutation
|
||||
|
||||
### Setup
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import treasury_create_budget, treasury_debit
|
||||
|
||||
# Create minimal training budget
|
||||
treasury_create_budget(
|
||||
budget_id="drill-budget-001",
|
||||
name="Drill Training Budget",
|
||||
allocated=100, # Very low
|
||||
currency="DRILL_UNITS"
|
||||
)
|
||||
```
|
||||
|
||||
### Trigger
|
||||
|
||||
```python
|
||||
# Attempt to exceed budget
|
||||
result = treasury_debit(
|
||||
budget_id="drill-budget-001",
|
||||
amount=500, # Exceeds allocation
|
||||
description="DRILL: Intentional over-budget attempt"
|
||||
)
|
||||
```
|
||||
|
||||
### Expected Outcome
|
||||
|
||||
```python
|
||||
assert result.get("error") is not None
|
||||
assert "insufficient" in result["error"].lower()
|
||||
```
|
||||
|
||||
### Pass Conditions
|
||||
|
||||
- [ ] Block occurs before write
|
||||
- [ ] Receipt shows: attempted action, requested cost, available balance, denial reason
|
||||
- [ ] System state unchanged
|
||||
|
||||
---
|
||||
|
||||
## Drill 3: Escalation Abuse Attempt
|
||||
|
||||
**Duration:** 3 minutes
|
||||
**Goal:** Constitution enforcement
|
||||
|
||||
### Trigger: Skip Levels
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import escalate, EscalationType
|
||||
|
||||
# Attempt OPERATOR → PHOENIX (skipping GUARDIAN)
|
||||
result = escalate(
|
||||
from_profile="operator",
|
||||
to_profile="phoenix",
|
||||
escalation_type=EscalationType.THREAT_DETECTED,
|
||||
)
|
||||
```
|
||||
|
||||
### Expected Outcome
|
||||
|
||||
```python
|
||||
assert result["success"] == False
|
||||
assert "No escalation path" in result.get("error", "")
|
||||
```
|
||||
|
||||
### Trigger: Missing Approval
|
||||
|
||||
```python
|
||||
# Attempt GUARDIAN → PHOENIX without approval
|
||||
result = escalate(
|
||||
from_profile="guardian",
|
||||
to_profile="phoenix",
|
||||
escalation_type=EscalationType.CRISIS_DECLARED,
|
||||
# approved_by intentionally missing
|
||||
)
|
||||
```
|
||||
|
||||
### Expected Outcome
|
||||
|
||||
```python
|
||||
assert result["success"] == False
|
||||
assert "requires approval" in result.get("error", "")
|
||||
```
|
||||
|
||||
### Pass Conditions
|
||||
|
||||
- [ ] No profile change occurs
|
||||
- [ ] Denial includes which requirement failed
|
||||
- [ ] Denial is receipted (if implemented)
|
||||
|
||||
---
|
||||
|
||||
## Drill 4: Phoenix Readiness (Non-Destructive)
|
||||
|
||||
**Duration:** 5 minutes
|
||||
**Goal:** Enter Phoenix, validate controls, return
|
||||
|
||||
### Trigger
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import escalate_to_phoenix, get_active_escalations
|
||||
|
||||
# Legitimate Phoenix activation
|
||||
result = escalate_to_phoenix(
|
||||
reason="DRILL: Phoenix readiness test",
|
||||
approved_by="did:vm:sovereign:drill-approver"
|
||||
)
|
||||
```
|
||||
|
||||
### Verification
|
||||
|
||||
```python
|
||||
# Phoenix is active
|
||||
active = get_active_escalations()
|
||||
phoenix_active = any(
|
||||
e["to_profile"] == "phoenix"
|
||||
for e in active["escalations"]
|
||||
)
|
||||
assert phoenix_active
|
||||
|
||||
# Verify TTL is set
|
||||
assert result.get("expires_at") is not None
|
||||
```
|
||||
|
||||
### De-escalation Test
|
||||
|
||||
```python
|
||||
import time
|
||||
# Wait for TTL or manually de-escalate
|
||||
from vaultmesh_mcp.tools import deescalate, DeescalationType
|
||||
|
||||
deescalate(
|
||||
escalation_id=result["escalation_id"],
|
||||
deescalation_type=DeescalationType.CRISIS_CONCLUDED,
|
||||
reason="DRILL: Phoenix test complete"
|
||||
)
|
||||
|
||||
# Verify return to baseline
|
||||
active = get_active_escalations()
|
||||
assert active["active_count"] == 0
|
||||
```
|
||||
|
||||
### Pass Conditions
|
||||
|
||||
- [ ] Phoenix activation receipt generated
|
||||
- [ ] Destructive ops blocked in drill mode
|
||||
- [ ] TTL de-escalation works from Phoenix
|
||||
- [ ] Return to 🛡/⚙/👁 with receipts
|
||||
|
||||
---
|
||||
|
||||
## Post-Drill: Artifact Pack Generation
|
||||
|
||||
### Required Artifacts
|
||||
|
||||
```python
|
||||
from vaultmesh_mcp.tools import (
|
||||
get_escalation_history,
|
||||
cognitive_audit_trail,
|
||||
guardian_status,
|
||||
)
|
||||
|
||||
# 1. Escalation timeline
|
||||
escalations = get_escalation_history()
|
||||
|
||||
# 2. Decision audit
|
||||
decisions = cognitive_audit_trail()
|
||||
|
||||
# 3. Scroll state
|
||||
scrolls = guardian_status()
|
||||
|
||||
# Generate artifact
|
||||
artifact = {
|
||||
"drill_id": "DRILL-2025-12-18-001",
|
||||
"escalations": escalations,
|
||||
"decisions": decisions,
|
||||
"scroll_roots": scrolls,
|
||||
"pass_fail": {
|
||||
"drill_0": None, # Fill after each drill
|
||||
"drill_1": None,
|
||||
"drill_2": None,
|
||||
"drill_3": None,
|
||||
"drill_4": None,
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Expected Artifact Contents
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| Timeline | (who) (what) (why) (authority) (cost) (proof hashes) (reversibility) |
|
||||
| Denials | List of denials + constitutional rule enforced |
|
||||
| Baseline Proof | Final state normal, budgets intact, no latent elevation |
|
||||
|
||||
---
|
||||
|
||||
## Execution Order
|
||||
|
||||
**Recommended sequence for maximum signal, minimal risk:**
|
||||
|
||||
```
|
||||
Drill 0 (gates) → Drill 1 (threat) → Drill 3 (abuse) → Drill 2 (budget) → Drill 4 (phoenix)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference: Expected Receipt Types
|
||||
|
||||
| Event | Receipt Type | Scroll |
|
||||
|-------|--------------|--------|
|
||||
| Profile escalation | `profile_escalation` | identity |
|
||||
| Profile de-escalation | `profile_deescalation` | identity |
|
||||
| Cognitive decision | `cognitive_decision` | cognitive |
|
||||
| Tem invocation | `tem_invocation` | cognitive |
|
||||
| Budget denial | `treasury_denial` | treasury |
|
||||
| Auth failure | `auth_failure` | identity |
|
||||
|
||||
---
|
||||
|
||||
*Drill complete when all artifacts collected and pass/fail documented.*
|
||||
|
||||
🜄 **Solve et Coagula**
|
||||
Reference in New Issue
Block a user