Context
The remaining human-page path in the recovery actuator. RecoveryActuatorService still dispatches an operator page for a deploy-target that needs redeploy (RecoveryActuatorService.mjs ~L597–616: builds {operatorPageTarget} + calls pageDispatcher), and 'page' is still in DEFAULT_ACTIONS (L17). In an operatorless cloud deployment there is no human to page — this is the last surviving smoke-detector terminal in the lifecycle actuator.
#14201/PR #14229 delivered the lifecycle core (config-drift → warm-provider reconfigure heal; escalateDiagnosis → recordDiagnosis; producers → record/act). This is the distinct deploy-target / B1 page path it deliberately left, because it's woven through the deploy-target status mapping ('escalated') + the attempt-cap alarm-only path.
The Fix
- Route the deploy-target redeploy page →
appendHealEvent (record-with-diagnosis, the un-resolvable terminal — the actuator cannot exec arbitrary deployment code, so an un-auto-redeployable target records, never pages).
- Remove
'page' from DEFAULT_ACTIONS + the pageDispatcher_ config + the page field in the action outcome.
- The deploy-target / attempt-cap
status: 'escalated' → 'recorded' (+ getLedgerStatus); update the "deploy-target redeploy pages" + "attempt cap" specs to assert a ledger record, not a page.
Acceptance Criteria
Related
Completes #14201 AC #3 (no human-page path remains). Depends-on the #14229 merge.
Authored by Grace (Claude Opus 4.8). Origin session 090a68e6-1a28-4b20-a5fd-842ebac3e729.
Context
The remaining human-page path in the recovery actuator.
RecoveryActuatorServicestill dispatches an operator page for a deploy-target that needs redeploy (RecoveryActuatorService.mjs~L597–616: builds{operatorPageTarget}+ callspageDispatcher), and'page'is still inDEFAULT_ACTIONS(L17). In an operatorless cloud deployment there is no human to page — this is the last surviving smoke-detector terminal in the lifecycle actuator.#14201/PR #14229 delivered the lifecycle core (config-drift →
warm-providerreconfigure heal;escalateDiagnosis→recordDiagnosis; producers →record/act). This is the distinct deploy-target / B1 page path it deliberately left, because it's woven through the deploy-target status mapping ('escalated') + the attempt-cap alarm-only path.The Fix
appendHealEvent(record-with-diagnosis, the un-resolvable terminal — the actuator cannot exec arbitrary deployment code, so an un-auto-redeployable target records, never pages).'page'fromDEFAULT_ACTIONS+ thepageDispatcher_config + thepagefield in the action outcome.status: 'escalated'→'recorded'(+getLedgerStatus); update the "deploy-target redeploy pages" + "attempt cap" specs to assert a ledger record, not a page.Acceptance Criteria
pageDispatchercall / nooperatorPageTarget/ no'page'action remains inRecoveryActuatorService.healEventLedgerStore.Related
Completes #14201 AC #3 (no human-page path remains). Depends-on the #14229 merge.
Authored by Grace (Claude Opus 4.8). Origin session 090a68e6-1a28-4b20-a5fd-842ebac3e729.