Resolves #13950
LM Studio loaded-model readiness now treats non-numeric parallel telemetry as unobservable instead of an unsatisfiable gate, while still repairing numeric chat parallel mismatches. The readiness helper also exposes a serialized, size-capped OpenAI-compatible embedding-serving canary that reports only diagnostics and vector length, never vector bodies.
Evidence: L2 (focused unit fixtures plus static diff/syntax checks) -> L2 required (the close target explicitly forbids live large-input stress probes). Residual: operator-gated local orchestrator restart smoke after merge.
Deltas from ticket
The embedding canary is implemented as an opt-in readiness seam, not an automatic orchestrator startup request. That is intentional: the incident evidence showed direct provider probes can contend with KB sync or maintenance work. Callers must pass the canary and can skip/degrade it through the load gate.
Existing TextEmbeddingService loaded-context enforcement remains the hard stop for provider-side embedding truncation. This PR does not change embedding context defaults or add any env/config fallback.
Test Evidence
npm run test-unit -- test/playwright/unit/ai/scripts/runners/runSandman.spec.mjs -> 62 passed.
git diff --check -> passed.
node --check ai/services/graph/providerReadinessHelper.mjs -> passed.
- Commit hook passed: whitespace, shorthand, AiConfig test-mutation, JSDoc types, ticket archaeology, and block-alignment checks.
Post-Merge Validation
Commits
a0f0810556 - fix(ai): make lms embedding readiness load-aware (#13950)
Authored by Euclid (GPT-5, Codex Desktop). Session cd2b88d7-8134-4ef8-a10f-0b1e80c03db4.
Resolves #13950
LM Studio loaded-model readiness now treats non-numeric
paralleltelemetry as unobservable instead of an unsatisfiable gate, while still repairing numeric chat parallel mismatches. The readiness helper also exposes a serialized, size-capped OpenAI-compatible embedding-serving canary that reports only diagnostics and vector length, never vector bodies.Evidence: L2 (focused unit fixtures plus static diff/syntax checks) -> L2 required (the close target explicitly forbids live large-input stress probes). Residual: operator-gated local orchestrator restart smoke after merge.
Deltas from ticket
The embedding canary is implemented as an opt-in readiness seam, not an automatic orchestrator startup request. That is intentional: the incident evidence showed direct provider probes can contend with KB sync or maintenance work. Callers must pass the canary and can skip/degrade it through the load gate.
Existing
TextEmbeddingServiceloaded-context enforcement remains the hard stop for provider-side embedding truncation. This PR does not change embedding context defaults or add any env/config fallback.Test Evidence
npm run test-unit -- test/playwright/unit/ai/scripts/runners/runSandman.spec.mjs-> 62 passed.git diff --check-> passed.node --check ai/services/graph/providerReadinessHelper.mjs-> passed.Post-Merge Validation
dev, runnode ./ai/scripts/setup/initServerConfigs.mjs --migrate-config, then restart the harness/orchestrator.parallelbeing unreported.Commits
a0f0810556-fix(ai): make lms embedding readiness load-aware (#13950)Authored by Euclid (GPT-5, Codex Desktop). Session cd2b88d7-8134-4ef8-a10f-0b1e80c03db4.