Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 5 Nov 2026. What's built · Install 0.3.0
jadpo
ReferenceErrors

ErrorsExternal services · rule

package.standard_candidate

Provider field looks like a standard type the package doesn't use.

Area 11, External services; declinable; the next step is usually the agent's.

This flags, in a provider package's public object, a field the provider sends in its own shape that looks like a standard type the package doesn't use ("Mapping imported types to standard types"). A whole number named like a time (created, expires, paid_at) may be an Instant sent as seconds; one named like an amount (amount, amount_refunded, total_amount) beside a currency, Money in minor units; a latitude beside a longitude, a Point. A field that says how it is sent (wire:, wire_parts:, decode:) is never one, and an object that is a standard type whole is type.standard_exists instead. It is declinable: a field that means something else keeps its type with a reason on the field.

An imported description often says only integer, so the importer leaves the field as the provider types it and the error asks for the documentation to be checked:

example
/// A parcel delivered.public type Delivery = Object {    id: Text    delivered_at: Int}
jadpo checkcheck failed: 1 error, 4 files

error Delivery.delivered_at may be an Instant sent as seconds

--> shared/providers/acme_couriers/v1/types/delivery.jadpo:4:5

  |4 |     delivered_at: Int  |     ^^^^^^^^^^^^ a whole number named like a time
reason
delivered_at is a whole number named like a time, which providers usually send as seconds since 1970. A package's public types use the standard types, so an app reads an Instant rather than a number to convert, and the package decodes it at the edge.
next
Check the provider's documentation, then make it delivered_at: Instant { wire: Wire.unix_seconds }, or Wire.unix_milliseconds for milliseconds, or write decline package.standard_candidate: "<why>" above it if this is deliberate (agent)
rule
package.standard_candidate
help
https://jadpo.dev/docs/errors/package.standard_candidate

Swapping it reads the provider's number as the Instant it is; a field that really is a number keeps its type with a reason, which jadpo declines list shows:

example
/// A parcel delivered.public type Delivery = Object {    id: Text    delivered_at: Instant {        wire: Wire.unix_seconds    }    decline package.standard_candidate: "The courier numbers its collection slots 1 to 6; this is that number"    slot_time: Int}

Markdown for agents: /docs/errors/package.standard_candidate.md.Built from Jadpo main at aee2e8f.