Documentation / VFX-D-1205

VFX-D-1205

Title

UndeclaredDependencyType

Explanation

A step's type needs infrastructure of a particular kind — mq-expect.kafka needs a kafka dependency, db-assert.postgres needs a postgres one — and environment.dependencies declares no entry of an acceptable kind.

Note the distinction the finding turns on: environment.dependencies is an object keyed by your logical name (orders-db), and each entry's type field is the kind (postgres). This rule checks the kinds, not the names; a dangling target name is VFX-D-1202.

The finding is suppressed when the step's target names a declared service. The composed schema's own target description says a customer-supplied service is a legitimate provider of the same infrastructure ("a customer-supplied broker under its own entrypoint/config"), so demanding a managed dependency there would be wrong.

Two step types need a kind whose name differs from the provider in their type: mail-expect.smtp needs a mailpit dependency (the provider names the protocol) and storage-assert.s3 needs a s3 (RustFS) or minio one (the provider names the API). Either kind satisfies the storage requirement; both are not required.

For external environment sources, CLI-free validation leaves the driver’s bindings unresolved and suppresses this finding; VFX-D-1212 explains that limitation.

Reported as a warning in the semanticDiagnostics channel.

Common causes

  • A step added without the matching environment.dependencies entry.
  • A dependency declared with the wrong type value — matching is case-sensitive, so Postgres is not postgres.
  • A suite that assumes an externally-provided broker or database but does not declare it as a service either.
  • mail-expect.smtp written against smtp instead of the managed mailpit kind.

Fixes

  • Add the dependency: an entry under environment.dependencies whose type is the kind the message names.
  • Or declare the infrastructure as a service under environment.services and point the step's target at it.
  • Call describe_step_type on the step's type to see its full field contract, and get_schema with section: "environment" for the dependency shape and the kinds the pinned schema accepts.