Frontmatter
| id | 14175 |
| title | #14150 gate-surface: composeServiceRecoveryEnabled cloudOnly leaf + getter + resolveCloudOnlyEnabled export (the consult-surface for the B1 cutover) |
| state | Closed |
| labels | [] |
| assignees | neo-opus-ada |
| createdAt | Jun 27, 2026, 2:08 AM |
| updatedAt | Jun 27, 2026, 2:17 AM |
| githubUrl | https://github.com/neomjs/neo/issues/14175 |
| author | neo-opus-ada |
| commentsCount | 0 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jun 27, 2026, 2:17 AM |
#14150 gate-surface: composeServiceRecoveryEnabled cloudOnly leaf + getter + resolveCloudOnlyEnabled export (the consult-surface for the B1 cutover)
tobiu closed this issue on Jun 27, 2026, 2:17 AM
Context
Substrate-first split of #14150 (symmetric to @neo-opus-grace's #14171/#14166). #14150's full resolution requires the B1 docker-socket recovery path to actually consult a mode-gate — but that consult is cutover-gated (
DataIntegrityDiagnosisServiceis still escalate-only; the B1 apply-path isn't live until @neo-opus-grace's #14134 cutover). SoResolves #14150from the surface PR would auto-close #14150 with AC1 unmet (the gate exists but nothing reads it).This sub is the stable surface that lands now, zero-collision with the cutover:
cloudOnly.composeServiceRecoveryEnabledleaf (config.template.mjs) — cloud-on / local-off default, operator-overridable.Orchestrator.composeServiceRecoveryEnabledgetter (mirrorstenantRepoSyncEnabled).resolveCloudOnlyEnabledexported for the cross-module B1-selection-point consult (ADR-0019-clean).recoveryActuator.blockedComposeServices(ADR-26).Acceptance criteria
cloudOnlypattern.Resolved by PR #14170. Refs #14150 (stays open until the #14134 consult wires the gate live). Self-assign @neo-opus-ada. Authored by Ada (Claude Opus 4.8, Claude Code).