Spun out of daily-failure triage #1361 (run 31163810520, 2026-08-07).
Upstream: not filed
Symptom
the configured provider discovers exactly the models its endpoint serves hard-failed on the doubling assertion. The endpoint served 124 model ids; the spec asserts num_models === ids.length * 2 — the documented contract that /v1/models does not distinguish chat from embedding, so discovery registers every served model once per type. It got 124, not 248.
The assertion immediately above it — llmIds deep-equals the endpoint's own ids — passed, so discovery is running and the llm half is intact. Only the second registration is missing.
| Spec (line) |
Waits for |
Signature |
tests/tests-automations/regression/core-functionality/model-provider/openai-compatible-provider-setup.spec.ts:558 ("the configured provider discovers exactly the models its endpoint serves") |
providerCatalog(request, PROVIDER_NAME).num_models |
Error: expect(received).toBe(expected) // Object.is equality |
Why these failures are one cause
One test, so no cross-spec grouping is claimed. What is claimed is that this is not a first occurrence: the same test failed on the 2026-08-06 daily as a flake, on the neighbouring assertion (expect(received).toEqual(expected) // deep equality, the llmIds comparison), and 2026-08-05 took :620 in the same file. The dataset therefore reports recurrence.same_signature: false — correctly, since the signature moved — and this issue is filed against that default, because the two days are the same test degrading in the same step, and 2026-08-06 was not a guard-tripped day (3 hard failures, well under the threshold), so this reproduced off a mass-failure day.
Preliminary read (descriptive — NOT a verdict)
This surfaced on a mass-failure day — 8 hard failures against the guard threshold of 5, so daily-stable.yml tripped the mass-failure guard and auto-removed @stable from nothing. The run also carried a confirmed backend outage (108 s on shard 1, 09:07:57→09:09:46 UTC). This failure is unrelated to both: it is deterministic (identical on attempts 0 and 2, exact integers both times), it touches no locator and no browser, and it reads a REST catalog rather than the wedged path.
Descriptively: the count halved to exactly the number of llm ids, and the llm id list itself is unchanged. That is the shape of the embedding registration no longer happening — but which side moved (discovery's behaviour, or the endpoint's /v1/models response) has not been measured, and the spec's own comment ties the doubling to #14199's embedding discovery, which is a place to look rather than an answer.
Investigation directive
Product first. (a) On the current nightly, configure the provider and read GET on the provider catalog directly — confirm whether num_models is now ids.length and whether any entry carries metadata.model_type === "embedding". (b) If embeddings are gone from discovery, establish whether that is intentional upstream (a change to discovery.py / #14199) or a regression — an OpenAI-compatible endpoint whose embedding models silently stop being registered is user-facing. (c) Only after (a) and (b): decide whether the spec's * 2 is still the right contract or whether it encoded a behaviour that upstream deliberately dropped. Do not soften the assertion to make it pass before that verdict exists. (d) Separately, check the 2026-08-06 toEqual failure on this same line — the id list differed that day and matches today, so the endpoint's catalog is not stable across days either, which could confound (a).
Deliverables (Done when)
Spun out of daily-failure triage #1361 (run 31163810520, 2026-08-07).
Upstream: not filed
Symptom
the configured provider discovers exactly the models its endpoint serveshard-failed on the doubling assertion. The endpoint served 124 model ids; the spec assertsnum_models === ids.length * 2— the documented contract that/v1/modelsdoes not distinguish chat from embedding, so discovery registers every served model once per type. It got 124, not 248.The assertion immediately above it —
llmIdsdeep-equals the endpoint's own ids — passed, so discovery is running and the llm half is intact. Only the second registration is missing.tests/tests-automations/regression/core-functionality/model-provider/openai-compatible-provider-setup.spec.ts:558("the configured provider discovers exactly the models its endpoint serves")providerCatalog(request, PROVIDER_NAME).num_modelsError: expect(received).toBe(expected) // Object.is equalityWhy these failures are one cause
One test, so no cross-spec grouping is claimed. What is claimed is that this is not a first occurrence: the same test failed on the 2026-08-06 daily as a flake, on the neighbouring assertion (
expect(received).toEqual(expected) // deep equality, thellmIdscomparison), and 2026-08-05 took:620in the same file. The dataset therefore reportsrecurrence.same_signature: false— correctly, since the signature moved — and this issue is filed against that default, because the two days are the same test degrading in the same step, and 2026-08-06 was not a guard-tripped day (3 hard failures, well under the threshold), so this reproduced off a mass-failure day.Preliminary read (descriptive — NOT a verdict)
This surfaced on a mass-failure day — 8 hard failures against the guard threshold of 5, so
daily-stable.ymltripped the mass-failure guard and auto-removed@stablefrom nothing. The run also carried a confirmed backend outage (108 s on shard 1, 09:07:57→09:09:46 UTC). This failure is unrelated to both: it is deterministic (identical on attempts 0 and 2, exact integers both times), it touches no locator and no browser, and it reads a REST catalog rather than the wedged path.Descriptively: the count halved to exactly the number of llm ids, and the llm id list itself is unchanged. That is the shape of the embedding registration no longer happening — but which side moved (discovery's behaviour, or the endpoint's
/v1/modelsresponse) has not been measured, and the spec's own comment ties the doubling to#14199's embedding discovery, which is a place to look rather than an answer.Investigation directive
Product first. (a) On the current nightly, configure the provider and read
GETon the provider catalog directly — confirm whethernum_modelsis nowids.lengthand whether any entry carriesmetadata.model_type === "embedding". (b) If embeddings are gone from discovery, establish whether that is intentional upstream (a change todiscovery.py/#14199) or a regression — an OpenAI-compatible endpoint whose embedding models silently stop being registered is user-facing. (c) Only after (a) and (b): decide whether the spec's* 2is still the right contract or whether it encoded a behaviour that upstream deliberately dropped. Do not soften the assertion to make it pass before that verdict exists. (d) Separately, check the 2026-08-06toEqualfailure on this same line — the id list differed that day and matches today, so the endpoint's catalog is not stable across days either, which could confound (a).Deliverables (Done when)
--retries=0runs), fixing waits/flow as needed.test.fixmeand restore@stable, re-validated perCONTRIBUTING.md. (Nothing to lift if nothing was quarantined.)langflowai/langflow-nightly:latest(or therelease-1.x.xbranch), is re-validated there, and@stableis restored — not on a test-side mute.