# What's built

Jadpo's specification covers the whole language. This page shows how much of it the compiler does today. Each table below comes from the "What is built" section of that part of the specification, from Jadpo's `main` branch at `a707efb` (30 Oct 2026), version 0.1.0. If you use something that isn't built, the compiler reports `toolchain.not_built_yet`.

-   Holding back a change that loosens access until you accept itplanned
-   Personal-data export, erasure and retentionplanned
-   Performance on Cloudflare itselfMeasured only locally, in workerdnot measured
-   How agents do in Jadpo against TypeScriptThe test and its 18 changes are written; the runs haven't been donenot measured

What comes next, in order, is on [the roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md).

## Project layout and modules[Read about it](/docs/project-layout-and-modules)

The compiler builds the decided layout, with each rule's real output under [Errors](/docs/project-layout-and-modules#errors).

State

Feature

Status

built

Root, domains and their folders

Built: a file where the layout has no place for it is `layout.unknown_location`, and a declaration in the wrong folder `layout.wrong_folder`; a folder or file with no `app.jadpo` above it is checked as loose files. Not built yet: `jadpo domain rename`, `split` and `merge`; the `documents` capability, so a file in `documents/` is `layout.unknown_location` until it is.

built

Files and names

Built: one primary declaration per file, named after it; names unique project-wide; the round-trip and folded-collision rules, with the exception for a type folding to its callable's name.

partly

Names per domain

Partly built: private functions and types unique only within their domain, each domain's code reading its own; their identity keys carrying the domain, with promotion to `shared/` writing a registry line; `semantic.duplicate_declaration` saying copy or clash and listing the names in use with the same words. `jadpo rename` is not built yet ([Commands for looking into and changing code](/docs/commands-for-looking-into-and-changing-code)).

built

Order independence

Built: declaration and file order never matter.

built

Domains, `public` and calls

Built: owner-qualified calls and per-declaration `public`, with `visibility.private_cross_domain`, `visibility.public_not_allowed` and `visibility.public_unused`.

built

Reserved words

Built: a reserved word can't name anything.

built

Comments

Built: `//` and `///` documentation comments.

built

Similar helpers

Built: `library.similar_exists`, a declinable error. Not built yet: `jadpo impact`.

partly

Declinable errors

Partly built: no warning severity; the `decline <rule>: "<reason>"` line with `decline.unused`, `decline.not_declinable` and `decline.no_reason`; `jadpo declines list` and `clear`; the editor's "Decline with a reason" and "Remove decline". Not built yet: `jadpo approval` ([Records and manifest](/docs/records-and-manifest)) and the date rule for expired [feature flags](/docs/feature-flags).

built

Constants

Built: `constant` as a reserved word and a declaration placed and shared as helper functions are, a private one unique within its domain, `constant.similar_exists`, and a top-level `var` pointed at `constant` ([Constants](/docs/constants)).

built

Imports

Built: `use <folder> { Names }` and `use <domain>`, with `import.missing`, `import.unknown`, `import.unused`, `import.unneeded` and `import.duplicate`; `jadpo fmt` adds, removes and sorts imports, `jadpo fmt --layout` makes promotion moves, and go to definition works from every use of a name, a `use` line's included.

built

A file holds only what its primary declaration uses

Built: `layout.unused_declaration` for a supporting declaration the primary declaration doesn't use, directly or through one another.

built

Definition before use

Built: `jadpo fmt` writes each file's declarations before the first one that uses them, and `jadpo fmt --check` fails on a file out of that order.

not yet

Referenced assets

Not built yet: `layout.asset_unreferenced` waits for the ways [Integrations](/docs/external-services) and [Built-in services](/docs/built-in-services) refer to files that aren't Jadpo.

built

Jadpo version

Built: `application { jadpo: "0.1" }`, with `toolchain.version_newer` refusing a project on a later line, `toolchain.version_older` one on an earlier line, each naming the release to install, and `toolchain.version_invalid`; the installed `jadpo` runs the release the line or `jadpo.lock`'s pin names ([Which jadpo runs](/docs/which-jadpo-runs)). `jadpo new` writes the line of the `jadpo` that ran it.

built

Packages

Built: the root `packages/` and `jadpo.lock`, `shared/providers/`, packages checked as `shared/` is, `use packages/<name>`, and the reachable-from-public rule (`visibility.public_reaches_private`) in domains and packages; [Integrations](/docs/external-services) records the choices.

## Values and types[Read about it](/docs/values-and-types)

State

Feature

Status

built

Everything else on this page

Built.

not yet

A map literal with entries

Not built yet: it is not designed yet.

not yet

`FileUpload`, `UploadSlot`, `SearchText`, `OAuthGrant`, `AnyObject` and the `Document` base

Not built yet: each comes with the features that use it.

not yet

`jadpo inspect`, showing a built type's final fields and where each came from

Not built yet. Hover shows them.

partly

`BatchRun`, `BatchProgress`, `RowProblem`, `ImportSummary`, `ExportSummary`, `File` and `FileContents`

Partly built: only the runtime builds one. A program reads the batch types' fields, and an entity field keeps a `BatchRun` or a `File` as its JSON; a program can't read a `File`'s or a `FileContents`'s parts yet.

## Logic[Read about it](/docs/logic)

State

Feature

Status

built

Everything on this page, [Constants](/docs/constants) included

Built: every example on this page and every error's example is checked against the compiler on each gate run.

## Failures[Read about it](/docs/failures)

State

Feature

Status

built

Declaring failures, kinds and codes

Built, with the checks under [Errors](/docs/failures#errors).

built

`fails`, `reject`, `attempt` and handling in `match`

Built.

built

Mapping

Built: a construction's rule arms and `invalid:`, proof that a construction cannot break, a query's `missing:` and writes' `conflict:` and `empty:`, each with its kind check.

built

Faults from code

Built: `Int` and `Decimal` overflow and the recursion limit are faults at their site, and a failure keeps the path it travelled and the failure it was mapped from.

built

What the client sees

Built: the envelope, the validation details and the OpenAPI responses.

built

Concealing records

Built: a record [policy](/docs/policy) hides reports the code's own not-found failure, and its log says `concealed_by: policy`.

not yet

Logging

Not built yet.

## Data[Read about it](/docs/data)

Each feature not built yet is `toolchain.not_built_yet` where it is used.

State

Feature

Status

built

Entities, their fields, references, unique rules, indexes and stores

Built.

built

Migrations, computed backfills and the test database

Built.

built

PostgreSQL over TLS and through Hyperdrive

Built. Checking a Hyperdrive configuration's caching on a real deploy is not built yet.

not yet

D1, and actions on it as reads first and one checked batch of writes

Not built yet.

built

Lifecycles

Built.

built

Structured values stored as JSON, and their migrations

Built. Conditions on them, a `unique:` or index over them, and an update by `id` that works one out in the database are not built yet.

built

The check of every stored value on read

Built. `CHECK` constraints holding fields' rules in the database are not built yet.

built

Standard types stored in named columns, and the standard collections

Built. Comparing or ordering by them in a query is not built yet.

built

Manifest nodes

Built: a node for each entity's placement, unique rule, index and reference, with `references` edges between entities, one for each system table and migration snapshot, and one for each lifecycle and transition (`lifecycle Todo`, `transition Todo.delete`, with its `when:`, whether it can refuse a record and the fields it sets).

not yet

Other schema changes in `jadpo migrate new`

Not built yet: removing an entity, moving one between stores, dropping a retired column (it needs [acceptances](/docs/acceptances)), a new `pattern:` on a stored field, and other column type changes.

not yet

A worked-out backfill for a field that allows less

Not built yet.

not yet

A backfill in Jadpo that fills a value held in several columns, or reads a field held so or as JSON

Not built yet.

not yet

Entities in Redis and record caches (`caches:`)

Not built yet. Clearing only the cached entries a change affects isn't designed yet.

not yet

Index kinds other than geographic and HNSW

Not built yet.

not yet

A database implied only when something needs one

Not built yet: it comes with the first feature that can run without one.

not yet

Seeds and `jadpo seed`

Not built yet.

not yet

`jadpo rename`

Not built yet: it writes the identity registry ([Tooling](/docs/tooling)).

## Reads and writes[Read about it](/docs/reads-and-writes)

State

Feature

Status

built

Everything else on this page

Built.

not yet

Reading another store outside an action's transaction

Not built yet: it is `toolchain.not_built_yet` ("One store per action").

not yet

Caches and entities in Redis

Not built yet: there is no Redis driver ("Where a read comes from", "Entities in Redis").

not yet

A rerun's time bound

Not built yet: the runtime counts attempts only, so of "three attempts within a second" only the three is enforced ("All-or-nothing actions and concurrent changes").

not yet

Comparing money, ranges and fields kept as JSON in a query

Not built yet: a field of money or a range, or one kept whole as its JSON (an object, a list, a set, a map or an enum with data), isn't compared in a query, its operations included (`toolchain.not_built_yet`), though `list.count` of a list would otherwise have a form ("Operations in conditions").

## HTTP[Read about it](/docs/http)

A feature that isn't built yet is the error `toolchain.not_built_yet` where an app uses it.

State

Feature

Status

built

Checking routes

Built: `jadpo check` checks route groups, their prefixes and APIs (with `idempotency:`), methods and typed placeholders, the one input (from the query string for `GET` and `DELETE`, the JSON body otherwise, and `header:` fields), `output:` and `status:`, `deadline:`'s range and what `run:` calls, every route of the project against the others and the health paths, and each API's record.

built

OpenAPI

Built: `jadpo check` writes one OpenAPI document per API to `build/openapi/`, and the failure wording for client apps beside it. Each API serves its own document at `<prefix>/openapi.json` (`serve_openapi: false` turns it off), listed in its record, its document and `jadpo routes`, and the documents carry the `x-jadpo` fields the OpenAPI importer reads ([OpenAPI](/docs/openapi)). OpenAPI derives each route's responses from what it runs and shows `ZonedTime`, `Zone` and a mixed enum as they are sent.

built

Serving a request

Built: the runtime's HTTP component routes a request, decodes and checks its input (each problem as `{ field, rule }`), runs the action or query, and answers with the output or the failure envelope, its `request_id` and `x-request-id`, with the status the failure's kind sets; it answers `HEAD` and `OPTIONS` itself and counts the default rate limits. It reads a body only as JSON, and refuses a query string or body a route doesn't read, a header it can't read and a body over 1 MB.

built

Deadlines and concurrent changes

Built: the runtime stops a route at its deadline without committing, even work that never waits, and runs an action again on a concurrent change found as it commits.

built

Health endpoints

Built: `/health/live` and `/health/ready`.

built

Idempotent writes

Built: the runtime keeps each write's `Idempotency-Key` with its response.

built

Commands

Built: `jadpo dev` serves the routes and reloads on save, `jadpo routes` lists them and `jadpo api update` writes the records, each `api/<api>.jadpo_record` in the record format with no `version:` line; the OpenAPI version is a hash of it.

built

Native connection limits

Built: natively, a client has 10 seconds for its headers and 30 for its body, a write waits at most 30 seconds for it to read, and the server holds at most 1,024 connections and 10 database connections per store per worker.

built

Sign-in

Built: every route needs a signed-in caller unless it says `authentication: RouteAuthentication.none`; each API lists the sign-in methods it accepts, named in its record; a route passes `current_principal` to what it runs; a signed-in caller's requests count against its own rate limit, and its idempotency keys are its own; a request with a credential on a route anyone may call counts against its address before it runs ([Identity](/docs/identity)).

built

Policy

Built: policy decides what each route reaches, and OpenAPI lists the 403 `not_permitted` on every route that runs an action that writes or is listed under `actions:` ([Policy](/docs/policy)).

built

Issued tokens and keys

Built: a `GET` runs `sessions.tokens` and `<Service>.keys` itself, and the record and OpenAPI describe the `IssuedToken` and `IssuedKey` it sends ([Service credentials](/docs/service-credentials)).

built

Map layers

Built: a route may send a `FeatureCollection<G, P>` bare, its properties held to what an `Output` may hold and, where an action returns it, to the fields every caller may read ([Field restrictions](/docs/field-restrictions)); OpenAPI describes RFC 7946's object and the record names it with its type arguments. A `GET` sends one a query gives ([Reads and writes](/docs/reads-and-writes), "A query giving a map layer"), held to field policy where the query is declared.

built

`settle:`

Built: a route waits for the work its action set off ([Waiting for follow-on work](/docs/waiting-for-follow-on-work), and `route.settle_invalid`).

built

Streaming

Built: a route whose action returns an `AiStream` sends a model's answer as server-sent events ([Streaming a model's answer](/docs/streaming-a-model-s-answer), and `route.stream_invalid`).

not yet

Failure wording from a build

Not built yet: `jadpo check` writes `<api>.failures.<locale>.json` beside each OpenAPI document, and `jadpo build` is to write it too.

not yet

`x-jadpo-events`

Not built yet: it waits for publishing events outward ([Where events travel](/docs/where-events-travel)).

not yet

A route's own `rate_limit:` and the Redis store for rate limits

Not built yet ([Rate limits](/docs/rate-limits)).

not yet

Classifying breaking changes and their acceptances

Not built yet ([Acceptances](/docs/acceptances)).

not yet

The `Jadpo-Revision` header

Not built yet: it comes with caches ([Write revisions](/docs/write-revisions)).

## Identity[Read about it](/docs/identity)

A feature not built yet is `toolchain.not_built_yet` where it is written.

State

Feature

Status

built

Everything else on this page

Built.

not yet

`sign_in:`'s `providers:` and `oauth_provider:`, and `on_first_sign_in:` for provider and external-token sign-in

Not built yet. An external token's subject that no user has is `sign_in_refused` (403).

not yet

Scope declarations and policy's scope restrictions

Not built yet. As [Policy](/docs/policy) specifies, an external method narrows scopes only when it declares the scopes it reads; undeclared provider scope or profile claims never replace application authority.

not yet

A setting loosened past its limit

Not built yet: waits on [acceptances](/docs/acceptances).

not yet

OAuth grants: `OAuthGrant` credentials, the connecting and disconnecting routes and `on_behalf_of:` ([Integrations](/docs/external-services))

Not built yet. `Driver.oidc` for Google and Microsoft sign-in comes with providers.

## Policy[Read about it](/docs/policy)

Everything on this page is built except the two features below. Each is `toolchain.not_built_yet` where you write it.

State

Feature

Status

built

Grants, user fields, membership roles, `Access.authenticated`, `Access.public` and `Access.system`, tenancy, `actions:`, field restrictions, the permissions report, and the refusals under "When policy says no"

Built.

not yet

`scopes:`, with the tokens issued to other applications (`oauth_token`, `external_token`)

Not built yet. Browser sessions and service keys work without them.

not yet

An acceptance for a change that widens access, and the approval review that shows the report's changes ([Review and sign-off](/docs/review-and-sign-off), [Acceptances](/docs/acceptances))

Not built yet. Review policy changes in the permissions report's diff instead.

## Configuration and time[Read about it](/docs/configuration-and-time)

State

Feature

Status

built

Time literals and the built-in `Zone`, `Weekday` and `Locale` enums

Built, with `clock.now` outside an action reported as `type.clock_context`.

built

Settings

Built: settings, secrets, signing keys, connection addresses, `jadpo config`, the check before the app starts, a test's own values, and the trusted proxies a client's address is read through. The check before the app starts covers every setting a deployable reads, its connections' included, among them the mail server's for the sign-in email.

built

Time

Built: `ZonedTime`, durations, arithmetic and comparison, the `temporal` library over the IANA database bundled into every target, time values on the wire, in OpenAPI and in queries, and a test's `clock:` and `clock.advance(...)` ([Controlling time](/docs/controlling-time)).

built

Formatting

Built: `TimeFormat`, declared and built in, `ComponentStyle` and `PresentationText`, with the checks on formatting.

built

Locales

Built: `locales { }` with its errors, `locale:` checked against it, a `Locale` on the wire or in a setting limited to the supported ones, and the text formatting gives, over CLDR data compiled into every target; `locale.from_accept_language(header)`.

built

Translations as messages

Built: `Message` types and the built-in `PluralCount`, each domain's `translations { }` language files and their checks, the generated `translations.<domain>.<message>` calls, enum wording, email subjects and `in_progress:` locales; failures' client text exported per locale; stale translations and review; `locale.direction`; the `jadpo translations` commands; go to definition and the pseudo-locale.

built

Jadpo's own messages

Built, with the root file's owner groups.

built

Library packages' translations

Built: a package's `translations/`, `Postcodes.translations.<message>(...)`, the root file's package groups and their record lines, and a package's messages in its surface and the publishing bar.

built

Locale data a deployable carries

Built: its supported locales' only, with the text a `Locale` the app doesn't support is written in (see [Locales](/docs/locales)).

not yet

Unaccepted wording in the approval report

Not built yet: `jadpo approval` doesn't exist yet. Use `jadpo translations missing`, which lists it.

not yet

Moving a message to `shared/translations/`

Not built yet as a promotion: `layout.promotion_required` doesn't cover messages, so move the message by hand.

not yet

Other members of `clock`, `translations`, `sessions` and `oauth`

Not built yet: a member these pages don't describe is `toolchain.not_built_yet` until its area is built.

## External services[Read about it](/docs/external-services)

State

Feature

Status

built

The package format, names and the lock

Built.

built

The surface, `jadpo package show` and `jadpo package check` with the publishing bar

Built.

built

Installing: `add` from a folder or git, `update`, `remove`, `link` and `unlink`

Built.

built

Connections to packages and the network report

Built.

built

Lazy loading, the package cache and two versions side by side

Built.

built

The OpenAPI importer, and the scoped review of an import's types

Built.

built

Provider calls, decoding, `wire_parts:` and retries

Built.

built

No transaction open during a call, and several changing calls in one action

Built.

built

Fakes, recordings and provider calls faked in development

Built.

built

The `email` capability with SMTP and Resend

Built.

built

Package actions, subscribers, recipes and polls

Built.

built

Webhooks as events, replies, handshakes, queues through a package and the Cloudflare Queues driver

Built.

not yet

Services (`runs:`)

Not built yet.

not yet

OAuth grants

Not built yet.

not yet

Publisher trust for third-party git packages

Not built yet.

not yet

The hosted registry

Not built yet.

not yet

Importers other than OpenAPI

Not built yet.

not yet

Choosing a provider when deploying

Not built yet.

not yet

Erasure at providers

Not built yet: it comes with [Personal data](/docs/personal-data).

[The roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md) says when each comes.

## Mistakes not reported yet

These mistakes are specified but not reported yet:

State

Mistake

Reported by

no state

A connection that receives personal data, with no `erasure:` and no acceptance

`jadpo check`

no state

An operation whose scope the grant does not request; a call to a grant connection without `on_behalf_of:`

`jadpo check`

no state

A service image not yet accepted; an `asks:` host not granted by `outbound:`

`jadpo check`, naming the line that grants it

no state

A third-party package from git with no acceptance

`jadpo check`

no state

A capability's connection whose package does not provide it, or a function call or expression in a `provide` mapping, for a capability other than `receiving` and `email`

`jadpo check`

The rest of the page's mistakes have examples under [Errors](/docs/external-services#errors): the digest and the lock, an `emails/` folder, the index's keys, `provider.jadpo`'s keys, `hosts:` with `runs:`, reserved and taken names, a resource and an action of one name and a public action that emits (`package.action_invalid`), and subscribing to a non-public event (`package.not_public`) under "Package errors"; a surface that differs at install and a link in CI under "Installing errors"; a decoder that fails on a recording and a field's `decode:` and `encode:` that don't round-trip under "Recording errors"; a connection's keys under "Connection errors". The rule that nothing public reaches something private is `visibility.public_reaches_private` ([Project layout and modules](/docs/project-layout-and-modules)), and several changing calls in the wrong place are the `step.` errors of [Jobs and events](/docs/jobs-and-events) and `effect.call_in_loop` ([Logic](/docs/logic)).

## Jobs and events[Read about it](/docs/jobs-and-events)

State

Feature

Status

built

Everything else on this page

Built.

not yet

Publishing chosen public events outward

Not built yet.

not yet

Each step's state in `jadpo watch`, and in `jadpo trace` with the request timelines ([Debugging and review](/docs/debugging-and-review)), and a record's entry in the [personal-data report](/docs/personal-data)

Not built yet.

not yet

Sending the metrics and the alerts' log events to a monitoring tool

Not built yet: waits for [telemetry](/docs/built-in-services).

not yet

The console's timeline

Not built yet ([Debugging and review](/docs/debugging-and-review)).

not yet

Jitter and `Retry-After` between a delivery's attempts

Not built yet: the next attempt waits only its backoff ([Retries and giving up](/docs/retries-and-giving-up)).

not yet

Classifying a change to an event record as breaking, and accepting it

Not built yet: comes with [acceptances](/docs/acceptances).

not yet

Splitting a page type allowing more than 1,000 items into batches; `batches.status` and `batches.cancel` with runs in no store or several; a file's run with several databases and none written

Not built yet ([How a run is kept](/docs/how-a-run-is-kept), [How a file's run is kept](/docs/file-batch-runs)).

not yet

`cli.signal_handler_failed`

Not built yet ([Running background work](/docs/where-events-travel#running-background-work)).

[The roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md) says when.

## Testing[Read about it](/docs/testing)

State

Feature

Status

built

Pure and action tests

Built: `jadpo test` runs `test "…" { }` and `assert` in the interpreter, for tests that call functions and actions. Each test gets its own environment (its seed and clock, its database and fakes), tests run on a thread per core, and the results are reported in the order seed's order. Each action or fixture a test calls commits on its own, through the runtime's action boundary; an action it calls joins its transaction.

built

Kind of test

Built: the kind comes from what a test calls (an action, query or fixture makes it an action test, a `request` a route test, a schedule's `.run()` a schedule test), and the footer and `--json` count each kind.

built

Schedule tests

Built: `schedule.run()` in a test runs the schedule once at the test's clock, its action called as the system with no tenant, with its own database like an action test; `--kind schedule` runs only these; anywhere but a test it is `semantic.not_callable`.

built

Route tests

Built: `request { method: path: params: input: }` sends a request through the runtime's HTTP component and gives a `Response` with `status`, `code` and the route's typed `output`; a route test gets its own database like an action test, and a defect behind a 500 ends it as `test.fault`. `as:` signs in a user through a real browser session or API token, and a service through a real service key. Every request but a `GET` sends a fresh `Idempotency-Key`, or the one `idempotency_key:` gives ([Idempotency keys](/docs/kinds-of-test#idempotency-keys)). An optional field the `input:` leaves out is left out of the body, so a `patch:` keeps it. A streaming route's `Response` has `pieces` in place of `output`, its events read to the last.

partly

Assertion messages

Partly built: a failed `assert` reports its file and line, its source with each part's value hung beneath it, expected and actual, a field-by-field diff for records, lists, sets and maps, a stable code and the rerun command with the order seed (see [Errors](/docs/testing#errors)). Not built yet: the trace, fakes, kept database and clock in the report. A statement over several lines shows its first line; `--json` has all of it.

built

Checking a failure

Built: `assert call(…) fails Failure`; when the call returns or fails differently, the report shows the value, or the other failure with its code, kind, fields and where it was raised. A failure under `attempt` ends the test as `test.unexpected_failure`, and a fault as `test.fault`, each with its `.jadpo` frames.

built

Events

Built: what each step emits is delivered once it comes back and before the next statement, at the test's clock, until nothing is due, in an order the run's seed shuffles; a retry waits its full backoff until `clock.advance` reaches it, and a delivery that fails for good, or stops as `diverged`, ends the test as `test.subscriber_failed` ("Caches and events").

built

Clock

Built: a test's clock starts at its `clock:`, or at 2000-01-01T00:00:00Z without one, and `clock.advance(...)` moves it on for the calls after it; only a test moves it (`type.test_clock_context`, a fixture and a seed included), and a move backwards is the fault `clock_backward`.

built

Configuration

Built: `test:` values on fields, defaults, generated secrets and a test's own `config:`; a request sent through a route is not followed for the compile-time check that every setting a test reads has a value, and a read with none then ends the test as a fault naming the setting.

partly

Integration fakes

Partly built: for provider packages, every provider call a test reaches answers through its package's fake, with the operation's generated default unless the test's `fakes:` scripts its answers, each checked against the package (`semantic.fake_invalid`); a script the calls run past is `test.fake_exhausted`, one with answers left `test.fake_unused` ("Fakes for integrations"). Package fakes keep keys, and a test that reaches an action with several changing calls runs again with a crash at each step boundary ("Provider calls and capabilities in tests"). `email.sent` ([Email](/docs/email)): every email a test sends is caught, rendered whole, a mail package's included, and read as a `List<SentEmail>`. Not built yet: `.requests` (built for the `ai` fake, `ai.<prompt>.requests`), the capability fakes but `ai`'s, grants, documents, batches and `fixture_file`.

built

Database

Built: `jadpo test` gives each action test in a project with tables its own copy of a template built from the migrations, on the server `JADPO_TEST_DATABASE_URL` names or a disposable one started from the machine's PostgreSQL tools; copies are prepared in the background, and a test gets its copy the first time it uses a store. `--keep-failed` keeps a failed test's database and names it in the report. Tests read and write records through actions, queries and fixtures; a concurrent change, which needs a second connection, is shown by the runtime's own tests.

built

Caller

Built: `Principal.user(user)` and `Principal.service(service)` in tests, fixtures and seeds; a call passing a caller runs as that caller, one passing none runs without policy.

built

Placement

Built: a test sits in `<name>.test.jadpo` beside its subject, or in root `tests/`; a test elsewhere is `layout.wrong_folder`, which names the `.test.jadpo` file beside it, and a test file with nothing beside it is `layout.test_without_subject`.

partly

Watch mode

Partly built: `jadpo test --watch` runs the tests asked for, then on every save the ones that reach what changed, through the graph's digests and `calls` and `uses` edges, on one long-lived database; a save no test reaches says `nothing to rerun`, a broken build shows its errors, and the next good save runs everything changed since the last run, or says `errors fixed` when no test reaches it; a removed file is a change like any other. Run from outside the project, its paths start with the project as typed. It ends when nothing reads its output any more, as when piped into `head`. A save shows its results in about 0.1 s on a 230-file project, and the gate fails above 1.25 s. The keys in the interactive screen (`enter`, `a`, `f`) wait for `--interactive`, which says `toolchain.not_built_yet`; ctrl-c quits.

built

Fixtures

Built: a fixture is checked like an action and called by name from tests, fixtures and seeds; an action calling one is `semantic.not_callable`. A `public` fixture is called through its domain from other domains' tests, fixtures and seeds and from root `tests/`; a private one from there is `visibility.private_cross_domain`. Seeds are checked but `jadpo seed` is not built.

not yet

Data builders, `assert emitted`

Not built yet.

not yet

Interactive mode

Not built yet: `jadpo test --interactive` says `toolchain.not_built_yet`.

not yet

Caches in tests

Not built yet: caches need the Redis driver.

built

Golden application contract

Built: the shared black-box harness in `benchmarks/contract/` executes all 44 versioned application cases interpreted, on generated native code and on compiled workerd, with real credential verification, raw invalid inputs, physical SQL observation, persisted-state assertions, controlled clocks and provider faults. These checks supplement authored Jadpo tests; they add no application-facing test controls. Full-gate ownership is interpreted and native in `compiled`, workerd in `wasm32`, and verifier negative controls in `lint`.

built

`test.no_tests`

Built: raised by `jadpo test` only ([Tooling](/docs/tooling)), when the project has no tests or a file, line, name, kind or `--failed` picks none.

## Tooling[Read about it](/docs/tooling)

Each row says what is built and what is specified but not built yet.

State

Feature

Status

built

Command help

Built: every command has `--help` with examples, `jadpo help [command]` explains one, and `jadpo help --json` describes them all.

built

Project path

Built: every command finds the project by walking up to `app.jadpo`, so a path is optional; run from outside the project, printed paths start with the project as typed.

built

Scaffold

Built: `jadpo new <name>` writes the fixed root on this `jadpo`'s release line with its project token, the `hello` domain (one route, its action, its policy line, its API record and a route test), `AGENTS.md`, `.gitignore` and `.gitattributes`, passing `check`, `fmt --check` and `test` as written, and refuses a folder that holds anything, with `--json`. The line an app declares is checked: `application { jadpo: "0.1" }`, with `toolchain.version_newer`, `toolchain.version_older` and `toolchain.version_invalid` ([The root](/docs/the-root)).

built

Which jadpo runs

Built in 0.1.0: every `jadpo` runs the release a project's line or `jadpo.lock` pin names, kept in the cache or fetched from GitHub's releases, its archive checked against its published SHA-256 and its GitHub artifact attestation (Sigstore's verifier, with the public-good trusted root carried in the binary) before it runs, and refuses with `toolchain.version_newer` or `toolchain.version_older` when it can't; `jadpo toolchain` lists, removes, pins and unpins, and `JADPO_TOOLCHAIN=local` runs everything with the `jadpo` started. The trusted root is the one this release was built with: no TUF refresh.

built

Formatter

Built: one member per line, one blank line between declarations, and `fmt --check` counts the files it read; it keeps `use` lines at the top, sorted, fixes imports inside a project, `--layout` makes promotion moves, and it writes each file's declarations before their use, the primary declaration last.

built

Error messages

Built: one error per mistake, in the field order [Error messages](/docs/error-messages) gives, `impact` only when it says something, edits on the next step where one exists, and help links to each error's page on the site.

built

JSON output

Built: every command takes `--json` and prints one envelope (`schemaVersion` 2) with project-relative paths and `data.root`, line and column beside byte offsets, and camelCase keys; `jadpo test --json` is described in [Testing](/docs/testing) and under `testReport` in `jadpo help --json`.

built

`build/`

Built: `jadpo check` writes `build/manifest.json` and the catalogues in `build/catalogue/`; `jadpo test` keeps its last run in `build/test/`. Not built yet: the reports, OpenAPI and the monitoring rules in `build/`.

built

Commands

Built: each command [The `jadpo` command](/docs/the-jadpo-command) and the topics after it describe, apart from those in their "Not built yet" notes.

built

Language server

Built: diagnostics; hover, with a query's SQL and a route's full path; go to definition, from a `use` line too; find references; completion; formatting as `jadpo fmt`; quick fixes from each error's edit, promotion among them; and the code actions under [Editor support](/docs/editor-support). Not built yet: rename, which waits for `jadpo rename`.

built

VS Code extension

Built: starts `jadpo lsp`, formats on save, highlights, a status item naming the `jadpo` running, "Open Generated File", and packaging and publishing on each release, switched off until the Marketplace and Open VSX are set up.

partly

Agent tools

Partly built: the catalogues and the similar-helper check, a declinable error, are built; `migrate` is built; `impact`, `domain`, `rename` and `seed` are not built yet, nor are the agent skill and generated CI.

built

Suggestions

Built: `jadpo suggest` with its six signal kinds and taught signals, the catalogue, accepted findings, `ignore`, `found`, `share`, `suggestions { }` and the committed taught record, `share` against a fake of Jadpo HQ (HQ itself comes later).

not yet

Review and sign-off

Not built yet: `jadpo approval`, which comes with [Records and manifest](/docs/records-and-manifest).

built

Build-only errors

Built: `jadpo build` for the one deployable an app that declares none has and for declared deployables, with their `toolchain.target_*` errors; its `settings` line, and a Worker's `secrets: { required: [ ] }`, name every setting a deployable reads, its connections' included.

## Personal data[Read about it](/docs/personal-data)

State

Feature

Status

built

An entity's and an event's `personal: PersonalData.<category>`

Built: it is read and checked against the fourteen categories, for the [AI](/docs/ai) page's check of what reaches a model.

not yet

Everything else on this page

Not built yet: it is on [the roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md).

## Built-in services[Read about it](/docs/built-in-services)

The errors this page describes are built with the feature they belong to.

State

Feature

Status

built

Email

Built: email's templates, the shared layout, `email:`, sending after commit through the SMTP driver, attachments and parking ([Email templates and sending](/docs/email-templates-and-sending)). The SMTP conversation runs in the driver, over the host's transport and its TLS upgrade ([How it is built](https://github.com/jadpo-dev/jadpo/blob/main/docs/compiler-runtime.md), "TLS through the transport").

built

Jadpo's own magic-link email

Built: at all five levels, worded by Jadpo or reworded by the app, wrapped in the app's layout, the app's own email filled with the link and the code, or the app's own sending given them ([Jadpo's own magic-link email](/docs/default-magic-link-email), [Your own magic-link email](/docs/custom-magic-link-email)).

not yet

The privacy emails

Not built yet. They come with data requests ([Data requests](/docs/data-requests)).

built

Mail packages

Built: a mail package as the connection, partials and `email.sent` ([Mail packages, partials and `email.sent`](/docs/mail-packages-partials-and-email-sent)).

built

The dev inbox and the health score

Built: the dev inbox, `jadpo email`, the health score, `email.health_problem` and `jadpo email check-domain` ([The dev inbox and the health score](/docs/the-dev-inbox-and-the-health-score)), with SpamAssassin's rules in the score ([SpamAssassin in the health score](/docs/spamassassin-in-the-health-score)). Not built yet: the inbox page as part of the developer console, and its link to each mail's trace, which comes with `jadpo trace`.

built

Rate limits

Built: default rate limits with routes, and their store on Workers, Cloudflare's rate-limiting binding ([Rate limits on Workers](/docs/rate-limits-on-workers)). Not built yet: Redis's driver, which comes with caches. Until then a deployable whose store is Redis counts in its own memory, which on Workers is the judgement call `rate_limits.counted_in_memory`. The binding's windows and the Wrangler entries aren't yet checked against the real edge.

built

The capability seam

Built: the seam every capability's calls go through, with a delivery that hands its event to a capability, parked as `outcome_unknown` when a send without a key may have acted ([The seam every outside call goes through](/docs/the-seam-every-outside-call-goes-through)).

partly

Files

Partly built. Built: the `files` capability's first part on that seam: `Driver.disk` connections, `File` fields, `store.put`, `store.read` with its whole-read cap and its two errors, the disk driver `jadpo dev` keeps files with and the in-memory store a test's are in, which the file helpers' reads walk ([Data formats](/docs/data-formats-json-csv-tsv-and-json-lines); [Files: `put`, `read` and the disk driver in development](/docs/files-put-read-and-the-disk-driver-in-development)); the pieces the file helpers' writes put, joined into one file or dropped by the store ([Files: an export's pieces](/docs/export-file-pieces)); and a gzip file unpacked as the file helpers read it, up to `max_unpacked_size:` ([Reading gzip](/docs/reading-gzip)). Not built yet: upload slots, multipart ones included, downloads, deleting and erasing a file's bytes, the S3 driver, a deployable's disk driver at its `path:` and `free_space_floor:`, the error for a disk driver's root inside the project, checking a stored file against its field's `max_size:`, `types:` and `store:` as it is written, `fixture_file` and telling the store to fail from a test, and image variants and scanning when an app needs them.

not yet

Flags

Not built yet.

not yet

Audit

Not built yet.

not yet

Search

Not built yet.

not yet

Documents

Not built yet.

not yet

Bot protection

Not built yet.

not yet

Outgoing webhooks

Not built yet.

not yet

The `telemetry:` section

Not built yet, nor telemetry in the developer console.

not yet

Path IDs

Not built yet for requests. Each body's ways are numbered, and the differential run compares the paths each test's bodies took, but no request carries a `path` or a `path_key`.

not yet

Monitoring thresholds

Not built yet.

[The roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md) says when.

## Debugging and review[Read about it](/docs/debugging-and-review)

State

Feature

Status

built

`jadpo calls`, `calls show` and `calls script`

Built.

built

Each step a request's action reached, as a trace line in `jadpo dev`

Built. Until the timelines are built, each step is a line under its request's line in `jadpo dev`, and a delivery whose action reached steps gets a line of its own ([design notes for jobs and events](https://github.com/jadpo-dev/jadpo/blob/main/docs/language/notes/12-jobs-and-events.md)).

built

`jadpo why <schedule>`

Built: it answers why a schedule didn't run ([Watching schedules](/docs/what-an-operator-sees#watching-schedules)).

not yet

Mapped `.jadpo` stacks, `jadpo incident`, the other forms of `why`, timelines, `test new --from`, `call` and the approval report

Not built yet: these come first ([the roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md)). Until `jadpo approval` is built, `jadpo translations missing` lists wording not yet accepted.

not yet

The developer console, MCP and the review web view

Not built yet: they come after those, as product work.

not yet

`jadpo traces`, `metrics`, `logs` and `watch`; path coverage, production counts in review, replay and query cost

Not built yet.

## Records and manifest[Read about it](/docs/records-and-manifest)

State

Feature

Status

built

Manifest

Built: `jadpo check` writes `build/manifest.json` at `format` 2, with nodes for [project layout and modules](/docs/project-layout-and-modules), [values and types](/docs/values-and-types), [logic](/docs/logic) and [failures](/docs/failures) and their `calls`, `uses` and `raises` edges, policy's grants, field restrictions, tenancies and listed actions with `grants` and `scopes` edges, prompts, and the connections, packages, operations, hosts, lock lines, principals, sign-in, generated routes, settings, locale set, rate limits, schedules and subscribers of [Identity](/docs/identity), [Configuration and time](/docs/configuration-and-time), [Integrations](/docs/external-services) and [Jobs and events](/docs/jobs-and-events), and the build stamp. The graph's diff classifies their changes as [Package upgrades](/docs/package-upgrades) and the [acceptances](/docs/acceptances) table say (`PackageChange`, `PolicyChange`). Caches, OAuth scopes, personal fields and thresholds join as their parts of the language are built.

partly

Views of it

Partly built: the library and failure catalogues are built, and one OpenAPI document per API in `build/openapi/`; the other reports and the monitoring rules come with their parts of the language.

built

Migrations

Built: `jadpo migrate new` writes each folder, and `jadpo check` fails while the entities and the latest snapshot disagree. Each folder is a `migration_snapshot` node in the manifest.

built

Stable identity

Built: a key is the kind and the born name, a function or type declared in a domain carries its domain, and a test's key is the file it sits beside and its sentence. The registry is read once `jadpo rename` writes it ([Tooling](/docs/tooling)).

partly

API record

Partly built: `jadpo api update` writes `api/<api>.jadpo_record` for each API with routes, and `jadpo check` fails with `record.out_of_date` while one disagrees with the routes, naming what changed. Not built yet: breaking-change classification and acceptances.

partly

`.jadpo_record` files

Partly built: every record in the record format, the API record without `version:`, the registry as `database/identities.jadpo_record`, the header check, `record.out_of_date`, `record.edited` and `record.format_newer`, `jadpo records` and `jadpo records update`, and the `.gitattributes` lines `jadpo new` writes. Not built yet: telling a careful hand edit of a view from a stale one, which needs the base build that comes with `jadpo approval`; the editor grammar and `jadpo lsp` serving records.

built

Event records

Built: one view per domain with events, `domains/<domain>/events/events.jadpo_record`, written by `jadpo records update` and checked as the API record is; what [The event record](/docs/declaring-an-event#the-event-record) records. Acceptances come with the API record's.

built

Lock and package surfaces

Built. The lock is a ledger read and checked like the others, and `jadpo check` holds each installed package to its line and digest ([Integrations](/docs/external-services) gives the digest), and its `jadpo version` pin to the line `app.jadpo` names. `jadpo toolchain pin` and `unpin` write the pin, and the package commands and `jadpo records update` keep it. `jadpo package add`, `update`, `remove`, `link` and `unlink` write it, each line through the ledger's writer, sorted; `git` lines record the repository as written, the tag and the tag's commit, `path` lines a folder relative to the root, and a `link` line replaces the package's line while the replaced one waits in `.jadpo/links` (git-ignored, in the lock's own format) for `unlink`. Two versions of one package are locked side by side, each on its own line, and `update` names the version while two are held. A package surface is `record surface 1`, a view written by `jadpo package check` in a package's own repository, verified at install against its package's code, and read by `jadpo package show`; installed, a surface is held by its package's digest rather than regenerated, so `jadpo records` doesn't list it, and an own integration's is written to `build/providers/` ([Integrations](/docs/external-services)). `jadpo package update` prints this page's review of the surface's changes, each entry marked `used by the app` and `needs a person`; the acceptance it calls for comes with `jadpo approval`.

built

Build stamp

Built for native and Workers deployables: `jadpo build` writes the build id (`b_` and twelve hex digits of a SHA-256 over the deployable's program digest, the compiler, the target and `jadpo.lock`), the commit, whether the tree was modified, the compiler, the deployable and the target into the binary or module as a constant, and every event it logs carries them ([A native deployable](/docs/a-native-deployable), [A Workers deployable](/docs/a-workers-deployable)). `jadpo check` writes the manifest's `source` (`commit`, left out when git doesn't track the project, and `modified`) and `deployables`, each deployable's target and build id, which digests a declared deployable's declaration too, so two deployables of one app never share one ([Declared deployables](/docs/declared-deployables)); a project with errors has none.

not yet

Approval, acceptances, package upgrade plans, `jadpo incident`

Not built yet; see [the roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md).

## Standard library[Read about it](/docs/standard-library)

State

Feature

Status

built

Everything on this page not listed below

Built

not yet

Keys held as data, with encrypted fields: `crypto.verify_totp`, HS256 in `crypto.verify_jwt`, per-device signatures, storing a `TotpSecret` or a `SecretText`

Not built yet: waits on [Personal data](/docs/personal-data), after the first build ([the roadmap](https://github.com/jadpo-dev/jadpo/blob/main/docs/roadmap.md))

not yet

A `type.standard_exists` or `type.standard_clash` swap of a type already stored or on the wire, and `jadpo rename`

Not built yet: a swap waits on [Records and manifest](/docs/records-and-manifest), `jadpo rename` on [Tooling](/docs/tooling)

not yet

A query comparing or ordering by an amount of money, a one-step update working one out, a backfill of a new required one, and a condition on a JSON-held field

Not built yet: `toolchain.not_built_yet` names each

not yet

The UK modulus check in `BankAccount`

Not built yet: waits on Vocalink's permission to ship its tables

not yet

Checking `UnLocode`, `IataAirport`, `IcaoAirport`, `IataAirline` and `Icd10Code` against their lists

Not built yet: waits on licences that allow shipping the lists

not yet

[Policy](/docs/policy)'s scopes narrowing `OAuthScope`

Not built yet: waits on [Policy](/docs/policy)

not yet

Legacy encodings in the file readers

Not built yet: waits on an application that needs one

not yet

`jadpo replay`, and a calendar file's writer

Not built yet: `jadpo replay` waits on [Debugging and review](/docs/debugging-and-review), a calendar file's writer on an application that needs one

not yet

What [Personal data](/docs/personal-data) does with each standard type's personal data category

Not built yet: waits on [Personal data](/docs/personal-data)

partly

The rest of geospatial and AI

Partly built: [What is built: Geospatial](/docs/geospatial-built) and [What is built: AI](/docs/ai-built) say which parts

## Geospatial[Read about it](/docs/geospatial)

State

Feature

Status

built

Everything on this page but the rows below

Built.

not yet

Geometries in Redis

Not built yet: waits for entities in Redis ([Entities in Redis](/docs/queries-on-entities-in-redis)). Until then nothing stores a geometry there. A Redis entity will keep a geometry as its GeoJSON, and every geometry, with and without altitude, comes back from its GeoJSON unchanged, except that a polygon wound clockwise comes back wound by the right-hand rule, which PostGIS storage doesn't do.

not yet

A `geo.` condition in an include or an aggregate query

Not built yet (`toolchain.not_built_yet`): an include's records aren't checked again by the code yet, and an aggregate's totals are the database's ([The aggregates](/docs/counts-sums-and-groups#the-aggregates)).

not yet

`IndexKind`s other than `geographic` and `hnsw`

Not built yet ([Special kinds of index](/docs/indexes#special-kinds-of-index)).

## AI[Read about it](/docs/ai)

A feature not built yet is `toolchain.not_built_yet` where it is written.

State

Feature

Status

built

Everything else on this page

Built.

not yet

The prompts' entry in [the personal-data report](/docs/the-personal-data-report), and flagging a sensitive category in the approval report

Not built yet: comes with that report.

not yet

The `ErasureNotPossible` acceptance for the `ai` connection

Not built yet: comes with [acceptances](/docs/acceptances).

not yet

Keeping prompts and answers in production (`keep_content:`)

Not built yet: needs [encrypted fields](/docs/encrypted-fields).

not yet

A package's `embed:` with a `batch:` below 100

Not built yet.

not yet

The conformance suite for a capability other than `ai`, or for a package with fixed `hosts:`; a passing run pinned to the package's digest and the registry's listing; running it in scheduled CI

Not built yet: the listing comes with the hosted registry, scheduled runs with the CI work.
