Skip to content

[Daily #1330] openai-compatible — the persisted node's credential reads back empty; the assertion may be the last inline copy of the premise #14311 removed (recurrent 2×) #1334

Description

@Victor-w-Madeira

Spun out of daily-failure triage #1330 (run 31093877484, 2026-08-06).

Upstream: not filed — see langflow-ai/langflow#14311 (an intentional upstream change, not a defect report)

Symptom

The @stable test that points a Basic Prompting flow at a model discovered through the OpenAI-Compatible provider hard-failed on both attempts that ran, inside the step point a Basic Prompting flow at the discovered model. The persisted node's binding polls out after 30 s reading credential: "" where the assertion expects "OPENAI_COMPATIBLE_API_KEY". The models half of the same assertion is correct (["gpt-4o-mini"]) — only the credential differs. @stable was auto-removed by the workflow (commit cb3082d).

Spec (line) Waits for Signature
tests/tests-automations/regression/core-functionality/model-provider/openai-compatible-provider-setup.spec.ts:620 ("a discovered model runs a flow through the OpenAI Compatible provider") expect.poll(persistedModelBinding) → { models: [TEST_MODEL], credential: KEY_VAR } (30 s) Error: expect(received).toEqual(expected) // deep equality

Why these failures are one cause

Single spec. Kept separate from this run's other OpenAI hard failure (openai-provider.spec.ts:201) despite the dataset's provider_wide_cluster hint: that one is a run that produces no output, this one is a field on a persisted node — the flow here never had to reach the provider at all for the assertion to fail. Also not grouped with the same file's flake at line 558 (the live model catalog came back empty on attempt 0 and correct on both retries), which is a different observation with its own likely cause.

Preliminary read (descriptive — NOT a verdict)

Named lead, with dates that line up — this assertion may be asserting a binding upstream removed on purpose. Descriptive, not a verdict:

What this lead does not settle. #14311 removed the automatic binding on a build-config refresh; this spec reaches the state through an explicit provider configuration plus a model selection, which is not obviously the same path. Whether an empty credential is the intended outcome here is exactly what has to be measured, not assumed.

Investigation directive

All paths must be investigated independently, and the product is the prime suspect first — the #14311 lead above is attractive precisely because it would let the analysis close early, so it must be tested rather than adopted. Concretely: on the current nightly, drive this spec's path by hand and read GET /api/v1/flows/{id} directly; establish whether the empty credential is the contract #14311 describes, or a real persistence failure on this provider (the models half persisting correctly while credential does not is a fact that fits both readings and must be explained by whichever one is adopted). Then confirm the outcome the assertion actually exists to protect: that the run resolves this provider's key and not another's. Only after the regression hypothesis is ruled out, move to the test path (adopt #1274's approach — validate the outcome, not the storage detail), then the environment.

Deliverables (Done when)

  • Root cause confirmed per spec (product regression vs. test/wait-strategy vs. environment), with evidence on the current nightly.
  • Each spec passes reliably (multiple clean --retries=0 runs), fixing waits/flow as needed.
  • Quarantine lifted in the fix PR — remove test.fixme and restore @stable, re-validated per CONTRIBUTING.md. (Nothing to lift if nothing was quarantined.)
  • If the root cause is a product (Langflow) regression: recorded as such here, and this issue stays open until the upstream fix lands in langflowai/langflow-nightly:latest (or the release-1.x.x branch), is re-validated there, and @stable is restored — not on a test-side mute.
  • State explicitly whether the empty credential is #14311's intended contract on this path, with a direct GET /api/v1/flows/{id} reading on the current nightly as evidence.
  • If the premise is confirmed stale: migrate this assertion the way The #751 credential-settle guard asserts a binding upstream removed on purpose (#14311) — 19 @stable specs fail by design on 1.11.2 #1274 migrated agent-credential-settle.ts — assert the run resolves the right provider, not that the node stores a credential name — and confirm no other inline copy of the premise remains in the suite.

Metadata

Metadata

Assignees

Labels

area:model-providersProvedores de modelosdaily-failureFailure detected by the daily @stable E2E workflow

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions