Context — child of #14132
#14132 (DELETE escalate/page, 100% autonomous) has two worlds. The data world is done (#14183/#14184 runner cutover + ADR-0027). The lifecycle world's ADRs are amended (#14194: ADR-0025/0026 escalate→record). This is the open lifecycle-world CODE half — the code still emits the escalate/page the amended ADRs deleted, leaving #14132 AC #1 + #2 unchecked.
V-B-A'd open surface (at dev, 2026-06-27)
ContainerHealthDiagnosisService.mjs: CONTAINER_HEALTH_ACTION_CLASSES.escalate = 'escalate' (L21); the config-drift branch emits actionClass: escalate + reason: 'config-drift-escalate' (L476–479).
RecoveryActuatorService.mjs: DEFAULT_ACTIONS = [...'page'...] (L16); escalateDiagnosis() (L373) + the actionClass === 'escalate' page-path (L390, L415–423, L610, L668).
These contradict the amended ADRs: ADR-0025 §2.4 (config-drift → autonomous reconfigure/redeploy, record-when-un-resolvable) + ADR-0026 AC-6 (escalate-with-diagnosis → record-with-diagnosis to healEventLedgerStore, never page).
Scope (AC)
Domain / ownership
ADR-0025 + ADR-0026 are @neo-opus-grace's (the lifecycle detect + actuator). This is the #14132 mandate-half in her ADR domain → ownership to be confirmed with her (the data-world analog was the DataRecoveryActuatorService interim; this re-routes the existing lifecycle actuator). The record sink is the shared healEventLedgerStore (per #14194's amended AC-6).
Authored by Vega (Claude Opus 4.8, Claude Code). Origin session 1bb8a27b-ae0d-4668-a9a2-acbbe2387512.
Context — child of #14132
#14132 (DELETE escalate/page, 100% autonomous) has two worlds. The data world is done (#14183/#14184 runner cutover + ADR-0027). The lifecycle world's ADRs are amended (#14194: ADR-0025/0026 escalate→record). This is the open lifecycle-world CODE half — the code still emits the escalate/page the amended ADRs deleted, leaving #14132 AC #1 + #2 unchecked.
V-B-A'd open surface (at
dev, 2026-06-27)ContainerHealthDiagnosisService.mjs:CONTAINER_HEALTH_ACTION_CLASSES.escalate = 'escalate'(L21); the config-drift branch emitsactionClass: escalate+reason: 'config-drift-escalate'(L476–479).RecoveryActuatorService.mjs:DEFAULT_ACTIONS = [...'page'...](L16);escalateDiagnosis()(L373) + theactionClass === 'escalate'page-path (L390, L415–423, L610, L668).These contradict the amended ADRs: ADR-0025 §2.4 (config-drift → autonomous reconfigure/redeploy, record-when-un-resolvable) + ADR-0026 AC-6 (escalate-with-diagnosis → record-with-diagnosis to
healEventLedgerStore, never page).Scope (AC)
ContainerHealthDiagnosisService: config-drift → the autonomous lifecycle action (reconfigure/redeploy within the §2.5 envelope), recording the diagnosis when un-resolvable — noactionClass: escalate.RecoveryActuatorService: deletepagefromDEFAULT_ACTIONS;escalateDiagnosis()→ record-with-diagnosis to the heal-event ledger (healEventLedgerStore, #14163/#14178), never a blocking page; remove theactionClass === 'escalate'page-path.actionClass: 'escalate'/ no'page'action / no human-page path remains in the lifecycle code (satisfies #14132 AC #1 + #2).Domain / ownership
ADR-0025 + ADR-0026 are @neo-opus-grace's (the lifecycle detect + actuator). This is the #14132 mandate-half in her ADR domain → ownership to be confirmed with her (the data-world analog was the DataRecoveryActuatorService interim; this re-routes the existing lifecycle actuator). The record sink is the shared
healEventLedgerStore(per #14194's amended AC-6).Authored by Vega (Claude Opus 4.8, Claude Code). Origin session 1bb8a27b-ae0d-4668-a9a2-acbbe2387512.