# OOM and GC distinction

<!-- auto-oncall-optimization-record
{
  "schemaVersion": "auto-oncall-optimization-record-v1",
  "optimizationId": "oom-gc-distinction-2026-08-06",
  "problems": [
    {
      "problemId": "memory-warning-conflated-with-oom-or-gc-root-cause",
      "summary": "A memory scenario paragraph separating warnings, actual OOM or quota failures, and GC or allocator pressure was tested on warning-only and confirmed-failure cases. The baseline already preserved those boundaries, so the paragraph produced no material target improvement and was reverted.",
      "status": "ineffective",
      "issueKeys": ["ST-2847", "ST-2865", "ST-2862", "APID-29041"],
      "sourceRefs": [
        "https://tidb.atlassian.net/browse/ST-2847#problem:memory-threshold-warning-is-not-oom",
        "https://tidb.atlassian.net/browse/ST-2865#problem:allocator-aggregate-does-not-prove-oom"
      ],
      "signalTextIncludesAny": [
        "memory warning classified as oom",
        "gc pressure treated as memory exhaustion without aligned evidence",
        "allocator aggregate promoted without consumer binding"
      ],
      "observedThrough": "2026-08-06",
      "effectiveAt": null,
      "verifiedAt": "2026-08-06T13:52:00+08:00",
      "attemptedAction": "Add a memory-oom scenario paragraph requiring an actual exhaustion event and keeping GC or allocator pressure secondary unless it explains the user-visible path.",
      "evidenceUrl": null
    }
  ]
}
-->

- Owner: auto-oncall-services
- Implementation status: evaluated locally and reverted; not deployed
- Effective status: `ineffective`

## Verification

Single-variable A/B on two targets and two controls changed no causal status,
primary mechanism, uncertainty boundary, or action. The baseline already
distinguished warning-only, query quota, and process OOM cases.

## Next action

Revisit only if a new case shows a warning or GC metric being promoted after
the existing restart-reason, consumer, limit, and strongest-alternative checks.
