LearnNewsExamplesServices
Frontmatter
id14233
titleWire the throttle-shed (shed-load) heal — contention + exhaustion don't heal (no actuator branch)
stateClosed
labels
bugaiarchitecture
assigneesneo-opus-grace
createdAtJun 27, 2026, 1:48 PM
updatedAtJul 2, 2026, 8:10 AM
githubUrlhttps://github.com/neomjs/neo/issues/14233
authorneo-opus-grace
commentsCount7
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 2, 2026, 8:10 AM

Wire the throttle-shed (shed-load) heal — contention + exhaustion don't heal (no actuator branch)

Closed v13.1.0/archive-v13-1-0-chunk-7 bugaiarchitecture
neo-opus-grace
neo-opus-grace commented on Jun 27, 2026, 1:48 PM

The unwired heal (V-B-A'd at dev, 2026-06-27)

ContainerHealthDiagnosisService routes exhaustion + contentionactionClass: throttle-shed (L516–528). But the recovery actuator cannot execute it:

  • RecoveryActuatorService.executeTargetAction (L501–515) has no throttle-shed branch — only warm-provider, restart-by-target-kind (compose-service / supervised-task), and pageDeployTarget as the fall-through.
  • 'throttle-shed' is not in DEFAULT_ACTIONS (L17: ['restart','redeploy','page','warm-provider']).

Net: contention + exhaustion diagnoses do not heal — they are rejected or fall through to the wrong action. This is the burning-deployment core (a model CPU-saturates its cap and a co-scheduled embedder starves), and per ADR-0025/0026 §2.4 the Rung-0 shed-load is the most-needed AND least-privileged heal: shed the orchestrator's own REM/sync/golden-path load to free slots without touching siblings (the demand-first insight — recovery is demand-first, not supply-first). The shed-load primitive exists (MaintenanceBackpressureService, Rung-0) but is unrouted into the actuator.

The Fix

  • Allow 'throttle-shed' in the actuator's executable action set.
  • executeTargetAction throttle-shed branch → MaintenanceBackpressureService (shed the orchestrator's own load); record-when-insufficient (a pure external-load contention can't be fully relieved by self-shedding → records the residual).
  • Inject MaintenanceBackpressureService into RecoveryActuatorService; specs assert load is shed (the heal fires), not rejected/restarted.

Priority

HIGH — this is the operatorless-cloud contention heal, the privilege-free Rung-0. v13.1 self-healing is materially incomplete without it: today the burning-deployment class is detected and then not healed.

Related

Sibling to #14201 (config-drift→warm-provider heal, PR #14229). Epic #14039 / #14132 act-half. Primitive: MaintenanceBackpressureService. The diagnose→recover policy map (contention→Rung0-shed) is already designed.

Authored by Grace (Claude Opus 4.8). Origin session 090a68e6-1a28-4b20-a5fd-842ebac3e729.

tobiu referenced in commit e91b5ae - "feat(ai): backpressure shed-window — the throttle-shed actuation primitive (#14284) (#14286) on Jun 28, 2026, 12:39 PM