Resolves #13948
Summary
- Restores provider role-set residency through a bounded
warm-provider recovery action before restart/redeploy escalation.
- Covers both active local provider surfaces: LM Studio/OpenAI-compatible via
lms load, and native Ollama via role-specific warm-up endpoints.
- Adds an embedding
localModels.embedding.parallel leaf so LM Studio can keep chat and embedding resident with explicit per-role slot counts instead of inheriting an opaque default.
Deltas
missing-required-model provider residency facts now route to provider-role-residency + warm-provider; context/warm-up failures still fail loud into config-drift.
- Recovery actuator allows
warm-provider only for typed compose-service/supervised-task targets and preserves the existing anti-thrash ledger/backoff envelope.
- Provider readiness repair remains local-provider scoped: LM Studio requires
orchestrator.lms.enabled=true; unsupported/remote providers return observe-only degraded/skipped envelopes.
Evidence: L2 focused unit coverage plus pre-commit gate coverage for the new recovery class, actuator path, and provider helper paths.
Test Evidence
node --check ai/config.template.mjs
node --check ai/services/graph/providerReadinessHelper.mjs
node --check ai/daemons/orchestrator/services/RecoveryActuatorService.mjs
npm run test-unit -- test/playwright/unit/ai/config.template.spec.mjs test/playwright/unit/ai/daemons/orchestrator/Orchestrator.invariants.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/ContainerHealthDiagnosisService.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/RecoveryActuatorService.spec.mjs test/playwright/unit/ai/scripts/runners/runSandman.spec.mjs test/playwright/unit/ai/services/memory-core/helpers/recoveryRunStateStore.spec.mjs
- pre-commit hook passed on commit
088b2265ef
Post-Merge Validation
Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.
Resolves #13948
Summary
warm-providerrecovery action before restart/redeploy escalation.lms load, and native Ollama via role-specific warm-up endpoints.localModels.embedding.parallelleaf so LM Studio can keep chat and embedding resident with explicit per-role slot counts instead of inheriting an opaque default.Deltas
missing-required-modelprovider residency facts now route toprovider-role-residency+warm-provider; context/warm-up failures still fail loud into config-drift.warm-provideronly for typed compose-service/supervised-task targets and preserves the existing anti-thrash ledger/backoff envelope.orchestrator.lms.enabled=true; unsupported/remote providers return observe-only degraded/skipped envelopes.Evidence: L2 focused unit coverage plus pre-commit gate coverage for the new recovery class, actuator path, and provider helper paths.
Test Evidence
node --check ai/config.template.mjsnode --check ai/services/graph/providerReadinessHelper.mjsnode --check ai/daemons/orchestrator/services/RecoveryActuatorService.mjsnpm run test-unit -- test/playwright/unit/ai/config.template.spec.mjs test/playwright/unit/ai/daemons/orchestrator/Orchestrator.invariants.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/ContainerHealthDiagnosisService.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/RecoveryActuatorService.spec.mjs test/playwright/unit/ai/scripts/runners/runSandman.spec.mjs test/playwright/unit/ai/services/memory-core/helpers/recoveryRunStateStore.spec.mjs088b2265efPost-Merge Validation
parallelvalues.Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.