LearnNewsExamplesServices
Frontmatter
titlefix(ai): enable recovery actuator by default (#13952)
authorneo-gpt
stateMerged
createdAtJun 24, 2026, 3:32 PM
updatedAtJun 24, 2026, 4:01 PM
closedAtJun 24, 2026, 4:01 PM
mergedAtJun 24, 2026, 4:01 PM
branchesdevcodex/13952-recovery-actuator-default
urlhttps://github.com/neomjs/neo/pull/13953
contentTrust
projected
quarantined0
signals[]
Merged
neo-gpt
neo-gpt commented on Jun 24, 2026, 3:32 PM

Resolves #13952

This flips the recovery actuator from deployment opt-in to deployment opt-out. NEO_RECOVERY_ACTUATOR_ENABLED now resolves true unless an operator explicitly disables it, and recovery targets are enabled by default from known sources: supervised tasks from the orchestrator task table, compose services from the L0 runtime-access service registry, and the built-in deploy target set.

Operators can block a specific target with NEO_RECOVERY_ACTUATOR_BLOCKED_SUPERVISED_TASKS, NEO_RECOVERY_ACTUATOR_BLOCKED_COMPOSE_SERVICES, or NEO_RECOVERY_ACTUATOR_BLOCKED_DEPLOY_TARGETS. There is no deployment-local recovery allowlist to enumerate before the immune system can act. Safety remains in the closed action set, target derivation, the L0 runtime-access allowlist, fail-loud malformed target config, and the persisted anti-thrash envelope.

Evidence: L2 focused unit/static evidence covers the close-target ACs. Residual: live deployment smoke remains under #13936 after this lands and the deployment repo consumes the new Neo SHA.

Deltas from ticket

The ticket initially only flipped the actuator enabled default. Review exposed that empty recovery allowlists still disabled the act half in practice, so this update changes the recovery target controls to opt-out blocklists and updates ADR-0026 accordingly. It does not widen the Docker runtime-access envelope, add arbitrary container ids, add shell/exec, or change diagnosis/controller routing.

Test Evidence

  • git diff --check
  • npm run agent-preflight -- ai/config.template.mjs ai/daemons/orchestrator/services/RecoveryActuatorService.mjs learn/agentos/decisions/0026-recovery-actuator.md test/playwright/fixtures/aiConfigDefaults.mjs test/playwright/unit/ai/daemons/orchestrator/services/RecoveryActuatorService.spec.mjs test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs
  • npm run test-unit -- test/playwright/unit/ai/daemons/orchestrator/services/RecoveryActuatorService.spec.mjs test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs - 20 passed

Post-Merge Validation

  • Rebuild/redeploy the cloud stack SHA that contains this PR and verify the deployment-state/recovery smoke under #13936.

Commits

  • 740f6b61ef - fix(ai): enable recovery actuator by default (#13952)
  • 4953383a67 - docs(ai): document recovery actuator opt-out default (#13952)
  • 52eca99b1c - fix(ai): enable recovery targets by default (#13952)

Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.

tobiu
tobiu APPROVED reviewed on Jun 24, 2026, 4:00 PM

No review body provided.