{
  "schema": "pg36-ch24-alert-candidates-v1",
  "service_id": "pg36_shop",
  "accepted": [
    {
      "id": "PG36ShopAvailabilityFastBurn",
      "class": "symptom",
      "objective_id": "SLO-AVAILABILITY",
      "route": "page",
      "severity": "SEV-1",
      "expression_contract": "bad_ratio_1h > 14.4 * 0.001 AND bad_ratio_5m > 14.4 * 0.001",
      "long_window": "1h",
      "short_window": "5m",
      "burn_rate": 14.4,
      "for": "2m",
      "user_impact": "order attempts are failing or have unreconciled outcomes fast enough to spend 2 percent of the 28-day budget in one hour",
      "owner_function": "service",
      "route_id": "route://shop-oncall",
      "runbook_id": "RB-USER-SYMPTOM",
      "first_safe_action": "freeze the latest risky release and reconcile unknown order outcomes before retrying writes",
      "verification": "the long and short windows both recover and sampled idempotency tokens reconcile",
      "dashboard": "dashboard://pg36-shop-slo",
      "missing_semantics": "unknown plus metamonitoring alert",
      "silence_policy": "only a bounded incident silence with owner, reason, end time, and replacement observation",
      "test_id": "ALERTTEST-AVAILABILITY-FAST",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36ShopAvailabilitySlowBurn",
      "class": "symptom",
      "objective_id": "SLO-AVAILABILITY",
      "route": "page",
      "severity": "SEV-2",
      "expression_contract": "bad_ratio_6h > 6 * 0.001 AND bad_ratio_30m > 6 * 0.001",
      "long_window": "6h",
      "short_window": "30m",
      "burn_rate": 6,
      "for": "5m",
      "user_impact": "sustained failed or unreconciled order attempts threaten 5 percent of the 28-day budget in six hours",
      "owner_function": "service",
      "route_id": "route://shop-oncall",
      "runbook_id": "RB-USER-SYMPTOM",
      "first_safe_action": "stop concurrent risky changes and segment failures by operation and release",
      "verification": "both burn windows recover and the responsible failure class is bounded",
      "dashboard": "dashboard://pg36-shop-slo",
      "missing_semantics": "unknown plus metamonitoring alert",
      "silence_policy": "bounded incident silence only",
      "test_id": "ALERTTEST-AVAILABILITY-SLOW",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36ShopAvailabilityBudgetTicket",
      "class": "symptom",
      "objective_id": "SLO-AVAILABILITY",
      "route": "ticket",
      "severity": "ticket",
      "expression_contract": "bad_ratio_3d > 1 * 0.001 AND bad_ratio_6h > 1 * 0.001",
      "long_window": "3d",
      "short_window": "6h",
      "burn_rate": 1,
      "for": "15m",
      "user_impact": "the current error rate would consume the full budget over the objective window if sustained",
      "owner_function": "service",
      "route_id": "route://shop-reliability-backlog",
      "runbook_id": "RB-BUDGET-REVIEW",
      "first_safe_action": "open an owned budget review and identify the largest eligible failure class",
      "verification": "ticket contains event counts, windows, release markers, and a due date",
      "dashboard": "dashboard://pg36-shop-slo",
      "missing_semantics": "unknown plus metamonitoring ticket",
      "silence_policy": "do not silence; deduplicate into the existing owned ticket",
      "test_id": "ALERTTEST-AVAILABILITY-TICKET",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36ShopCorrectnessMismatch",
      "class": "integrity",
      "objective_id": "CTRL-CORRECTNESS",
      "route": "page",
      "severity": "SEV-1",
      "expression_contract": "pg36_shop_reconciliation_mismatches > 0",
      "long_window": "current-reconciliation",
      "short_window": "current-reconciliation",
      "burn_rate": null,
      "for": "0m",
      "user_impact": "acknowledged order state may be duplicated, cross-tenant, invalid, or missing",
      "owner_function": "data",
      "route_id": "route://shop-oncall",
      "runbook_id": "RB-CORRECTNESS",
      "first_safe_action": "freeze affected writes and preserve the reconciliation boundary before repair",
      "verification": "an independently reviewed reconciliation returns zero unexplained mismatches",
      "dashboard": "dashboard://pg36-shop-correctness",
      "missing_semantics": "stale or missing reconciliation is a separate control failure",
      "silence_policy": "no routine silence; incident commander must record an alternative detector",
      "test_id": "ALERTTEST-CORRECTNESS",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36ShopFreshnessFastBurn",
      "class": "symptom",
      "objective_id": "SLO-FRESHNESS",
      "route": "page",
      "severity": "SEV-2",
      "expression_contract": "freshness_bad_ratio_1h > 14.4 * 0.01 AND freshness_bad_ratio_5m > 14.4 * 0.01",
      "long_window": "1h",
      "short_window": "5m",
      "burn_rate": 14.4,
      "for": "2m",
      "user_impact": "commit-correlated reads are missing the declared five-second visibility bound",
      "owner_function": "service",
      "route_id": "route://shop-oncall",
      "runbook_id": "RB-READ-FRESHNESS",
      "first_safe_action": "route the affected read-after-write journey to the primary path while preserving probe tokens",
      "verification": "new commit tokens become visible within five seconds on the declared path",
      "dashboard": "dashboard://pg36-shop-freshness",
      "missing_semantics": "probe absence is unknown, never fresh",
      "silence_policy": "bounded incident silence with an active primary-path probe",
      "test_id": "ALERTTEST-FRESHNESS",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36ShopCapacityHorizon",
      "class": "capacity",
      "objective_id": null,
      "route": "ticket",
      "severity": "ticket",
      "expression_contract": "forecast_days_to_capacity < 14 AND forecast_confidence = reviewed",
      "long_window": "28d-trend",
      "short_window": "7d-trend",
      "burn_rate": null,
      "for": "1h",
      "user_impact": "no present impact; forecast indicates an avoidable future saturation risk",
      "owner_function": "platform",
      "route_id": "route://db-platform-capacity",
      "runbook_id": "RB-CAPACITY",
      "first_safe_action": "validate demand, headroom, retention, and query mix before changing capacity",
      "verification": "an owned plan restores the reviewed headroom horizon",
      "dashboard": "dashboard://pg36-shop-capacity",
      "missing_semantics": "insufficient history produces no forecast and an evidence-quality ticket",
      "silence_policy": "deduplicate into a capacity plan; do not page",
      "test_id": "ALERTTEST-CAPACITY",
      "expires_for_review": "2026-10-29"
    },
    {
      "id": "PG36MonitoringPathBroken",
      "class": "metamonitoring",
      "objective_id": null,
      "route": "page",
      "severity": "SEV-2",
      "expression_contract": "expected_probe_missing OR rule_evaluation_failure OR notification_canary_overdue",
      "long_window": "15m",
      "short_window": "5m",
      "burn_rate": null,
      "for": "5m",
      "user_impact": "service health is unknown because the observation or notification path cannot prove it is working",
      "owner_function": "platform",
      "route_id": "route://db-platform-oncall",
      "runbook_id": "RB-METAMONITORING",
      "first_safe_action": "establish an independent blackbox view before changing the monitored database",
      "verification": "a canary traverses probe, ingestion, rule evaluation, routing, and receipt",
      "dashboard": "dashboard://pigsty-observability",
      "missing_semantics": "failure by definition",
      "silence_policy": "only with an independent replacement observation path",
      "test_id": "ALERTTEST-METAMONITORING",
      "expires_for_review": "2026-10-29"
    }
  ],
  "diagnostic_only": [
    {
      "id": "PG36ReplicaReplayDistance",
      "class": "cause",
      "route": "dashboard",
      "reason": "WAL distance helps explain freshness but is neither user-visible staleness nor read-your-writes proof",
      "page_when": "only after a correlated freshness or imminent durability symptom"
    },
    {
      "id": "PG36PoolQueueDepth",
      "class": "cause",
      "route": "dashboard",
      "reason": "a queue can be healthy backpressure while end-to-end latency remains within objective",
      "page_when": "only through the user-latency symptom or an independently defined overload invariant"
    },
    {
      "id": "PG36HostCpuHigh",
      "class": "cause",
      "route": "dashboard",
      "reason": "CPU utilization alone does not prove user harm",
      "page_when": "never by itself"
    }
  ],
  "rejected": [
    {
      "id": "PostgresInstanceDownWithoutAction",
      "class": "cause",
      "proposed_route": "page",
      "decision": "rejected",
      "reason": "one instance can be intentionally offline or safely covered by the service; the candidate supplies neither user impact nor a safe operator action",
      "user_impact": null,
      "owner_function": null,
      "runbook_id": null,
      "first_safe_action": null,
      "replacement": "correlate endpoint and user-event symptoms; retain instance state on the topology dashboard"
    }
  ]
}
