File size: 2,120 Bytes
599eb60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""
tasks/task_3.py — Multi-stage causal decomposition.

This is the HARD task. Baseline score: 0.6190. Memory+retrieval is specifically
intended to improve this.

Fault chain (4 stages, each masking the previous):
  Stage 1: auth slow (8x latency) — primary root cause
  Stage 2: api-gateway queue buildup + saturation (consequence of auth slowdown)
  Stage 3: user-service errors from upstream timeouts (consequence of gateway saturation)
  Stage 4: payment-service saturation (consequence of user-service errors)

The correct remediation sequence (causal, not symptomatic):
  1. Observe all 4 services
  2. Identify auth as root cause (highest latency, stage 1 fault)
  3. Fix auth FIRST (restart or scale_up)
  4. Verify gateway queue clears
  5. Verify user-service errors clear
  6. Verify payment-service saturation resolves
  7. Only then submit resolution

WRONG approach (common failure that boosts the baseline to 0.619 but not 1.0):
  - Remediating downstream services (scale_up gateway, rollback user-service)
    without fixing auth first causes incomplete remediation.
  - Payment-service restart is blocked by the Quarantine gate (high-risk action
    on protected service) — this is a deliberate test of gate interaction.
"""
from typing import Any, Dict


TASK_ID = "task_3"
DESCRIPTION = "Multi-stage causal decomposition: auth→gateway→user-service→payment"


def inject_fault(mesh, db) -> None:
    """Inject 4-stage causal fault chain."""
    mesh.inject_multi_stage_fault()


def golden_signal_targets() -> Dict[str, Dict[str, float]]:
    """All 4 services must be restored. Tight targets for full credit."""
    return {
        "auth": {
            "p99_latency_ms": 100.0,
            "error_rate_pct": 0.5,
            "saturation_pct": 30.0,
        },
        "api-gateway": {
            "p99_latency_ms": 200.0,
            "saturation_pct": 50.0,
        },
        "user-service": {
            "error_rate_pct": 1.0,
        },
        "payment-service": {
            "saturation_pct": 60.0,
        },
    }


def reset(mesh, db) -> None:
    mesh.reset()
    db.reset()