{
  "version": "0.3.0",
  "pages": [
    {
      "id": "primer",
      "kind": "primer",
      "title": "Primer",
      "summary": "Read this once before you write a Jadpo app.",
      "tokens": 6293,
      "hash": "sha256:87570d4486de2e860976ee9f32012486fa5ac78bd7d4de73c8ae77405af96aa9",
      "area": null,
      "links": [
        "failure.kind_required",
        "grants",
        "how-integrations-fit-together",
        "kinds-of-test",
        "learn",
        "learn-setting-up",
        "learn-sign-in",
        "magic-links",
        "migrations",
        "named-queries",
        "the-operations-every-entity-gets",
        "type-email",
        "type-instant",
        "type-money",
        "type-postal-address",
        "type-uuid"
      ]
    },
    {
      "id": "learn",
      "kind": "learn",
      "title": "Learn Jadpo",
      "summary": "This path builds one app, a todo list with sign-in, from an empty folder to a deployed server.",
      "tokens": 972,
      "hash": "sha256:27cc1a1166b85b101ebb5a6a580528f5f63d1bf9fc0eddee680071cef1b6278b",
      "area": null,
      "links": [
        "learn-changing",
        "learn-failures",
        "learn-first-route",
        "learn-policy",
        "learn-reading",
        "learn-server",
        "learn-setting-up",
        "learn-settings",
        "learn-sign-in",
        "learn-storing",
        "learn-tests",
        "learn-types",
        "learn-users",
        "learn-workers",
        "primer"
      ]
    },
    {
      "id": "learn-setting-up",
      "kind": "learn",
      "title": "What Jadpo is, and setting up",
      "summary": "Jadpo is a programming language for web backends: the server side of an app, which keeps its data and answers its HTTP requests.",
      "tokens": 1423,
      "hash": "sha256:fcc3d0e8ac95a2480fc9b6b55ee5333bfa43b93bc7785f2f62816b686e44cb94",
      "area": null,
      "links": [
        "learn-first-route",
        "primer"
      ]
    },
    {
      "id": "learn-first-route",
      "kind": "learn",
      "title": "A project and your first route",
      "summary": "On this page you start the todo app that the rest of this path builds, and get it answering its first HTTP request.",
      "tokens": 3169,
      "hash": "sha256:067a66b01d2fee8411e9bafc902d65f2590dc98ec11a855a67fff451206d9eff",
      "area": null,
      "links": [
        "suggestions"
      ]
    },
    {
      "id": "learn-types",
      "kind": "learn",
      "title": "Types",
      "summary": "On page 2 a todo's title was any `Text`, so the app took an empty title, or one a megabyte long.",
      "tokens": 2236,
      "hash": "sha256:a9341fb2fac4f182aaf3f69dd649a533c789e31e6b3d067d7a17a837f9e8ede4",
      "area": null,
      "links": [
        "absent-values",
        "enums",
        "named-types",
        "type-duration",
        "type-email",
        "type-instant",
        "type-money",
        "type-url",
        "type-uuid"
      ]
    },
    {
      "id": "learn-storing",
      "kind": "learn",
      "title": "Storing todos",
      "summary": "So far `add_todo` sends a todo back and forgets it.",
      "tokens": 2293,
      "hash": "sha256:c8065fab556d77146ecad810c9b4f3653330f81754119803ff9ac60789a27790",
      "area": null,
      "links": [
        "entities-and-the-id",
        "migrations",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "learn-failures",
      "kind": "learn",
      "title": "Failures",
      "summary": "Some requests are well formed but still wrong: a todo due yesterday has a valid date, but no one can do it in time.",
      "tokens": 1435,
      "hash": "sha256:67032de1f4d76266e1b3a33c0f63d337c68005994e7c02b035c0cc825bb294e3",
      "area": null,
      "links": [
        "declaring-a-failure",
        "how-failures-reach-the-client",
        "type-instant"
      ]
    },
    {
      "id": "learn-reading",
      "kind": "learn",
      "title": "Reading todos",
      "summary": "The app stores todos but can't show them.",
      "tokens": 2133,
      "hash": "sha256:54108a23313537dd0f414f09c794c55ab423bd54fa750952c868d444ed30e63f",
      "area": null,
      "links": [
        "filters",
        "named-queries",
        "order-and-pages"
      ]
    },
    {
      "id": "learn-changing",
      "kind": "learn",
      "title": "Changing and deleting todos",
      "summary": "This page adds the routes that change a todo: `PATCH /todos/{id}` edits its title or marks it done, and `DELETE /todos/{id}` removes it.",
      "tokens": 1840,
      "hash": "sha256:af64712faab04a39ac35bac50462f35e42802d7219d0ef50f1d8e309b2652023",
      "area": null,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "learn-tests",
      "kind": "learn",
      "title": "Tests",
      "summary": "You've been checking the app by hand with `curl`.",
      "tokens": 1648,
      "hash": "sha256:4cf1c6412fd47d94c54b844aeba85403f22c629c2d5d290251eee12c20e1f155",
      "area": null,
      "links": [
        "kinds-of-test",
        "shared-test-data-fixtures",
        "writing-a-test"
      ]
    },
    {
      "id": "learn-settings",
      "kind": "learn",
      "title": "Settings",
      "summary": "Some values differ between your machine and the server the app runs on: the site's address, a mail server's password, a limit you want to tune without a release.",
      "tokens": 1889,
      "hash": "sha256:232d1814d2b181ba01bbb127043c17e8620c71d75516aaf027436057ed6991b9",
      "area": null,
      "links": [
        "secrets",
        "settings-config-jadpo",
        "type-duration",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "learn-users",
      "kind": "learn",
      "title": "Users and the principal",
      "summary": "Until now anyone could call every route, and a todo belonged to no one.",
      "tokens": 3362,
      "hash": "sha256:3fd58f1039b3ccc70abb3a4abc2c54ad536e37da41ff23e0769b2fe8a1d1f0b0",
      "area": null,
      "links": [
        "migrations",
        "the-principal",
        "who-is-calling-current-principal"
      ]
    },
    {
      "id": "learn-sign-in",
      "kind": "learn",
      "title": "Signing in by email",
      "summary": "Page 10 gave the app users, but no way to sign in.",
      "tokens": 3579,
      "hash": "sha256:faf8b4bb1d51c9c6ac186f310543b50f66d5d471658781c2a4c010b0a174aa86",
      "area": null,
      "links": [
        "a-person-the-app-has-not-seen",
        "guide-add-sign-in",
        "magic-links",
        "the-dev-inbox-and-the-health-score",
        "type-email",
        "type-hostname",
        "type-url"
      ]
    },
    {
      "id": "learn-policy",
      "kind": "learn",
      "title": "Who may see what",
      "summary": "Since page 10, any signed-in person can read and change anyone's todos.",
      "tokens": 1954,
      "hash": "sha256:efb6f01e7216b11d016300138411a0fb12c028bf46669cd0a742201b7dc075fc",
      "area": null,
      "links": [
        "a-user-field-on-the-record",
        "grants",
        "when-policy-says-no"
      ]
    },
    {
      "id": "learn-server",
      "kind": "learn",
      "title": "Deploying to a server",
      "summary": "`jadpo dev` runs the app with a throwaway database and catches every email.",
      "tokens": 1993,
      "hash": "sha256:7c5062100a8a63fff38885a2a250e96226e66b5be7c15568f3c40d3775b3e2b9",
      "area": null,
      "links": [
        "a-native-deployable",
        "database-and-other-connection-urls"
      ]
    },
    {
      "id": "learn-workers",
      "kind": "learn",
      "title": "Deploying to Cloudflare Workers",
      "summary": "Cloudflare Workers runs your code on Cloudflare's network, close to whoever calls it, with no server of your own to look after.",
      "tokens": 1742,
      "hash": "sha256:157ee36f2ed43f6b9edaa1df2c2c9f7553d97965a5982081f69acd04850848fc",
      "area": null,
      "links": [
        "a-workers-deployable",
        "declared-deployables",
        "primer",
        "rate-limits-on-workers"
      ]
    },
    {
      "id": "guides",
      "kind": "guide",
      "title": "Guides",
      "summary": "Each guide does one common job in a Jadpo app from start to finish: the code to write, the commands to run and what they print, and the reference topics that have the full rules.",
      "tokens": 1001,
      "hash": "sha256:153b63fab9b68beb939d621e2ef5974d4925e1267812c9656054d59b707b2302",
      "area": null,
      "links": [
        "guide-add-search-to-a-list",
        "guide-add-sign-in",
        "guide-ask-a-model-for-a-typed-answer",
        "guide-build-an-api",
        "guide-call-an-outside-api",
        "guide-deploy-natively",
        "guide-deploy-to-workers",
        "guide-export-records-to-a-file",
        "guide-get-a-sign-off",
        "guide-handle-failures",
        "guide-keep-a-record-of-who-changed-what",
        "guide-keep-customers-data-apart",
        "guide-limit-how-often-a-route-is-called",
        "guide-query-records",
        "guide-receive-a-webhook",
        "guide-run-background-work",
        "guide-send-an-email",
        "guide-ship-a-change-behind-a-flag",
        "guide-store-and-change-a-record",
        "guide-translate-your-apps-text",
        "guide-write-tests",
        "learn"
      ]
    },
    {
      "id": "guide-build-an-api",
      "kind": "guide",
      "title": "Build an API",
      "summary": "An API in Jadpo is a set of routes, each saying what it takes in, what it sends back and what it runs, and Jadpo does the rest.",
      "tokens": 2079,
      "hash": "sha256:524269f5376784024d33456ed533a8880dcfccc2ba4e9c27adf8aa9217620180",
      "area": null,
      "links": [
        "guide-add-sign-in",
        "guide-get-a-sign-off",
        "guide-handle-failures",
        "guide-query-records",
        "guide-store-and-change-a-record",
        "how-failures-reach-the-client",
        "one-input",
        "openapi",
        "output-and-status",
        "paths-and-placeholders",
        "route-groups",
        "the-public-api-record"
      ],
      "group": "Building"
    },
    {
      "id": "guide-store-and-change-a-record",
      "kind": "guide",
      "title": "Store and change a record",
      "summary": "A record your app keeps is an entity: think of a table, where each field is a column with a Jadpo type, and the entity also says who may create, read, change and delete its records.",
      "tokens": 1976,
      "hash": "sha256:c94ca0528592f5b618e50f3670048958e018264e5fab8ec40caaac2eef547d16",
      "area": null,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "entities-and-the-id",
        "fields-and-their-settings",
        "guide-add-sign-in",
        "guide-handle-failures",
        "guide-query-records",
        "migrations",
        "the-operations-every-entity-gets",
        "unique-rules",
        "when-a-write-is-refused"
      ],
      "group": "Building"
    },
    {
      "id": "guide-query-records",
      "kind": "guide",
      "title": "Query records",
      "summary": "Every read of stored records is a named query: one file that says which entity it reads, which records it keeps, in what order and how many.",
      "tokens": 1632,
      "hash": "sha256:801ebc3f7ea9242d34f7ce2969597b4bdb7610b4ea39c63130672536ebd0413f",
      "area": null,
      "links": [
        "a-user-field-on-the-record",
        "counts-sums-and-groups",
        "filters",
        "guide-add-sign-in",
        "guide-store-and-change-a-record",
        "named-queries",
        "order-and-pages",
        "type-instant",
        "type-uuid"
      ],
      "group": "Building"
    },
    {
      "id": "guide-handle-failures",
      "kind": "guide",
      "title": "Handle failures",
      "summary": "In Jadpo, a way an action can fail is a type of its own, listed in the action's signature, and the compiler makes every caller deal with it.",
      "tokens": 2000,
      "hash": "sha256:926014b4039f0225120e8a03d3af70fdf3feb0d0cd501769f3e0e68663dc1d4f",
      "area": null,
      "links": [
        "declaring-a-failure",
        "failure-kinds",
        "guide-query-records",
        "guide-store-and-change-a-record",
        "guide-write-tests",
        "handling-a-failure-in-match",
        "passing-a-failure-on-attempt",
        "saying-what-can-fail-fails",
        "turning-one-failure-into-another",
        "what-the-client-sees"
      ],
      "group": "Building"
    },
    {
      "id": "guide-add-sign-in",
      "kind": "guide",
      "title": "Add sign-in",
      "summary": "Jadpo writes the sign-in routes for you: you say which ways in your app accepts, which stored record is a person, and what happens the first time someone new signs in.",
      "tokens": 3600,
      "hash": "sha256:425e7f0d4c859054a10fd8c5a622c800d79d224b53f41083279059cdab601422",
      "area": null,
      "links": [
        "a-membership-role",
        "a-person-the-app-has-not-seen",
        "a-user-field-on-the-record",
        "checking-the-person-sign-in",
        "guide-write-tests",
        "magic-links",
        "passkeys",
        "routes-signed-in-by-default",
        "the-principal",
        "ways-to-sign-in",
        "who-is-calling-current-principal"
      ],
      "group": "Building"
    },
    {
      "id": "guide-run-background-work",
      "kind": "guide",
      "title": "Run background work",
      "summary": "Some work happens on no request: a reminder sent each day, or a follow-on step after a change.",
      "tokens": 2456,
      "hash": "sha256:06021e29f3faaacc2ff60bcfc0ab5bbb567279f0cecf19376f090060f64df8bc",
      "area": null,
      "links": [
        "batch-work-keeps-its-progress",
        "batches-work-over-many-items",
        "declaring-an-event",
        "delivery-at-least-once-safe-to-repeat",
        "emitting-an-event",
        "guide-deploy-to-workers",
        "guide-store-and-change-a-record",
        "policy-and-background-work",
        "retries-and-giving-up",
        "schedules",
        "subscribers",
        "type-instant",
        "what-an-operator-sees"
      ],
      "group": "Building"
    },
    {
      "id": "guide-keep-customers-data-apart",
      "kind": "guide",
      "title": "Keep customers' data apart",
      "summary": "When many customer companies share your app, one must never see another's data.",
      "tokens": 3310,
      "hash": "sha256:1cd1dc67211b0593ecae204300f0493a4e673fc2ba990b3354abb6e4069cbbf8",
      "area": null,
      "links": [
        "a-membership-role",
        "background-work-and-tenants",
        "grants",
        "guide-add-sign-in",
        "guide-query-records",
        "tenancy",
        "the-permissions-report"
      ],
      "group": "Building"
    },
    {
      "id": "guide-translate-your-apps-text",
      "kind": "guide",
      "title": "Translate your app's text",
      "summary": "Text your server writes for people, such as a page's headline or a failure's wording, is translated in Jadpo itself.",
      "tokens": 3483,
      "hash": "sha256:4a2f4b8508d4f99c226a55348ad0db3766182a4c0c38069c2d5de2669e190c7e",
      "area": null,
      "links": [
        "email",
        "enums-with-wording",
        "exchanging-translations",
        "failures-for-client-apps",
        "guide-build-an-api",
        "locales",
        "tooling-for-translations",
        "translations-as-messages",
        "type-locale"
      ],
      "group": "Building"
    },
    {
      "id": "guide-send-an-email",
      "kind": "guide",
      "title": "Send an email",
      "summary": "An email in Jadpo is a type with its fields, and your code emits one the way it emits an event.",
      "tokens": 3643,
      "hash": "sha256:12cc07dcf80099997fe39053af1b188cad7bff158c8ea0e7aa1d3c14d15f9ede",
      "area": null,
      "links": [
        "built-in-emails",
        "email",
        "email-subjects",
        "erasure-at-providers",
        "guide-build-an-api",
        "guide-get-a-sign-off",
        "guide-translate-your-apps-text",
        "the-dev-inbox-and-the-health-score",
        "the-smtp-driver",
        "type-email",
        "type-locale",
        "where-packages-come-from"
      ],
      "group": "Services"
    },
    {
      "id": "guide-ship-a-change-behind-a-flag",
      "kind": "guide",
      "title": "Ship a change behind a flag",
      "summary": "A feature flag lets you merge and deploy a change switched off, then turn it on for some users or for everyone without another deploy.",
      "tokens": 2313,
      "hash": "sha256:562e37d47f1c95d0ad69c3f8654d5b63438827f05193b3093421df613d0e1c2f",
      "area": null,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "feature-flags",
        "flags-changed-listed-and-removed",
        "flags-declared-read-and-tested",
        "guide-build-an-api",
        "test-settings"
      ],
      "group": "Services"
    },
    {
      "id": "guide-limit-how-often-a-route-is-called",
      "kind": "guide",
      "title": "Limit how often a route is called",
      "summary": "Every route already has a rate limit, so you write nothing to get one: 600 requests a minute for each signed-in caller, and 120 a minute for each address on routes open to anyone.",
      "tokens": 1881,
      "hash": "sha256:67b7a17a80bf99e6e51c2b0eb02356abe66091f8780f905644946f3bc4976e0d",
      "area": null,
      "links": [
        "client-addresses",
        "guide-deploy-to-workers",
        "rate-limited-requests",
        "rate-limits",
        "rate-limits-on-workers"
      ],
      "group": "Services"
    },
    {
      "id": "guide-add-search-to-a-list",
      "kind": "guide",
      "title": "Add search to a list",
      "summary": "Search in Jadpo is one section on an entity.",
      "tokens": 2072,
      "hash": "sha256:d32685c1db42aa26c1fab63f0e9d41fc09f0fee73a51d2b52a5d5c5c05b05966",
      "area": null,
      "links": [
        "guide-build-an-api",
        "marking-personal-fields",
        "order-and-pages",
        "policy.output_field_unproved",
        "search",
        "when-policy-says-no"
      ],
      "group": "Services"
    },
    {
      "id": "guide-keep-a-record-of-who-changed-what",
      "kind": "guide",
      "title": "Keep a record of who changed what",
      "summary": "An entity keeps no history of its changes unless you ask.",
      "tokens": 3078,
      "hash": "sha256:3314e3897c9e9b0d5f519c99155ad68c8da27357a82dc9885a35f207910f93a9",
      "area": null,
      "links": [
        "access-records",
        "audit-trail",
        "guide-add-sign-in",
        "guide-store-and-change-a-record",
        "marking-personal-fields",
        "subscribers",
        "the-permissions-report",
        "type-duration",
        "type-email",
        "type-invoice-number",
        "type-phone-number"
      ],
      "group": "Services"
    },
    {
      "id": "guide-export-records-to-a-file",
      "kind": "guide",
      "title": "Export records to a file",
      "summary": "An export can hold more records than fit in memory or in one request, so in Jadpo it runs in the background.",
      "tokens": 2706,
      "hash": "sha256:e70101a7446149a3d95cb309bb9b1f9ff29bf03671f34148e4c327a4483cbf88",
      "area": null,
      "links": [
        "batches-work-over-many-items",
        "data-formats-json-csv-tsv-and-json-lines",
        "export-file-pieces",
        "files",
        "guide-build-an-api",
        "guide-send-an-email"
      ],
      "group": "Services"
    },
    {
      "id": "guide-ask-a-model-for-a-typed-answer",
      "kind": "guide",
      "title": "Ask a model for a typed answer",
      "summary": "Asking a model in Jadpo looks like calling any other function that can fail.",
      "tokens": 3475,
      "hash": "sha256:10ff55b116448e25104512f02c651b8fcee5df091eb8ad7c7794fdc8f828ff6e",
      "area": null,
      "links": [
        "ai-tests",
        "guide-get-a-sign-off",
        "prompts-as-files",
        "recording-an-answer",
        "safety-and-privacy",
        "semantic.ai_personal_data_not_allowed",
        "the-ai-capability",
        "type-email",
        "typed-output"
      ],
      "group": "Services"
    },
    {
      "id": "guide-call-an-outside-api",
      "kind": "guide",
      "title": "Call an outside API",
      "summary": "Jadpo calls another service through a typed description of its API, called a provider package, and a connection that says where to reach it and with which key.",
      "tokens": 2226,
      "hash": "sha256:bd896d4f259802a3684ac8350df80000c7c670caba2a8e053e8abc88962c2ba6",
      "area": null,
      "links": [
        "calling",
        "connecting-in-app-jadpo",
        "guide-build-an-api",
        "kinds-of-package",
        "provider-calls-in-development",
        "several-changing-provider-calls",
        "tests-and-fakes"
      ],
      "group": "Reaching outside"
    },
    {
      "id": "guide-receive-a-webhook",
      "kind": "guide",
      "title": "Receive a webhook",
      "summary": "A webhook is a request another service sends your app when something happens there, such as a payment going through.",
      "tokens": 2426,
      "hash": "sha256:82bca55a50b4a221d747c06676ac951f38337e2ef2e6d454bac7fd080b3324ff",
      "area": null,
      "links": [
        "delivery-at-least-once-safe-to-repeat",
        "events-from-outside",
        "guide-get-a-sign-off",
        "guide-query-records",
        "how-webhooks-are-received",
        "receiving-from-outside",
        "service-credentials",
        "subscribers"
      ],
      "group": "Reaching outside"
    },
    {
      "id": "guide-write-tests",
      "kind": "guide",
      "title": "Write tests",
      "summary": "Tests in Jadpo sit beside the code they test, and each one gets a PostgreSQL database of its own.",
      "tokens": 2115,
      "hash": "sha256:22307512ff39744175ca41e44eb3cefc78519d61941be068ccfb45cc4bf2658a",
      "area": null,
      "links": [
        "acting-as-a-user",
        "assertions",
        "controlling-time",
        "guide-add-sign-in",
        "guide-call-an-outside-api",
        "guide-query-records",
        "guide-run-background-work",
        "kinds-of-test",
        "running-tests",
        "shared-test-data-fixtures",
        "the-test-database",
        "where-tests-live",
        "writing-a-test"
      ],
      "group": "Shipping"
    },
    {
      "id": "guide-get-a-sign-off",
      "kind": "guide",
      "title": "Get a person's sign-off",
      "summary": "Some changes can hurt someone outside the code: removing a field a client reads, letting more people see a record, sending data to a new outside host, or dropping data for good.",
      "tokens": 1758,
      "hash": "sha256:0f4d543da66bac82776f2d2d59c44c09861f209d3d8b33341c08094c42300622",
      "area": null,
      "links": [
        "acceptance.missing",
        "acceptance.no_reason",
        "acceptances",
        "guide-build-an-api",
        "review-and-sign-off",
        "the-public-api-record"
      ],
      "group": "Shipping"
    },
    {
      "id": "guide-deploy-natively",
      "kind": "guide",
      "title": "Deploy natively",
      "summary": "`jadpo build` turns your app into one program, with nothing else to install beside it, that you run on any Linux or macOS server with a PostgreSQL database.",
      "tokens": 1325,
      "hash": "sha256:5708f36cadd8a41c02aa919b14c337e5832c0ee10ff80aaed363f8a4a6fe6e33",
      "area": null,
      "links": [
        "a-native-deployable",
        "database-and-other-connection-urls",
        "declared-deployables",
        "guide-build-an-api",
        "guide-deploy-to-workers",
        "guide-run-background-work",
        "health",
        "values-on-your-machine-and-in-production"
      ],
      "group": "Shipping"
    },
    {
      "id": "guide-deploy-to-workers",
      "kind": "guide",
      "title": "Deploy to Cloudflare Workers",
      "summary": "`jadpo build` can build your app as WebAssembly for Cloudflare Workers, with the JavaScript that loads it and the description Wrangler, Cloudflare's command-line tool, deploys.",
      "tokens": 1411,
      "hash": "sha256:d4590f524bc7a2edaccc64202b7baa68d73da138d71e57cd1ef59969c005fcac",
      "area": null,
      "links": [
        "a-workers-deployable",
        "declared-deployables",
        "guide-build-an-api",
        "rate-limits-on-workers"
      ],
      "group": "Shipping"
    },
    {
      "id": "project-layout-and-modules",
      "kind": "topic",
      "title": "Project layout and modules",
      "summary": "How a Jadpo project is laid out on disk, how one file sees declarations from another, and the naming rules every name follows.",
      "tokens": 551,
      "hash": "sha256:7bc085de2edb9a124418e8ac82ed517c8d3fc4c516f274d98255d05875349618",
      "area": 1,
      "links": [],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "project-layout",
      "kind": "topic",
      "title": "Project layout",
      "summary": "A project is the folder that holds `app.jadpo`.",
      "tokens": 244,
      "hash": "sha256:3a6ac3f7cf69e7108f1d80dc5582ca57ef751cef4da4dc5293f945c96083d387",
      "area": 1,
      "links": [
        "files-and-names",
        "layout-in-detail"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "source-files",
      "kind": "topic",
      "title": "Source files",
      "summary": "File order and declaration order never matter.",
      "tokens": 118,
      "hash": "sha256:2eb412d9bd7177f155c19d6f754e595649e9ca30a1a64e7b6a0d64353810c1cf",
      "area": 1,
      "links": [
        "files-and-names",
        "semantic.duplicate_declaration"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "domains-instead-of-modules",
      "kind": "topic",
      "title": "Domains instead of modules",
      "summary": "Jadpo has no modules.",
      "tokens": 118,
      "hash": "sha256:d10f54bb60942d3b3ac2ec5e7960f082845ea304713ff144ff2fe0c15ee1bb54",
      "area": 1,
      "links": [
        "imports",
        "ownership-and-calls-replace-modules"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "naming",
      "kind": "topic",
      "title": "Naming",
      "summary": "Every name has one spelling, decided by what kind of thing it names.",
      "tokens": 773,
      "hash": "sha256:a8cc7e49d0fe0eec8ca3b85a092130e4219ebbcefcf3acb22a9ab437cbf00022",
      "area": 1,
      "links": [
        "objects",
        "suggestions",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "comments",
      "kind": "topic",
      "title": "Comments",
      "summary": "A line comment starts with `//`.",
      "tokens": 94,
      "hash": "sha256:4e3c266ec9d5dc0c8e8de2f9eb7b9c7d24ed9f591ef53545b3928b5a35b6263b",
      "area": 1,
      "links": [],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "declining-a-judgement-call",
      "kind": "topic",
      "title": "Declining a judgement call",
      "summary": "Most rules report plain mistakes, and only a fix answers them.",
      "tokens": 2088,
      "hash": "sha256:6780f014d2ce1d3e5b6ffb68b05af320ff4be05da5b62d6c9777e2aa72e1dd8f",
      "area": 1,
      "links": [
        "acceptances",
        "ai",
        "built-in-services",
        "commands-for-records-findings-and-review",
        "constant.similar_exists",
        "decline.not_declinable",
        "decline.unused",
        "external-services",
        "feature-flags",
        "jobs-and-events",
        "library.similar_exists",
        "logic",
        "policy",
        "policy.call_ungranted",
        "query.nearest_exact",
        "records-and-manifest",
        "standard-library",
        "step.late_failure",
        "translations-as-messages",
        "type.batch_order_updatable",
        "type.unit_as_number",
        "values-and-types"
      ],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "layout-in-detail",
      "kind": "topic",
      "title": "The layout in detail",
      "summary": "Every project has the same shape at every size.",
      "tokens": 958,
      "hash": "sha256:12cdb3a15f24c30351680b164edf0cdbd30f3b2e2a2b953fe0f7ff4353a4c27a",
      "area": 1,
      "links": [],
      "aliases": [
        "decided-layout"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "the-root",
      "kind": "topic",
      "title": "The root",
      "summary": "The files and folders a project's root may hold, and nothing else.",
      "tokens": 799,
      "hash": "sha256:af590372e9a9ed1e710e4faabdfc80fe47652f04013ce3267251f8151ffdfa48",
      "area": 1,
      "links": [
        "suggestions",
        "the-jadpo-command",
        "the-package-format",
        "translations-as-messages",
        "where-packages-live",
        "which-jadpo-runs"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "application-sections",
      "kind": "topic",
      "title": "What application { } holds",
      "summary": "`application { }` in `app.jadpo` holds the settings for the whole app, each in a section of its own.",
      "tokens": 748,
      "hash": "sha256:11b1bb1114d1d0b0b6093e5a89d32824f2dc2b07c3c0edc01ae367d7c84f6253",
      "area": 1,
      "links": [
        "apis-and-versions",
        "bot-protection",
        "client-addresses",
        "connecting-in-app-jadpo",
        "data-requests",
        "declared-deployables",
        "documents",
        "email",
        "emitting-an-event",
        "encrypted-fields",
        "events-from-outside",
        "files",
        "oauth-grants",
        "rate-limits",
        "schedules",
        "several-changing-calls-in-one-action",
        "telemetry",
        "the-ai-capability",
        "the-application-and-revocation",
        "the-root",
        "what-the-compiler-checks-of-translations",
        "where-events-travel",
        "where-packages-come-from"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "domains",
      "kind": "topic",
      "title": "Domains",
      "summary": "Every project has at least one domain, and all code outside the root files lives in one.",
      "tokens": 1176,
      "hash": "sha256:cc0d2781c77a1bd09834365c76de75f4bd89733cadf0f386b00e98b9eed43123",
      "area": 1,
      "links": [
        "acceptances",
        "constants",
        "data",
        "documents",
        "email",
        "external-services",
        "failures",
        "prompts-as-files",
        "records-and-manifest",
        "translations-as-messages"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "files-and-names",
      "kind": "topic",
      "title": "Files and names",
      "summary": "Each file holds one primary declaration, named after it: `ServiceCredential` lives in `service_credential.jadpo`.",
      "tokens": 1588,
      "hash": "sha256:a0efd6b4f1674cec6b877c3a5e09aa9234466837c5c4592edc018c61b5e6d412",
      "area": 1,
      "links": [
        "constants",
        "failures",
        "imports",
        "tools-for-agents"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "sharing-and-promotion",
      "kind": "topic",
      "title": "Sharing and promotion",
      "summary": "A type or helper used by one file lives in that file.",
      "tokens": 1369,
      "hash": "sha256:4362c426faa677a888b8a25d86e8da5ffa92ba3bc1a696d638ad42304ca9d69e",
      "area": 1,
      "links": [
        "constants",
        "email",
        "stable-identity",
        "the-package-format"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "ownership-and-calls-replace-modules",
      "kind": "topic",
      "title": "Ownership and calls replace modules",
      "summary": "A domain owns everything in it, and it is the boundary of what other code can see.",
      "tokens": 748,
      "hash": "sha256:b14388d406f52f5aaf68ecfc1d186dd87e4e2bfe82c58a281b1de41455e57ed3",
      "area": 1,
      "links": [
        "calling",
        "imports",
        "shared-test-data-fixtures",
        "the-package-format"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "imports",
      "kind": "topic",
      "title": "Imports",
      "summary": "With imports, the place every name comes from can be read from the file itself.",
      "tokens": 1780,
      "hash": "sha256:3b7728307fef3943465d344c42be62396409ca3b967b2232c0484e0a7e03d98c",
      "area": 1,
      "links": [
        "reads-and-writes",
        "standard-library"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "database",
      "kind": "topic",
      "title": "Database",
      "summary": "The identity registry in `database/`, and the `.jadpo_record` files the compiler writes and you commit.",
      "tokens": 403,
      "hash": "sha256:b2610fe4fc00d2812f52be46cb75bad40e4174eafde5ad6fc7ede21790925c32",
      "area": 1,
      "links": [
        "acceptances",
        "stable-identity",
        "what-is-committed-and-why"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "what-it-looks-like-in-code",
      "kind": "topic",
      "title": "What it looks like in code",
      "summary": "Sketches of how the pieces sit in their files.",
      "tokens": 518,
      "hash": "sha256:73b93a23b77b521640f982c0506127cfe53548bf02575ab86e2e903dbac687b0",
      "area": 1,
      "links": [
        "constants",
        "external-services",
        "http",
        "jobs-and-events",
        "reads-and-writes"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "folders-other-pages-describe",
      "kind": "topic",
      "title": "Folders other pages describe",
      "summary": "The layout only reserves these folders; each piece has its own page.",
      "tokens": 107,
      "hash": "sha256:ce0a4cabcd069f4c1a2567cdd0c4d13e71acbfbef0c757c9220099826585dcc8",
      "area": 1,
      "links": [
        "data",
        "external-services",
        "http",
        "jobs-and-events",
        "translations-as-messages"
      ],
      "aliases": [
        "decided-in-later-areas"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "project-layout-and-modules-built",
      "kind": "topic",
      "title": "What is built: Project layout and modules",
      "summary": "The compiler builds this layout, with each rule's real output under Errors.",
      "tokens": 1170,
      "hash": "sha256:23d8f17f41fcf4ae4b8ed99e49c286b44619b5e58ad30fae6e89c04d8ce14ffe",
      "area": 1,
      "links": [
        "acceptances",
        "application-sections",
        "built-in-services",
        "commands-for-looking-into-and-changing-code",
        "constants",
        "external-services",
        "feature-flags",
        "objects",
        "project-layout-and-modules",
        "records-and-manifest",
        "which-jadpo-runs"
      ],
      "group": "Language",
      "page": "Project layout and modules",
      "status": null
    },
    {
      "id": "values-and-types",
      "kind": "topic",
      "title": "Values and types",
      "summary": "What kinds of value a Jadpo program works with, how you give a value a meaning in your business, and when one type can stand in for another.",
      "tokens": 665,
      "hash": "sha256:2c76adf07da202ae04534af18a482bf7bde0e754f1de57265454f55e6ceb698e",
      "area": 2,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "built-in-types",
      "kind": "topic",
      "title": "Built-in types",
      "summary": "Jadpo comes with its types built in.",
      "tokens": 3813,
      "hash": "sha256:5c07ded14f42f0f1b55df996942de6a3f060f31de9df52fd15bd9b207c3aff59",
      "area": 2,
      "links": [
        "batches-work-over-many-items",
        "declaring-an-event",
        "declining-a-judgement-call",
        "documents",
        "email",
        "failures",
        "files",
        "http",
        "money-and-payments",
        "money-operations",
        "numbers",
        "oauth-grants",
        "packages-use-the-standard-types",
        "search",
        "standard-type-clashes",
        "the-standard-operator-table",
        "translations-as-messages",
        "type-calendar-date",
        "type-calendar-period",
        "type-currency",
        "type-duration",
        "type-instant",
        "type-instant-range",
        "type-length",
        "type-money",
        "type-percentage",
        "type-postal-address",
        "type-semantic-version",
        "type-temperature-difference",
        "type-text-direction",
        "type-uuid",
        "what-the-compiler-checks-of-translations"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "named-types",
      "kind": "topic",
      "title": "Named types",
      "summary": "Most of a program's types are named types: a built-in representation, a name that says what the value means, and the rules a valid value must follow.",
      "tokens": 1301,
      "hash": "sha256:2f6294533ba2fe947eaec92f80ab5548a807e7857eb843683b0d0326fc0ceea1",
      "area": 2,
      "links": [
        "ai-types",
        "data",
        "declining-a-judgement-call",
        "embeddings-and-search",
        "physical-quantities",
        "signals"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "creating-values",
      "kind": "topic",
      "title": "Creating values",
      "summary": "Applying a type to a value, `Type(value)`, creates a value of that type by checking every rule on it and on the types it builds on.",
      "tokens": 3117,
      "hash": "sha256:f4716fb982972b043ef8e3308ae702d6a357af245a8b27a4804d28edf6d469d3",
      "area": 2,
      "links": [
        "absent-values",
        "calling",
        "failures",
        "logic",
        "objects",
        "reads-and-writes",
        "type.invalid_literal"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "signatures-use-named-types",
      "kind": "topic",
      "title": "Signatures use named types",
      "summary": "A function, action or query can't take or return a built-in representation type directly.",
      "tokens": 159,
      "hash": "sha256:ab0a8510778f72bea91a0971282a9c343d0a3fc21a8f0210950ed0a17d99881d",
      "area": 2,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "one-form-for-every-type",
      "kind": "topic",
      "title": "One form for every type",
      "summary": "Every type is declared the same way, `type Name = Base { ... }`.",
      "tokens": 412,
      "hash": "sha256:9f9e2e575488bdcdb58ceb9300a5699659a8717bb79d3167ccdc498b860f7f9f",
      "area": 2,
      "links": [
        "data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "objects",
      "kind": "topic",
      "title": "Objects",
      "summary": "An object is a fixed set of named fields.",
      "tokens": 4244,
      "hash": "sha256:e22c4fb0b5820264636a93d7ea1e0c1881342c122e91d1a00b879018ad49f06b",
      "area": 2,
      "links": [
        "creating-values",
        "data",
        "data-formats-json-csv-tsv-and-json-lines",
        "decoding",
        "every-standard-type-meets-one-contract",
        "http",
        "naming",
        "reads-and-writes",
        "type.record_type_arguments"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "building-a-type-from-other-types",
      "kind": "topic",
      "title": "Building a type from other types",
      "summary": "Most object types are slices of an entity or of another object, so you build them from it rather than repeat its fields.",
      "tokens": 969,
      "hash": "sha256:6081d7e66a1a0dbdcc2fc67d5c4c332c4494efcf6651ff44f095469f7b08cf6d",
      "area": 2,
      "links": [
        "field-restrictions",
        "http"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "absent-values",
      "kind": "topic",
      "title": "Values that may be missing",
      "summary": "There is no `null` or `undefined`.",
      "tokens": 470,
      "hash": "sha256:ef0e530893d29a2da1a690102acb9be4c7fd9133dd593f9d03f10233c7bff7a4",
      "area": 2,
      "links": [
        "logic",
        "reads-and-writes"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "enums",
      "kind": "topic",
      "title": "Enums",
      "summary": "An enum is a closed list of named alternatives.",
      "tokens": 475,
      "hash": "sha256:587d6346271b4c8720d6c9d968170740c16f0de3ce70e99a5f93953f28fcbcb7",
      "area": 2,
      "links": [
        "enums-with-wording",
        "objects"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "collections",
      "kind": "topic",
      "title": "Collections",
      "summary": "`List<T>`, `Set<T>` and `Map<K, V>` can be used as field types, parameter types and boundary types, nested in each other or holding objects.",
      "tokens": 1924,
      "hash": "sha256:d1336660bbfb8913da51ca4da4f5783d9a1a9b4d894d902ad2be1fd4dda982c0",
      "area": 2,
      "links": [
        "logic",
        "maps",
        "sets"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "when-one-type-can-stand-in-for-another",
      "kind": "topic",
      "title": "When one type can stand in for another",
      "summary": "A value can be used where its own type is expected, and where a type it widens to is expected.",
      "tokens": 375,
      "hash": "sha256:9ef70b27756cc88adb687b0ec8e6621ff0a550dcebd22623da7e1407484c88d7",
      "area": 2,
      "links": [
        "generic-code"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "values-never-change",
      "kind": "topic",
      "title": "Values never change",
      "summary": "Every value is immutable.",
      "tokens": 125,
      "hash": "sha256:7718184b1bcbea0750d56e3ceb8796cc757ff13b6580c5a6af8da515e6e06e4f",
      "area": 2,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "values-and-types-built",
      "kind": "topic",
      "title": "What is built: Values and types",
      "summary": "Which parts of Values and types are built, and what the rest waits on",
      "tokens": 193,
      "hash": "sha256:5898bc296e97dd04b49915b8f674d947a50e7f625a4f6a65e4380d9f3ad7d9e9",
      "area": 2,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "logic",
      "kind": "topic",
      "title": "Logic",
      "summary": "How you write what your app does: functions and actions, statements, operators, `match`, `attempt`, loops and generic code.",
      "tokens": 390,
      "hash": "sha256:784a29a7378758b54c3fe198f0a79530afccec40488af4033656a306539cb497",
      "area": 3,
      "links": [],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "functions-and-actions",
      "kind": "topic",
      "title": "Functions and actions",
      "summary": "You write behaviour in three kinds of callable:",
      "tokens": 1118,
      "hash": "sha256:19b006a11d4adfae121a40a8fc0497da9e6600f10a3fd7aff35616365d0c7c80",
      "area": 3,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "constants",
        "failures",
        "named-queries",
        "policy",
        "project-layout",
        "what-a-route-runs"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "variables",
      "kind": "topic",
      "title": "Variables",
      "summary": "A variable never changes unless you write `var mut`, and every variable states its type (Values and types).",
      "tokens": 190,
      "hash": "sha256:579c5c51116e26c9fd8984925878fddcb9f492a46524712c1ed2bec27f83dc2b",
      "area": 3,
      "links": [
        "values-and-types",
        "values-never-change"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "constants",
      "kind": "topic",
      "title": "Constants",
      "summary": "A `constant` names a fixed value at the top of a file.",
      "tokens": 3224,
      "hash": "sha256:2e3e5159bdab69a6c03f3e8d5a664b2b69ff1411f42c8e5ce89e8b4ad11c2cd2",
      "area": 3,
      "links": [
        "computed-backfills",
        "constant.cycle",
        "constant.similar_exists",
        "constant.value_not_fixed",
        "declining-a-judgement-call",
        "expressions-and-operators",
        "feature-flags",
        "files-and-names",
        "library.similar_exists",
        "named-queries",
        "settings-config-jadpo",
        "sharing-and-promotion",
        "signatures-use-named-types",
        "stable-identity",
        "syntax.variable_keyword",
        "testing",
        "the-operations-every-entity-gets",
        "tooling",
        "tools-for-agents",
        "type.invalid_literal"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "statements",
      "kind": "topic",
      "title": "Statements",
      "summary": "A body is a list of statements, one on each line, with no semicolons:",
      "tokens": 519,
      "hash": "sha256:da54d8bd692ac327f4e5121c0a100d8d0a358db8c8ee8c225938817c479d46b4",
      "area": 3,
      "links": [
        "loops",
        "match",
        "raising-a-failure-reject",
        "semantic.unused_result",
        "testing"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "expressions-and-operators",
      "kind": "topic",
      "title": "Expressions and operators",
      "summary": "\"Widening\" is one type standing in for another it is built on (When one type can stand in for another).",
      "tokens": 871,
      "hash": "sha256:e6b00565f5522cdf2c94f4bf7d91c47807ac0b2c972ee1b990599ec8a889e3e9",
      "area": 3,
      "links": [
        "creating-values",
        "logic",
        "numbers",
        "the-standard-operator-table",
        "type.divisor_zero",
        "when-one-type-can-stand-in-for-another"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "match",
      "kind": "topic",
      "title": "Match",
      "summary": "`match` chooses between the cases of a value.",
      "tokens": 563,
      "hash": "sha256:28730069f607631e645f87e0a8154444173b295720b0f7908673e814eb18b3da",
      "area": 3,
      "links": [
        "failures",
        "handling-a-failure-in-match"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "attempt",
      "kind": "topic",
      "title": "Attempt",
      "summary": "A call that can fail must say so where it is called.",
      "tokens": 234,
      "hash": "sha256:7cef5f0ab387aff8acbc0bbc2dcdf10b2fb7414a64bc0d4698b673c904c89a34",
      "area": 3,
      "links": [
        "passing-a-failure-on-attempt"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "loops",
      "kind": "topic",
      "title": "Loops",
      "summary": "`for item in items` goes through a list, and the loop variable takes its type from the list.",
      "tokens": 626,
      "hash": "sha256:f9185af4039a7ac3711cd2ef40f68a039f582be53dc0d0f2795a80d7016cbc8e",
      "area": 3,
      "links": [
        "batches-work-over-many-items",
        "collections",
        "effect.call_in_loop",
        "external-services",
        "maps",
        "reading-in-a-loop",
        "several-changing-calls-in-one-action"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "passing-functions",
      "kind": "topic",
      "title": "Passing functions",
      "summary": "You can pass an inline function only as an argument to a standard-library operation, such as `list.map` or `list.filter`.",
      "tokens": 1079,
      "hash": "sha256:db19c6c046a84bf8d784caf1eea77a082caed3cddf6576f75b547ef11a1c44a3",
      "area": 3,
      "links": [
        "batches-work-over-many-items",
        "how-a-run-is-kept",
        "lists",
        "maps",
        "sets"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "recursion",
      "kind": "topic",
      "title": "Recursion",
      "summary": "A function may call itself, or form a cycle with other functions.",
      "tokens": 523,
      "hash": "sha256:efcadc2ea7757b4b437637a974909c99ece8bf1360f78c11e5b003b142af886c",
      "area": 3,
      "links": [],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "generic-code",
      "kind": "topic",
      "title": "Generic code",
      "summary": "Only the standard library is generic (`List<T>`, `list.count`).",
      "tokens": 228,
      "hash": "sha256:c0c2f51f244465c9b2bce16ec39b4d5f641b9f4aff685e3b7984b954aba6b0eb",
      "area": 3,
      "links": [
        "enums",
        "the-standard-operator-table"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "logic-built",
      "kind": "topic",
      "title": "What is built: Logic",
      "summary": "Which parts of Logic are built, and what the rest waits on",
      "tokens": 56,
      "hash": "sha256:02b76afe8c30753b45a33d77f08f781d8065898b4c6e2535fd649c2eaa55cea0",
      "area": 3,
      "links": [
        "constants"
      ],
      "group": "Language",
      "page": "Logic",
      "status": null
    },
    {
      "id": "failures",
      "kind": "topic",
      "title": "Failures",
      "summary": "Your code says what went wrong, by name, and Jadpo decides how each failure reaches whoever called: the HTTP status, the response body and what is logged.",
      "tokens": 785,
      "hash": "sha256:820c490934c2f017f515d650cc4f90404f2fdae5fe0aaae574f280a09b5a2120",
      "area": 4,
      "links": [],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "declaring-a-failure",
      "kind": "topic",
      "title": "Declaring a failure",
      "summary": "A failure is a way an action or query can fail that its caller is expected to handle, such as stock running out.",
      "tokens": 1070,
      "hash": "sha256:a2c033d20d1cabcc0ae7aeba35bcee18ec3851b16630ef79c10a1ba0c48d2136",
      "area": 4,
      "links": [
        "failure-kinds",
        "handling-a-failure-in-match",
        "how-failures-reach-the-client",
        "jobs-and-events",
        "one-form-for-every-type",
        "project-layout"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "failure-kinds",
      "kind": "topic",
      "title": "Failure kinds",
      "summary": "Every failure has a kind, which decides the HTTP status a client gets and what the failure means.",
      "tokens": 771,
      "hash": "sha256:07f5c897079a2f7fa41833c75f417fa299a84acfc017c94923410fe30d8ded60",
      "area": 4,
      "links": [
        "concealing-records",
        "enums",
        "http",
        "identity",
        "policy"
      ],
      "aliases": [
        "kinds"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "what-the-client-sees",
      "kind": "topic",
      "title": "What the client sees",
      "summary": "Every failure reaches an HTTP client in the same envelope.",
      "tokens": 281,
      "hash": "sha256:83c450ee35e4557bc2ba36e2764a4fcbcfda1f6e662bf06923e7454ccd1fbacb",
      "area": 4,
      "links": [
        "how-failures-reach-the-client"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "saying-what-can-fail-fails",
      "kind": "topic",
      "title": "Saying what can fail: fails",
      "summary": "A function or action lists the failures it can end with after `fails`, in its signature:",
      "tokens": 266,
      "hash": "sha256:05e294a1c67a3415213b5557565f3c1fb088bcd2204c78682cdc11013a9ec227",
      "area": 4,
      "links": [
        "faults",
        "functions-and-actions"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "raising-a-failure-reject",
      "kind": "topic",
      "title": "Raising a failure: reject",
      "summary": "`reject` ends the callable with a declared failure:",
      "tokens": 238,
      "hash": "sha256:e81717694f19a61557e443ffb32828049f81240d9440c77423840191c1fb4808",
      "area": 4,
      "links": [
        "match",
        "secrets",
        "who-is-calling-current-principal"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "passing-a-failure-on-attempt",
      "kind": "topic",
      "title": "Passing a failure on: attempt",
      "summary": "`attempt` passes every failure of a call on to your caller, so each one must be in your own `fails` list.",
      "tokens": 555,
      "hash": "sha256:4568a4fff699da53e282e4536bf7414e3ff4e3bc13b3ad23f0de351cf0240c48",
      "area": 4,
      "links": [
        "attempt",
        "creating-values"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "turning-one-failure-into-another",
      "kind": "topic",
      "title": "Turning one failure into another",
      "summary": "A failure can come from something the compiler knows can go wrong, such as a read that finds nothing, a write that breaks a unique rule or a construction, or from another call.",
      "tokens": 695,
      "hash": "sha256:c550b9a2cef650f48b46322f82eaa1987830f27eaebc1de899da9317339583f2",
      "area": 4,
      "links": [
        "creating-values",
        "handling-a-failure-in-match",
        "json",
        "named-queries",
        "when-a-write-is-refused"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "handling-a-failure-in-match",
      "kind": "topic",
      "title": "Handling a failure in match",
      "summary": "A `match` on a call handles its outcome: one arm for success, and one for each failure the call can produce (Match):",
      "tokens": 219,
      "hash": "sha256:43853a4fa6c2c5a9d89bdc5ee04c519f719b578ae2c74c4c295c970c0412a657",
      "area": 4,
      "links": [
        "logic",
        "match"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "faults",
      "kind": "topic",
      "title": "Faults",
      "summary": "A fault is raised by the runtime when something outside your code goes wrong.",
      "tokens": 791,
      "hash": "sha256:483f25ecb6d2b53717b4e91f665c22adb57560513b2d3fb3ac49247ef4c44b18",
      "area": 4,
      "links": [
        "calling",
        "error-messages",
        "expressions-and-operators",
        "files-put-read-and-the-disk-driver-in-development",
        "recursion"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "concealing-records",
      "kind": "topic",
      "title": "Concealing records",
      "summary": "When policy hides a record from a caller, saying \"forbidden\" would reveal that it exists.",
      "tokens": 147,
      "hash": "sha256:db8eabc4268b3313e02e7e2bedea6fbd02537a8e62310f769e14f33e52901091",
      "area": 4,
      "links": [
        "policy",
        "when-policy-says-no"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "logging",
      "kind": "topic",
      "title": "Logging",
      "summary": "Every failure and fault writes one structured event.",
      "tokens": 219,
      "hash": "sha256:302226b329ee9cfbe424ac5e12bfa357b20503d074fde49c9f956c291442a272",
      "area": 4,
      "links": [
        "failures-built"
      ],
      "group": "Language",
      "page": "Failures",
      "status": "not built"
    },
    {
      "id": "messages-and-languages",
      "kind": "topic",
      "title": "Messages and languages",
      "summary": "A failure's `message` is fixed English for developers and logs.",
      "tokens": 418,
      "hash": "sha256:78045e12360f8280bec498880d678aa8ec780d705ffaa055a3456a4f0015a071",
      "area": 4,
      "links": [
        "failures-for-client-apps",
        "translations-as-messages"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "failures-built",
      "kind": "topic",
      "title": "What is built: Failures",
      "summary": "Which parts of Failures are built, and what the rest waits on",
      "tokens": 216,
      "hash": "sha256:186da2d71ade8c0345b6b560e3f19096a310b2bd13759d31f5ffb24345368895",
      "area": 4,
      "links": [
        "failures",
        "policy"
      ],
      "group": "Language",
      "page": "Failures",
      "status": null
    },
    {
      "id": "data",
      "kind": "topic",
      "title": "Entities, stores and migrations",
      "summary": "How you declare the records your app keeps, where they are stored, and how their shape changes over time.",
      "tokens": 650,
      "hash": "sha256:b1e6557e8bbd21e3fff6dec95bece8b9f51c79542c2f41572ce2d1fb44941a4b",
      "area": 5,
      "links": [
        "policy",
        "reads-and-writes"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "stores",
      "kind": "topic",
      "title": "Stores",
      "summary": "A store is somewhere your app keeps records: a PostgreSQL database, or a Redis server.",
      "tokens": 3606,
      "hash": "sha256:d8a650c41d564dccaea2a9892ce45674fe5bee2b9e9de148bca4abd0b073c10a",
      "area": 5,
      "links": [
        "a-workers-deployable",
        "all-or-nothing-actions-and-concurrent-changes",
        "built-in-services",
        "checking-values-before-the-app-starts",
        "connecting-in-app-jadpo",
        "database-and-other-connection-urls",
        "entities-in-redis",
        "external-services",
        "idempotent-writes",
        "identity",
        "jobs-and-events",
        "logic",
        "reads-and-writes",
        "standard-library"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "entities-and-the-id",
      "kind": "topic",
      "title": "Entities and the id",
      "summary": "An entity is a kind of stored record with a lasting identity, like a table with types.",
      "tokens": 276,
      "hash": "sha256:81bdeae6505fa8e514124a83a5b13d346f8ea68a21469e2b1a830e663ca5846c",
      "area": 5,
      "links": [],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "fields-and-their-settings",
      "kind": "topic",
      "title": "Fields and their settings",
      "summary": "A field's settings, such as `generated:`, `unique:` and `on_delete:`, go in a block after its type, one per line:",
      "tokens": 278,
      "hash": "sha256:8ffbd09d96374824f1b96e422d54048811e498ba6fe21e7a0d9786cab5fc0e3d",
      "area": 5,
      "links": [
        "encrypted-fields",
        "lifecycle"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "unique-rules",
      "kind": "topic",
      "title": "Unique rules",
      "summary": "`unique: true` in a field's block means no two records may hold the same value in that field.",
      "tokens": 264,
      "hash": "sha256:2301d7c002432d70c56e2c9e4f06cb7cdd5753896848a93557b2306c1620cd6e",
      "area": 5,
      "links": [
        "reads-and-writes",
        "tenancy"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "references-and-on-delete",
      "kind": "topic",
      "title": "References and on_delete",
      "summary": "Any field typed `X.id` is a reference to a record of `X`.",
      "tokens": 291,
      "hash": "sha256:2ed3dab245cda0c9c3d8b0c5126b01953b54a28d002eb8466bb7141365e2afe0",
      "area": 5,
      "links": [],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "children",
      "kind": "topic",
      "title": "Children",
      "summary": "A parent doesn't declare its children.",
      "tokens": 130,
      "hash": "sha256:0f83475c5dbe570c1fe32f759663f3b70b96346b8e9b42a83eab0953d95fb8a8",
      "area": 5,
      "links": [
        "reads-and-writes"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "lifecycle",
      "kind": "topic",
      "title": "Lifecycle",
      "summary": "A lifecycle describes the stages a record goes through and when it drops out of normal view.",
      "tokens": 1492,
      "hash": "sha256:6c1b2b4441d2c0bc0da516c6ad1abbedd2d2ed786984eb71d6526ae62b2947fa",
      "area": 5,
      "links": [
        "erasure",
        "policy",
        "reads-and-writes",
        "retention",
        "schedules",
        "settings-config-jadpo"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "indexes",
      "kind": "topic",
      "title": "Indexes",
      "summary": "You don't write the indexes your queries need.",
      "tokens": 836,
      "hash": "sha256:ccaa1016791f3029ec1dcae9228317b262f6471a09182cc4c2cd9f2644a7d8f8",
      "area": 5,
      "links": [
        "geospatial-storage",
        "order-and-pages",
        "search",
        "vector-index"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "caches",
      "kind": "topic",
      "title": "Caches",
      "summary": "Copies of records and query results kept in Redis, so busy pages read them quickly.",
      "tokens": 844,
      "hash": "sha256:d4ff4c31f1c725e43e4cb590f9adb4c63e4ae0791c60f242a338f03f2be8fdba",
      "area": 5,
      "links": [
        "caches-drivers-and-what-they-hold",
        "entities-in-redis",
        "health",
        "money-and-payments"
      ],
      "group": "Built-in services",
      "page": "Caches",
      "status": "not built"
    },
    {
      "id": "entities-in-redis",
      "kind": "topic",
      "title": "Entities in Redis",
      "summary": "An entity may live in a Redis store, for data that is short-lived and harmless to lose.",
      "tokens": 538,
      "hash": "sha256:cefd06999657f897d93d984e2e70f2aa4d9cfe8ee913114d6ddd4801fcd7014e",
      "area": 5,
      "links": [
        "logic",
        "queries-on-entities-in-redis"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": "not built"
    },
    {
      "id": "storage-types",
      "kind": "topic",
      "title": "Storage types",
      "summary": "You never name a column type.",
      "tokens": 1588,
      "hash": "sha256:334ff94a122a369e4420323f362b35fb33eb0a3bbe4dcbf97f896b401ece18a5",
      "area": 5,
      "links": [
        "every-boundary-through-the-contract",
        "geospatial-storage",
        "money-and-payments",
        "structured-values",
        "zones-and-local-times"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "structured-values",
      "kind": "topic",
      "title": "Structured values",
      "summary": "A field whose type is one of your app's enums with data, objects, lists, sets or maps is kept in one `jsonb` column.",
      "tokens": 2774,
      "hash": "sha256:a84ef0f3bfcbe3d811bc68a1909dc20a011e60995eac4f4ab543799ba4b56dbc",
      "area": 5,
      "links": [
        "computed-backfills",
        "http",
        "jobs-and-events",
        "policy",
        "standard-library",
        "standard-type-encodings"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "migrations",
      "kind": "topic",
      "title": "Migrations",
      "summary": "Entities describe the schema you want.",
      "tokens": 2198,
      "hash": "sha256:5c4be77a4eaee0447ee8bc1a28fef79d0aa705830efe0b12117995c0604b0e3d",
      "area": 5,
      "links": [
        "a-native-deployable",
        "acceptances",
        "audit-trail",
        "computed-backfills",
        "files",
        "migration.drop_not_accepted",
        "migration.record_invalid",
        "records-and-manifest",
        "system-tables",
        "tooling"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "computed-backfills",
      "kind": "topic",
      "title": "Computed backfills",
      "summary": "A backfill can be an expression over each row's own stored fields, so a migration can reshape data rather than only fill it with one value.",
      "tokens": 2859,
      "hash": "sha256:2cf627fe781b46142474230af84c86365a273f34feb8d1a0457e463291b95766",
      "area": 5,
      "links": [
        "constants",
        "project-layout-and-modules",
        "reads-and-writes",
        "sql-forms"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "system-tables",
      "kind": "topic",
      "title": "System tables",
      "summary": "The runtime needs tables of its own, for example to hold events until they are delivered.",
      "tokens": 1913,
      "hash": "sha256:603f46d688794aae6a55d6cdf14eb78afae08b0372339a21ee65130f1634d0e7",
      "area": 5,
      "links": [
        "a-person-the-app-has-not-seen",
        "audit-trail",
        "built-in-services",
        "delivery-at-least-once-safe-to-repeat",
        "external-services",
        "feature-flags",
        "files",
        "idempotent-writes",
        "identity",
        "jobs-and-events",
        "schedules",
        "several-changing-calls-in-one-action",
        "standard-type-encodings"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "seeds",
      "kind": "topic",
      "title": "Seeds",
      "summary": "A seed creates data for development by calling your app's own actions, so validation, lifecycle and policy apply to it.",
      "tokens": 445,
      "hash": "sha256:b814f059e70c30e4bed932458ef0ea355cd5dc499ef68ee8695c1d17a36ed2e9",
      "area": 5,
      "links": [
        "acting-as-a-user",
        "commands-for-the-database-settings-and-translations",
        "stores"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "where-things-live",
      "kind": "topic",
      "title": "Where things live",
      "summary": "An entity's file holds only its data definition: its store, fields, unique rules, indexes, lifecycle, policy and record cache.",
      "tokens": 267,
      "hash": "sha256:0851f2b9af2d74efd8c124ad9b2a2e9b34e41a4628af0fa2958183a14cfb3419",
      "area": 5,
      "links": [],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "data-built",
      "kind": "topic",
      "title": "What is built: Entities, stores and migrations",
      "summary": "Each feature not built yet is `toolchain.not_built_yet` where it is used.",
      "tokens": 653,
      "hash": "sha256:ca7b28044a6cb4e618f73d632b1fac30c4f056cfb7ef6558d350402182b294a4",
      "area": 5,
      "links": [
        "acceptances",
        "encrypted-fields",
        "migrations",
        "tooling"
      ],
      "group": "Data",
      "page": "Entities, stores and migrations",
      "status": null
    },
    {
      "id": "reads-and-writes",
      "kind": "topic",
      "title": "Reads and writes",
      "summary": "How a program reads and changes stored records: queries, filters, totals, related records, refused writes and all-or-nothing actions.",
      "tokens": 821,
      "hash": "sha256:b7182afdc1a74719f662439a55792504c2380980bb9c829ddba9fae00c4c66cd",
      "area": 6,
      "links": [
        "data",
        "policy",
        "reads-and-writes-built"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "named-queries",
      "kind": "topic",
      "title": "Named queries",
      "summary": "Every read of stored records is a named query.",
      "tokens": 1652,
      "hash": "sha256:6916b508d369a2ac281b3ee18bd9514070f82c512d909962ba1b53dde652fbfb",
      "area": 6,
      "links": [
        "a-query-giving-a-map-layer",
        "building-a-type-from-other-types",
        "entities-and-the-id",
        "erasure",
        "faults",
        "files-and-names",
        "filters",
        "functions-and-actions",
        "lifecycle",
        "objects",
        "order-and-pages",
        "passing-a-failure-on-attempt",
        "policy",
        "query.result_rule",
        "tenancy",
        "turning-one-failure-into-another"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "filters",
      "kind": "topic",
      "title": "Filters",
      "summary": "Each `where:` line is one condition, and a record must meet all of them.",
      "tokens": 2322,
      "hash": "sha256:6cde420c6df914985927039bd479e154e6cacc83a2ed56b6ff3271a55fbbfbcf",
      "area": 6,
      "links": [
        "constants",
        "embeddings-and-search",
        "geospatial-queries",
        "indexes",
        "reads-and-writes-built",
        "search",
        "sql-forms"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "order-and-pages",
      "kind": "topic",
      "title": "Order and pages",
      "summary": "`order:` lists fields, each with `asc` or `desc`.",
      "tokens": 595,
      "hash": "sha256:7d37794a9f1b3371fd486bc6737459b1b5be4f49f3370a23e45b470429290d4b",
      "area": 6,
      "links": [
        "embeddings-and-search",
        "geospatial-queries"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "counts-sums-and-groups",
      "kind": "topic",
      "title": "Counts, sums and groups",
      "summary": "A query can count and add up the records it finds instead of returning them.",
      "tokens": 2995,
      "hash": "sha256:a476c9d534e8c36cd7107f0aef69ec98249d8d129f696f30f85dd7f7287eeb30",
      "area": 6,
      "links": [
        "field-restrictions",
        "sql-forms",
        "values-and-types",
        "zones-and-local-times"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "a-query-giving-a-map-layer",
      "kind": "topic",
      "title": "A query giving a map layer",
      "summary": "A query can return its records as a map layer: a `FeatureCollection<G, P>` (GeoJSON and other formats), where `G` is the geometry type and `P` the type of each feature's properties.",
      "tokens": 2033,
      "hash": "sha256:7d8f8ef33829ec5d5d183911a229b2f9e7421fc76260e8401f114ed19db8456e",
      "area": 6,
      "links": [
        "field-restrictions",
        "geospatial-interop",
        "geospatial-queries",
        "one-input",
        "output-and-status"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "children-and-parents",
      "kind": "topic",
      "title": "Children and parents",
      "summary": "An `include:` section adds related records to the result, each under a field of the result type.",
      "tokens": 418,
      "hash": "sha256:73fd60d150e86bb0e76d6268ba7fe4fb446f7257e7447c81b7ac8d62ef1082ac",
      "area": 6,
      "links": [
        "children",
        "stores"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "the-operations-every-entity-gets",
      "kind": "topic",
      "title": "The operations every entity gets",
      "summary": "Every entity gets these operations, called through the entity's name, as `Todo.get(todo_id)`.",
      "tokens": 1556,
      "hash": "sha256:8f5eb61bcde8a9705c50ad3fd36f63402f18ea3e41ca003925a670c7ba1d8fc4",
      "area": 6,
      "links": [
        "absent-values",
        "attempt",
        "creating-values",
        "every-boundary-through-the-contract",
        "lifecycle"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "when-a-write-is-refused",
      "kind": "topic",
      "title": "When a write is refused",
      "summary": "A write can be refused for two reasons, and a lifecycle transition for a third, when its `when:` doesn't hold (Transitions, above):",
      "tokens": 816,
      "hash": "sha256:d39e01ee1f9625a6047f96c09f075df546ee02058ac245358bae74277fbae3a6",
      "area": 6,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "data",
        "failures",
        "the-operations-every-entity-gets"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "all-or-nothing-actions-and-concurrent-changes",
      "kind": "topic",
      "title": "All-or-nothing actions and concurrent changes",
      "summary": "Every action is all-or-nothing (Functions and actions): its writes, and those of the public actions it calls, commit together or not at all.",
      "tokens": 2786,
      "hash": "sha256:da239fcdf05232eb220aceb3124686d4f3368980933d30f0e9f6862e76681dad",
      "area": 6,
      "links": [
        "counters-and-other-one-step-updates",
        "data.write_before_call",
        "declining-a-judgement-call",
        "external-services",
        "functions-and-actions",
        "how-a-run-is-kept",
        "how-outside-calls-are-made-safe",
        "http",
        "jobs-and-events",
        "several-changing-calls-in-one-action"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "counters-and-other-one-step-updates",
      "kind": "topic",
      "title": "Counters and other one-step updates",
      "summary": "When a new value depends only on the stored one, the database works it out in one step and nothing needs checking.",
      "tokens": 1073,
      "hash": "sha256:3eeb8653f5ba0bdbf7ce8489361baeda1dc0756f37ead1f2f85e64cb5c8c9d5e",
      "area": 6,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "constants",
        "erasure",
        "what-a-route-runs"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "reading-in-a-loop",
      "kind": "topic",
      "title": "Reading in a loop",
      "summary": "A query or `Todo.get` inside a `for` loop is a compile error, because it would read once per item.",
      "tokens": 187,
      "hash": "sha256:56d8957443db0c7718e2b4f6251438678eb88f97f1635a4b66ba1508d26fceb1",
      "area": 6,
      "links": [
        "how-a-run-is-kept",
        "loops"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "one-store-per-action",
      "kind": "topic",
      "title": "One store per action",
      "summary": "An action writes to at most one store, counting the public actions it calls.",
      "tokens": 519,
      "hash": "sha256:cad9cf7746a08a2c8041170d21f1a826504006f3b130c2c927a46b8d73005800",
      "area": 6,
      "links": [
        "store.action_spans_stores",
        "stores"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "where-a-read-comes-from",
      "kind": "topic",
      "title": "Where a read comes from",
      "summary": "Reads inside an action, policy and authentication always read the store, inside the action's transaction, so they are current.",
      "tokens": 254,
      "hash": "sha256:e1e98f2f6cdf92ecee420d6df631e0935243d7b6cbdd2ce8dff7ee4d4e2477c4",
      "area": 6,
      "links": [
        "caches",
        "what-a-route-runs"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "queries-on-entities-in-redis",
      "kind": "topic",
      "title": "Reading and writing entities in Redis",
      "summary": "An entity in a Redis store (Entities in Redis) is read and written through the same queries and operations as any entity.",
      "tokens": 473,
      "hash": "sha256:56ff727e4426ae6e5760dad2c57c8679ac7cfff9699b2cd1f5ffe7e6be518214",
      "area": 6,
      "links": [
        "entities-in-redis"
      ],
      "group": "Data",
      "page": "Reads and writes",
      "status": "not built"
    },
    {
      "id": "reads-across-domains",
      "kind": "topic",
      "title": "Reads across domains",
      "summary": "A query reads its own domain's entities only, and includes follow references inside the domain.",
      "tokens": 87,
      "hash": "sha256:4b9ae1c4e25d89171338cfd87d2c263f306eb947bf5d756ef1ee22993cb4318f",
      "area": 6,
      "links": [],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "reads-and-writes-built",
      "kind": "topic",
      "title": "What is built: Reads and writes",
      "summary": "Which parts of Reads and writes are built, and what the rest waits on",
      "tokens": 178,
      "hash": "sha256:d320a9f006cdb8993538c1cf44bc75e833bbdc3899ec7d61a1b69c5c47950cb0",
      "area": 6,
      "links": [],
      "group": "Data",
      "page": "Reads and writes",
      "status": null
    },
    {
      "id": "http",
      "kind": "topic",
      "title": "HTTP",
      "summary": "A Jadpo app answers HTTP requests with routes.",
      "tokens": 1449,
      "hash": "sha256:3fb6552782b102879f344041850733a4bc476f381d7a85b22e6f6747a9c4f683",
      "area": 7,
      "links": [
        "failure-kinds",
        "functions-and-actions",
        "generated-routes",
        "health",
        "one-input",
        "openapi",
        "output-and-status",
        "paths-and-placeholders",
        "policy",
        "route-groups",
        "routes-signed-in-by-default",
        "the-public-api-record",
        "time-limits"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "route-groups",
      "kind": "topic",
      "title": "Route groups",
      "summary": "Every route belongs to a route group: a `routes` declaration with a name and a `prefix:`.",
      "tokens": 389,
      "hash": "sha256:62a133f87cf1b3d817de0b7ed82405d1c724ffa1d9377ad245988a68fe107b98",
      "area": 7,
      "links": [
        "policy",
        "routes-signed-in-by-default"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "paths-and-placeholders",
      "kind": "topic",
      "title": "Paths and placeholders",
      "summary": "A placeholder in a path is typed where it appears, and reaches what the route runs by its name:",
      "tokens": 233,
      "hash": "sha256:879d0cfddee4c1ef7d56b770ce1a55c9e53b3d260f3e67cf64470f8c5f4cb4e6",
      "area": 7,
      "links": [
        "named-types"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "one-input",
      "kind": "topic",
      "title": "One input",
      "summary": "A route reads at most one input, named by `input:`.",
      "tokens": 509,
      "hash": "sha256:99fe06254fcd083fd9c759aa85628d26b773d69af4b8e67eb71387dc8970a477",
      "area": 7,
      "links": [
        "identity",
        "standard-library",
        "values-and-types"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "output-and-status",
      "kind": "topic",
      "title": "Output and status",
      "summary": "`output:` names what the route answers with: an `Output` type, an object made to be sent to clients.",
      "tokens": 2388,
      "hash": "sha256:c710f0646ba567509daa9501de15520ef47b42a16c93dad4876b0f32f381f62f",
      "area": 7,
      "links": [
        "failures",
        "field-restrictions",
        "geospatial",
        "identity",
        "jobs-and-events",
        "marking-personal-fields",
        "personal-data-checks",
        "reads-and-writes",
        "the-personal-data-report",
        "the-public-api-record"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "what-a-route-runs",
      "kind": "topic",
      "title": "What a route runs",
      "summary": "`run:` calls one named action.",
      "tokens": 1469,
      "hash": "sha256:33f50d176d117b879ad5021b50b4353476e79eb018f3bb0f8a814b9fcda37ff7",
      "area": 7,
      "links": [
        "access-records",
        "ai",
        "project-layout-and-modules",
        "service-credentials"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "time-limits",
      "kind": "topic",
      "title": "Time limits",
      "summary": "Every route has a deadline: 10 seconds, unless `deadline:` sets another, and never more than 60.",
      "tokens": 358,
      "hash": "sha256:15a2d15f865055df86b6839b1c3f58633acef4ca2d5f41019d08c803cd561579",
      "area": 7,
      "links": [
        "calling",
        "subscribers",
        "waiting-for-follow-on-work"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "waiting-for-follow-on-work",
      "kind": "topic",
      "title": "Waiting for follow-on work",
      "summary": "An action does its own database work and leaves the rest, such as a second call to a provider, to subscribers: code that runs when an event the action emits is delivered (Subscribers).",
      "tokens": 1326,
      "hash": "sha256:66c6f5c34a69697cc29bf88d7455b6c7b08e30cc695f95fe666a0cf020243fd0",
      "area": 7,
      "links": [
        "batches-work-over-many-items",
        "delivery-at-least-once-safe-to-repeat",
        "idempotent-writes",
        "policy-and-background-work",
        "retries-and-giving-up",
        "subscribers",
        "where-events-travel"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "streaming-a-model-s-answer",
      "kind": "topic",
      "title": "Streaming a model's answer",
      "summary": "When what a route runs returns an `AiStream`, the route sends a model's answer as it is written, piece by piece.",
      "tokens": 2161,
      "hash": "sha256:f31bd69a88e4b03fa9ab96442744cb202c520f80b1c9ba4a3da20eba7cbfbc45",
      "area": 7,
      "links": [
        "ai",
        "ai-tests",
        "failures",
        "openapi",
        "streaming-from-a-model",
        "time-limits"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "health",
      "kind": "topic",
      "title": "Health",
      "summary": "The runtime always serves two health checks, and there is nothing to write:",
      "tokens": 112,
      "hash": "sha256:c0184f9d33265127b703584723b5b66c567b913cb5d4ed8f601dabbea0fccf20",
      "area": 7,
      "links": [],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "apis-and-versions",
      "kind": "topic",
      "title": "APIs and versions",
      "summary": "Most apps have one API.",
      "tokens": 382,
      "hash": "sha256:cac2ea2bc639d8bf6e69e7dae1066d6a9982819129f9f65086f79d0301ab680a",
      "area": 7,
      "links": [
        "openapi",
        "routes-signed-in-by-default"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "webhooks",
      "kind": "topic",
      "title": "Webhooks",
      "summary": "You don't write routes for a provider's webhooks: Jadpo generates them from the provider's package (Webhooks as events).",
      "tokens": 436,
      "hash": "sha256:dae1f4b6b6241c86615d6be395ecc46c4cb9c548b651dfce56c2807d6a021844",
      "area": 7,
      "links": [
        "receiving-from-outside",
        "service-credentials",
        "subscribers",
        "webhook-replies-handshakes-and-further-signature-schemes"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "idempotent-writes",
      "kind": "topic",
      "title": "Idempotent writes",
      "summary": "A client that retries a write after a timeout can't tell whether the first try worked.",
      "tokens": 517,
      "hash": "sha256:76288f57e96eb3dd39d80c4d54b08568c2570d297961fe97458fe1a88d640533",
      "area": 7,
      "links": [
        "calling",
        "how-failures-reach-the-client"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "how-failures-reach-the-client",
      "kind": "topic",
      "title": "How failures reach the client",
      "summary": "Every failure reaches the client in one envelope: `code`, `message`, `request_id`, and the failure's client fields under `details` (Failures).",
      "tokens": 997,
      "hash": "sha256:3b11e978e0c9541fd9aaebe089d134aa1fd365b684727b911eba9ef9698dc9ad",
      "area": 7,
      "links": [
        "declared-deployables",
        "failures",
        "failures-for-client-apps",
        "secrets",
        "standard-library"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "generated-routes",
      "kind": "topic",
      "title": "Generated routes",
      "summary": "Some features generate their routes for you:",
      "tokens": 495,
      "hash": "sha256:8e8fabaf50472dee53acb735243560db7dadbc0a345e1019101d505a46fabd6a",
      "area": 7,
      "links": [
        "checking-the-person-sign-in",
        "data-requests",
        "feature-flags",
        "identity",
        "magic-links",
        "oauth-grants",
        "openapi",
        "passkeys",
        "routes-signed-in-by-default",
        "webhooks"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "rate-limited-requests",
      "kind": "topic",
      "title": "Rate-limited requests",
      "summary": "A request over a rate limit (Rate limits) gets `429` with the usual envelope and the code `rate_limited`:",
      "tokens": 199,
      "hash": "sha256:77d88711b7fa71cff8a67eb4781a2e5380e7ecf8b9e137c93567bdf83453914c",
      "area": 7,
      "links": [
        "openapi",
        "rate-limits"
      ],
      "group": "Built-in services",
      "page": "Rate limits",
      "status": null
    },
    {
      "id": "openapi",
      "kind": "topic",
      "title": "OpenAPI",
      "summary": "The compiler writes one OpenAPI 3.1 document per API into `build/openapi/`.",
      "tokens": 1498,
      "hash": "sha256:2be0d37160d216dc0315dc62e65b2839345b349ee70c7c8d677471eb31ab8d8f",
      "area": 7,
      "links": [
        "api.route_needs_sign_in",
        "failures-for-client-apps",
        "how-the-openapi-importer-reads-a-document",
        "output-and-status",
        "packages-from-other-jadpo-apps",
        "project-layout-and-modules",
        "rate-limits",
        "routes-signed-in-by-default",
        "the-public-api-record",
        "where-events-travel"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "the-public-api-record",
      "kind": "topic",
      "title": "The public API record",
      "summary": "Each API has a committed, readable record of its routes, fields and failure codes: `api/main.jadpo_record` for `main`.",
      "tokens": 1162,
      "hash": "sha256:858e70d09ded8f85942fa5d147eac737f81bc1d867241056c7f94145c280e877",
      "area": 7,
      "links": [
        "acceptances",
        "output-and-status",
        "protecting-policy",
        "what-is-committed-and-why"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "write-revisions",
      "kind": "topic",
      "title": "Write revisions",
      "summary": "After a write, a client can make sure its next read sees that write rather than an older cached copy.",
      "tokens": 133,
      "hash": "sha256:70f01d0338bf9b8ee8805abbc56cc7a9f50a328fc08be19e351c75cf5f06f738",
      "area": 7,
      "links": [
        "reads-and-writes"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": "not built"
    },
    {
      "id": "http-built",
      "kind": "topic",
      "title": "What is built: HTTP",
      "summary": "A feature that isn't built yet is the error `toolchain.not_built_yet` where an app uses it.",
      "tokens": 1410,
      "hash": "sha256:5811c8c4e2c5c9f2b91e2c812b05626382c872c0530d59a030ce2c404ec3f972",
      "area": 7,
      "links": [
        "acceptances",
        "field-restrictions",
        "identity",
        "openapi",
        "output-and-status",
        "policy",
        "rate-limits",
        "reads-and-writes",
        "service-credentials",
        "streaming-a-model-s-answer",
        "waiting-for-follow-on-work",
        "where-events-travel",
        "write-revisions"
      ],
      "group": "APIs",
      "page": "HTTP",
      "status": null
    },
    {
      "id": "identity",
      "kind": "topic",
      "title": "Sign-in and identity",
      "summary": "Identity is how Jadpo knows who is calling.",
      "tokens": 1053,
      "hash": "sha256:01ff1a8598836c6fbb56f4eaa580d62b106a4f6ff50a89638fe781f3c8247caa",
      "area": 8,
      "links": [
        "magic-links",
        "passkeys",
        "policy",
        "ways-to-sign-in"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "the-principal",
      "kind": "topic",
      "title": "The principal",
      "summary": "The principal is whoever is calling, once Jadpo has checked them: either a user (a person) or a service (another system, such as a partner's server).",
      "tokens": 812,
      "hash": "sha256:7e75231ac658314e28204a49eec2aa8045ff69b877d39245308e0589cfe4b7f0",
      "area": 8,
      "links": [
        "entities-and-the-id",
        "identity-failures",
        "policy",
        "starting-and-ending-a-session",
        "tenancy",
        "ways-to-sign-in"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "the-application-and-revocation",
      "kind": "topic",
      "title": "The application and revocation",
      "summary": "A person can be disabled, or a session revoked, while they still hold a valid cookie or token.",
      "tokens": 1533,
      "hash": "sha256:b48bc1ad51885626bf3dc921cc20bd7ee0f9c77fe18ae3d19eea25aab120ae0a",
      "area": 8,
      "links": [
        "built-in-services",
        "generated-routes",
        "routes-signed-in-by-default",
        "signing-keys",
        "the-public-api-record",
        "ways-to-sign-in"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "ways-to-sign-in",
      "kind": "topic",
      "title": "Ways to sign in",
      "summary": "`authentication { }` in `authentication.jadpo` lists the ways your app lets a caller prove who they are.",
      "tokens": 3069,
      "hash": "sha256:5a370fb23ce96c0ca65869276bb8a713589cf127f8280c45c1bd4f9f2411cbd4",
      "area": 8,
      "links": [
        "a-person-the-app-has-not-seen",
        "functions-and-actions",
        "magic-links",
        "passkeys",
        "service-credentials",
        "settings-config-jadpo",
        "signing-keys",
        "standard-library",
        "starting-and-ending-a-session",
        "the-application-and-revocation",
        "the-principal"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "checking-the-person-sign-in",
      "kind": "topic",
      "title": "Checking the person: sign_in:",
      "summary": "Signing in has two steps.",
      "tokens": 3806,
      "hash": "sha256:2c35ca73c79c99d358a3f4106bd676af89a2680a91da172983c09fa4a0d68bca",
      "area": 8,
      "links": [
        "a-person-the-app-has-not-seen",
        "external-services",
        "magic-links",
        "passkeys",
        "secrets",
        "starting-and-ending-a-session",
        "ways-to-sign-in"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "magic-links",
      "kind": "topic",
      "title": "Magic links",
      "summary": "A magic link signs a person in by email, with no password.",
      "tokens": 3083,
      "hash": "sha256:61dcde72ef2bf2da64c83103d445b32e8780f7da9339c0bcef0574e156f2b1d8",
      "area": 8,
      "links": [
        "a-person-the-app-has-not-seen",
        "acceptances",
        "built-in-services",
        "configuration",
        "failures",
        "generated-routes",
        "system-tables"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "passkeys",
      "kind": "topic",
      "title": "Passkeys",
      "summary": "A passkey lets a person sign in with their fingerprint, their face or their device's PIN, with no password and no email to wait for.",
      "tokens": 3976,
      "hash": "sha256:1cf1e4bdc5f7bb4ba884189f174bbf673380d6c07d582b72a64d98eaac20bd91",
      "area": 8,
      "links": [
        "generated-routes",
        "in-development-and-tests",
        "personal-data",
        "standard-library"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "a-person-the-app-has-not-seen",
      "kind": "topic",
      "title": "A person the app has not seen",
      "summary": "The first time someone signs in whom your app has no user for, Jadpo asks your app what to do.",
      "tokens": 1186,
      "hash": "sha256:700af8731923e0ec792408440c2c992a25695f4baceb2c8fb7b031e97dfdfbcd",
      "area": 8,
      "links": [
        "ways-to-sign-in"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "signing-in-from-code-the-app-writes",
      "kind": "topic",
      "title": "Signing in from code the app writes",
      "summary": "Most apps let `sign_in:` check people.",
      "tokens": 89,
      "hash": "sha256:cae24755a9dff256fa1422cbc53ab40f7fab1278508c9e5db0daf5b0802954df",
      "area": 8,
      "links": [
        "starting-and-ending-a-session"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "sign-in-events",
      "kind": "topic",
      "title": "Sign-in events",
      "summary": "Every sign-in publishes a built-in event, which your monitoring and your app's own subscribers can use:",
      "tokens": 306,
      "hash": "sha256:96c65cfe8b60591cc6a971f7d1198c9ef21043a55381ed18cb07dab1fd0bdd55",
      "area": 8,
      "links": [
        "subscribers"
      ],
      "aliases": [
        "events"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "in-development-and-tests",
      "kind": "topic",
      "title": "Sign-in in development and tests",
      "summary": "In `jadpo dev`, no email leaves your machine.",
      "tokens": 1570,
      "hash": "sha256:409910058f65997284b88d673e2fa70012ce478c3b0fddbfd584ec23a524282f",
      "area": 8,
      "links": [
        "built-in-services",
        "routes-signed-in-by-default",
        "testing"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "what-the-compiler-checks-of-sign-in",
      "kind": "topic",
      "title": "What the compiler checks of sign-in",
      "summary": "Jadpo checks your sign-in setup when it compiles, so a mistake is an error with a fix rather than a sign-in that fails in production.",
      "tokens": 1673,
      "hash": "sha256:4af9a6c2467b964cd4341ece501f4aa507016196ac2fcf63f1bac227214c17db",
      "area": 8,
      "links": [
        "acceptances",
        "built-in-services"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "who-is-calling-current-principal",
      "kind": "topic",
      "title": "Who is calling: current_principal",
      "summary": "A route reads the signed-in caller as `current_principal`, and passes it to the action it runs like any other argument.",
      "tokens": 369,
      "hash": "sha256:6887dfdadd37ee9b0e3ada9fcaa71b097ce88dfa847be8399cc2ad21bdf8d037",
      "area": 8,
      "links": [
        "http",
        "jobs-and-events",
        "policy"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "routes-signed-in-by-default",
      "kind": "topic",
      "title": "Routes: signed in by default",
      "summary": "Every route needs a signed-in caller unless it says otherwise.",
      "tokens": 2589,
      "hash": "sha256:81d926ffd02842643aa7ff911d0024a16aca8ee320187d2b8e72c16c726e537c",
      "area": 8,
      "links": [
        "external-services",
        "http",
        "in-development-and-tests",
        "openapi",
        "passkeys",
        "policy",
        "records-and-manifest",
        "the-application-and-revocation"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "service-credentials",
      "kind": "topic",
      "title": "Service credentials",
      "summary": "A service, such as a partner's system or a worker, signs in with a key.",
      "tokens": 620,
      "hash": "sha256:7dbc3e6835a9a3d864b5a5ff2cb56b169869d831d266c972401943e57f894fdf",
      "area": 8,
      "links": [
        "starting-and-ending-a-session",
        "system-tables"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "starting-and-ending-a-session",
      "kind": "topic",
      "title": "Starting and ending a session",
      "summary": "Magic links, passkeys and providers start the session themselves (Checking the person).",
      "tokens": 5332,
      "hash": "sha256:2f126cbd1f7f15f219d7e1681cce2d4a5f0485adece29a1dbaf138588da16522",
      "area": 8,
      "links": [
        "a-membership-role",
        "checking-the-person-sign-in",
        "grants",
        "jobs-and-events",
        "magic-links",
        "policy",
        "system-tables"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "identity-failures",
      "kind": "topic",
      "title": "Sign-in failures",
      "summary": "Jadpo raises the sign-in failures itself.",
      "tokens": 857,
      "hash": "sha256:fa747fb1a43f1c1318c90be38c422c35f52a30eeeace651ed913985fe81a7f1a",
      "area": 8,
      "links": [
        "built-in-services",
        "declaring-a-failure",
        "the-application-and-revocation"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "identity-built",
      "kind": "topic",
      "title": "What is built: Sign-in and identity",
      "summary": "A feature not built yet is `toolchain.not_built_yet` where it is written.",
      "tokens": 165,
      "hash": "sha256:fc4e0f36c96047b8fae05f8f5b2b8395f9857bae05745fcc578e852cfa174806",
      "area": 8,
      "links": [
        "oauth-grants",
        "policy"
      ],
      "group": "APIs",
      "page": "Sign-in and identity",
      "status": null
    },
    {
      "id": "policy",
      "kind": "topic",
      "title": "Policy",
      "summary": "Policy says who may do what to which stored records.",
      "tokens": 1002,
      "hash": "sha256:f09d323cfbd0f82d85d470b4ceaf1ca8ec3b3c2dfbca4a406c2a4d64c173c957",
      "area": 9,
      "links": [
        "a-membership-role",
        "a-user-field-on-the-record",
        "anyone-signed-in-or-anyone",
        "policy-and-background-work",
        "tenancy",
        "the-principal",
        "when-policy-says-no"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "grants",
      "kind": "topic",
      "title": "Grants",
      "summary": "A grant says who may do one thing to an entity's records.",
      "tokens": 366,
      "hash": "sha256:bfed7165d9d9dce4082a51e8c6a10a915ad55de1793f84721e1bca84db00e19b",
      "area": 9,
      "links": [
        "lifecycle",
        "policy",
        "the-operations-every-entity-gets"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "a-user-field-on-the-record",
      "kind": "topic",
      "title": "A user field on the record",
      "summary": "Use a user field when a record belongs to one person, such as a todo and its owner.",
      "tokens": 275,
      "hash": "sha256:6b8c06aab3435f786b91f364aa3e3f5fff57ad047637369088ed146baf39a9cf",
      "area": 9,
      "links": [
        "action-permissions",
        "the-principal"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "a-membership-role",
      "kind": "topic",
      "title": "A membership role",
      "summary": "Use a role when people get access by belonging to something, such as the editors of a company.",
      "tokens": 1672,
      "hash": "sha256:517f61acc1be263e67f18f9568148db97c7d320a4c329c8ca322b4b8103c78b1",
      "area": 9,
      "links": [
        "acceptances",
        "acting-as-a-user",
        "checking-the-person-sign-in",
        "policy.effect_ungranted",
        "policy.requirement_invalid",
        "policy.requirement_unsatisfiable",
        "policy.requirements_incomplete",
        "starting-and-ending-a-session",
        "tenancy",
        "type.unknown_enum_variant"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "anyone-signed-in-or-anyone",
      "kind": "topic",
      "title": "Anyone signed in, or anyone",
      "summary": "Use these for records that everyone signed in, or the whole world, may see, such as published articles.",
      "tokens": 269,
      "hash": "sha256:46571f3a8b778109be05a14f01303cd1a6622f930cd8b6608a3e107cce7c1bf2",
      "area": 9,
      "links": [
        "comparing-two-builds",
        "routes-signed-in-by-default"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "policy-and-background-work",
      "kind": "topic",
      "title": "Policy and background work",
      "summary": "Schedules and event subscribers are the work your app does without a request (Background work).",
      "tokens": 1644,
      "hash": "sha256:76d27c09ecd1a293062050d09e53b20245ef53bc2913f95cec7105c716c7ee63",
      "area": 9,
      "links": [
        "declaring-an-event",
        "identity",
        "jobs-and-events",
        "magic-links",
        "policy.system_grant_missing",
        "receiving-from-outside",
        "tenancy"
      ],
      "aliases": [
        "background-work"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "tenancy",
      "kind": "topic",
      "title": "Tenancy",
      "summary": "Keep customers' data apart does the whole job, start to finish.",
      "tokens": 3669,
      "hash": "sha256:5fd74a7aa6d718277e2176cfe2c729d40cbf9040972e3747434f511356bb2900",
      "area": 9,
      "links": [
        "a-membership-role",
        "action-permissions",
        "grants",
        "guide-keep-customers-data-apart",
        "named-queries",
        "protecting-policy",
        "the-principal"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "action-permissions",
      "kind": "topic",
      "title": "Permissions on actions",
      "summary": "Most actions need no permission of their own: an action takes its permission from the entities it touches.",
      "tokens": 1745,
      "hash": "sha256:3cdc509231c1d05aadc0edcc735951892b83074c6783bacd8133898c5204feea",
      "area": 9,
      "links": [
        "field-restrictions",
        "tenancy"
      ],
      "aliases": [
        "actions"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "field-restrictions",
      "kind": "topic",
      "title": "Field restrictions",
      "summary": "A field follows its entity's grants unless it says otherwise.",
      "tokens": 1449,
      "hash": "sha256:c2f92d10f8763191e65c1057c927b0a25c4d1236cfa027ce9dc4ca0f58fdb86c",
      "area": 9,
      "links": [
        "computed-backfills",
        "personal-data",
        "receiving-from-outside",
        "subscribers"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "the-permissions-report",
      "kind": "topic",
      "title": "The permissions report",
      "summary": "Policy is written beside each entity, so nobody has to keep a central copy.",
      "tokens": 556,
      "hash": "sha256:bb80a6a53d247306c65d0983f9eb7184bc71d82170a7207b8a86a2f6bc91f893",
      "area": 9,
      "links": [
        "audit-trail",
        "field-restrictions",
        "indexes",
        "reviewing-a-change",
        "when-policy-says-no"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "protecting-policy",
      "kind": "topic",
      "title": "Protecting policy",
      "summary": "An agent can edit policy, but the change can't ship without a person's approval, wherever it is written.",
      "tokens": 628,
      "hash": "sha256:24cc3d4805e1badc8bfb0df876981bc6a61ee720822cd37833a17c4e370ede93",
      "area": 9,
      "links": [
        "acceptances",
        "erasure",
        "policy-and-background-work",
        "reviewing-a-change",
        "schedules"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "when-policy-says-no",
      "kind": "topic",
      "title": "When policy says no",
      "summary": "Your code never handles a policy refusal itself.",
      "tokens": 2492,
      "hash": "sha256:776b4bdd568dfaf448829f0d74b14859427f32c1b33c67d8ff8394c391647399",
      "area": 9,
      "links": [
        "concealing-records",
        "identity",
        "routes-signed-in-by-default"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "caches-and-personal-data",
      "kind": "topic",
      "title": "Caches and personal data",
      "summary": "A cache never lets a caller around policy.",
      "tokens": 126,
      "hash": "sha256:3cd86c5b7503b3f2e068c2901a61c1343d54bdbd65e82ba5657d577969d804d3",
      "area": 9,
      "links": [
        "caches",
        "personal-data"
      ],
      "group": "Built-in services",
      "page": "Caches",
      "status": "not built"
    },
    {
      "id": "policy-built",
      "kind": "topic",
      "title": "What is built: Policy",
      "summary": "Everything on this page is built except the features below.",
      "tokens": 221,
      "hash": "sha256:8e51f2ef3a03a7c9fa8d4f9a9cdead780193d85dd0e47bf77fc32f135d2d470c",
      "area": 9,
      "links": [
        "acceptances",
        "reviewing-a-change"
      ],
      "group": "APIs",
      "page": "Policy",
      "status": null
    },
    {
      "id": "configuration",
      "kind": "topic",
      "title": "Configuration",
      "summary": "Configuration is the values your app reads from its environment, such as a database address or an API key, and the languages it speaks: its locales, and its text translated for the people reading it.",
      "tokens": 305,
      "hash": "sha256:9782ad0680f7e033084bafbf7bce4dce5cadd6b6c38311f594a7e70ff71e0b68",
      "area": 10,
      "links": [
        "time-types"
      ],
      "aliases": [
        "configuration-and-time"
      ],
      "group": "Configuration",
      "page": null,
      "status": null
    },
    {
      "id": "settings-config-jadpo",
      "kind": "topic",
      "title": "Settings: config.jadpo",
      "summary": "A setting is a value that can differ between deployments, such as the database's address or the address emails are sent from.",
      "tokens": 3182,
      "hash": "sha256:e51f55d07df9e2d1469c457c6147d30bd43e7d2f7815ed3be7213c095ae88b49",
      "area": 10,
      "links": [
        "ai",
        "command-errors",
        "configuration-in-tests",
        "constants",
        "editor-support",
        "feature-flags",
        "records-and-manifest",
        "signatures-use-named-types",
        "signing-keys",
        "stores",
        "values-on-your-machine-and-in-production"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "secrets",
      "kind": "topic",
      "title": "Secrets",
      "summary": "A secret is a setting that must never leave the server, such as a password or an API key.",
      "tokens": 454,
      "hash": "sha256:575d6365dde0fbdfe86a2ce144e6f2b42204d9805eeb82c86be004cdd410c85c",
      "area": 10,
      "links": [
        "connecting-in-app-jadpo",
        "encrypted-fields",
        "hashing-and-cryptography",
        "the-application-and-revocation"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "database-and-other-connection-urls",
      "kind": "topic",
      "title": "Database and other connection URLs",
      "summary": "A database or a cache takes its address from a setting.",
      "tokens": 870,
      "hash": "sha256:bd3877bb0454eaa8fc43f7745ef354d39f0d1f71de827d9f9641bbbed2dd6277",
      "area": 10,
      "links": [
        "connecting-in-app-jadpo",
        "how-integrations-fit-together",
        "stores"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "values-on-your-machine-and-in-production",
      "kind": "topic",
      "title": "Values on your machine and in production",
      "summary": "In production, values come from the platform's environment, or from its secret manager, which sets the same variables.",
      "tokens": 818,
      "hash": "sha256:b46086c9d7f31e4e1535162bba3275ae28abe0ccc1d4c7c86dc5df3975c459f3",
      "area": 10,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "configuration-in-tests"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "signing-keys",
      "kind": "topic",
      "title": "Signing keys",
      "summary": "A `SigningKey` is a built-in secret type for the key that sessions and tokens are signed with: at least 32 characters, with no spaces.",
      "tokens": 287,
      "hash": "sha256:267276ce15c23f49e1c4cb376638bfc91c89e3925a0993de3844e2f3c68d2bd8",
      "area": 10,
      "links": [
        "encrypted-fields",
        "the-application-and-revocation"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "client-addresses",
      "kind": "topic",
      "title": "Client addresses",
      "summary": "By default a native app takes the client's address from the connection, and an app on Workers from Cloudflare's `CF-Connecting-IP` header.",
      "tokens": 1356,
      "hash": "sha256:ee27cf5891cf45a8a93c4b013192e2707f7451beb86681f7744723963b5ffefe",
      "area": 10,
      "links": [
        "a-workers-deployable",
        "rate-limits",
        "the-request-timeline-in-jadpo-dev"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "checking-values-before-the-app-starts",
      "kind": "topic",
      "title": "Checking values before the app starts",
      "summary": "Your app reads only the variables its settings declare.",
      "tokens": 381,
      "hash": "sha256:39bd6b5753a0cd01578a8f029f90460c0868ce80cbec038bd4e74fac6ba8cb36",
      "area": 10,
      "links": [
        "health"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "time-types",
      "kind": "topic",
      "title": "Time types",
      "summary": "Store a moment as an `Instant`.",
      "tokens": 1103,
      "hash": "sha256:5982c5eb9aa6dad47dc4c1364de593b8259b395d7041af54e090bf8b3dfe8f30",
      "area": 10,
      "links": [
        "controlling-time",
        "signatures-use-named-types",
        "the-current-time-clock-now",
        "time-and-calendar-additions",
        "tooling-for-translations"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "durations",
      "kind": "topic",
      "title": "Durations",
      "summary": "A duration is a length of time, such as a timeout.",
      "tokens": 385,
      "hash": "sha256:ae3443f895e5edf02a3efcc38c8a40d6270c8fee3af6528c164c61e99a8a99bd",
      "area": 10,
      "links": [
        "every-boundary-through-the-contract",
        "zones-and-local-times"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "the-current-time-clock-now",
      "kind": "topic",
      "title": "The current time: clock.now",
      "summary": "`clock.now` is the time an operation started.",
      "tokens": 380,
      "hash": "sha256:00a9e7b02ca48a4faa337d8b56d71f2521fe2c17c0b844d87df8f7890ca9c67a",
      "area": 10,
      "links": [
        "controlling-time",
        "filters",
        "randomness"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "arithmetic-and-comparison",
      "kind": "topic",
      "title": "Arithmetic and comparison",
      "summary": "Add a duration to an instant to get a later instant, and take one instant from another to get the time between them:",
      "tokens": 504,
      "hash": "sha256:3c60f03146a7ce230d1f39872622b4ff981f9e958c2f3ab1b6c1f15097846ef1",
      "area": 10,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "zones-and-local-times",
      "kind": "topic",
      "title": "Zones and local times",
      "summary": "A zone turns an instant into the local time people see on a clock.",
      "tokens": 2064,
      "hash": "sha256:733925a477c791e5004ff77122d7d217e4e7dfbbab24eabd7cf7ae4065279e6b",
      "area": 10,
      "links": [
        "creating-values",
        "filters",
        "recurrences-and-opening-hours",
        "time-and-calendar-additions"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "showing-dates-and-times-to-people",
      "kind": "topic",
      "title": "Showing dates and times to people",
      "summary": "To show a date or a time to a person, format it with `text.format(value, zone:, locale:, format:)`.",
      "tokens": 2769,
      "hash": "sha256:0ae68468f1247c307371150b2e869bac0796deaa2ddc8ce482e356a4d49c7fcf",
      "area": 10,
      "links": [
        "locales"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "locales",
      "kind": "topic",
      "title": "Locales",
      "summary": "A locale is a language as a place writes it, such as British English (`Locale.en_gb`) or the French of France (`Locale.fr_fr`).",
      "tokens": 2846,
      "hash": "sha256:003d6afeec7a8d2e82d6730e3853aa0685c19ac8008fbb12b7340bec255bb6dd",
      "area": 10,
      "links": [
        "one-input",
        "text",
        "translations-as-messages"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "translations-as-messages",
      "kind": "topic",
      "title": "Translations as messages",
      "summary": "Translate your app's text does the whole job, start to finish.",
      "tokens": 2737,
      "hash": "sha256:5033147529cad00efc4d97f8a22b450dcf671782bb8a0baa6aea42db16bc69e8",
      "area": 10,
      "links": [
        "email",
        "failures-for-client-apps",
        "files-and-names",
        "guide-translate-your-apps-text",
        "money-operations",
        "naming",
        "prices-discounts-and-rates",
        "sharing-and-promotion",
        "showing-dates-and-times-to-people",
        "tooling-for-translations"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "email-subjects",
      "kind": "topic",
      "title": "Email subjects",
      "summary": "An email's subject line is translated like a message.",
      "tokens": 131,
      "hash": "sha256:bd45dacefd257cd02eb1c0d87f16547923763cafea62a983c3bb57160b2dd23b",
      "area": 10,
      "links": [
        "email"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "enums-with-wording",
      "kind": "topic",
      "title": "Enums with wording",
      "summary": "An enum has no label for people of its own (Enums).",
      "tokens": 449,
      "hash": "sha256:89838b11dbc14a3d258580e8c40e09480b626062ae38394b17feff828f82a6ef",
      "area": 10,
      "links": [
        "enums"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "failures-for-client-apps",
      "kind": "topic",
      "title": "Failures for client apps",
      "summary": "A client app can show a failure to its user in the user's language.",
      "tokens": 2869,
      "hash": "sha256:4bb9b6bcf933faa258c2ceb3fdbe8e0bba5bfdaf30cc4e3927ac198ad300c1ef",
      "area": 10,
      "links": [
        "built-in-emails",
        "data-requests",
        "declaring-a-failure",
        "kinds-of-package",
        "magic-links",
        "output-and-status",
        "passkeys",
        "routes-signed-in-by-default",
        "the-operations-every-entity-gets",
        "ways-to-sign-in"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "packages-text-in-an-app",
      "kind": "topic",
      "title": "Packages' text in an app",
      "summary": "To show a package's or Jadpo's message in a locale, Jadpo looks first in your app's root wording for that locale, then in the owner's own.",
      "tokens": 3547,
      "hash": "sha256:244d1574c65279cd41fa7f1b15706084cf82ce2affe26e8f5a2f61c6d888ff74",
      "area": 10,
      "links": [
        "calling",
        "commands-for-records-findings-and-review",
        "the-surface",
        "two-versions-side-by-side-lazy-loading-and-the-package-cache",
        "what-the-compiler-checks-of-translations",
        "where-packages-live"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "what-the-compiler-checks-of-translations",
      "kind": "topic",
      "title": "What the compiler checks of translations",
      "summary": "`jadpo check` checks every language file against the messages, enums, emails and failures it words.",
      "tokens": 1939,
      "hash": "sha256:d3235155af5bac4887d258dd383e5896dcd3097340f1afab61f71a9786f03d57",
      "area": 10,
      "links": [
        "declining-a-judgement-call",
        "what-is-committed-and-why"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "tooling-for-translations",
      "kind": "topic",
      "title": "Tooling for translations",
      "summary": "The `jadpo translations` commands list what is missing, keep the record of what each translation was made from, and exchange wording with translation services.",
      "tokens": 1194,
      "hash": "sha256:afe1127004ae080e0ecc950b24c988f27dc5a16eac3d8e8359d44ef54fe9a389",
      "area": 10,
      "links": [
        "packages-text-in-an-app"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "exchanging-translations",
      "kind": "topic",
      "title": "Exchanging translations with a service",
      "summary": "Most teams send their wording to a translation service, such as Crowdin, Lokalise or any that reads XLIFF or JSON.",
      "tokens": 1865,
      "hash": "sha256:9974f933d914bd80edfb17a32805099b643034c829a6f7d79686c0387940f6ae",
      "area": 10,
      "links": [
        "command-errors",
        "failures-for-client-apps"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "retention-periods",
      "kind": "topic",
      "title": "Retention periods",
      "summary": "How long your app keeps deleted records is an ordinary setting, such as `soft_delete_retention: Duration`.",
      "tokens": 194,
      "hash": "sha256:656d57fd9326e96e3cadcd026239a4fbbf819df9b3c332134dcbe13d2e4f7541",
      "area": 10,
      "links": [
        "lifecycle",
        "retention"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "configuration-and-time-built",
      "kind": "topic",
      "title": "What is built: Configuration",
      "summary": "Which parts of Configuration are built, and what the rest waits on",
      "tokens": 662,
      "hash": "sha256:e373fbd93d93797921754678e83affc1f3d8d5565f106d7ffd030c9d466aa1ef",
      "area": 10,
      "links": [
        "controlling-time",
        "locales",
        "reviewing-a-change"
      ],
      "group": "Configuration",
      "page": null,
      "status": null
    },
    {
      "id": "external-services",
      "kind": "topic",
      "title": "External services",
      "summary": "Call an outside API does the whole job, start to finish.",
      "tokens": 1439,
      "hash": "sha256:74f02cbcef8fc80196aff8aa41989cbd28d33565f344bd1fd82b1da723a5d949",
      "area": 11,
      "links": [
        "built-in-services",
        "guide-call-an-outside-api",
        "oauth-grants",
        "running-a-service-in-a-container",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": null,
      "status": null
    },
    {
      "id": "how-integrations-fit-together",
      "kind": "topic",
      "title": "How packages, connections, capabilities and services fit together",
      "summary": "Here is an app calling one outside API, with nothing left out: it books a collection with a courier.",
      "tokens": 3464,
      "hash": "sha256:f12045475fa29a0783b4671ca62a448bba600b23a0e22d4f117ac7b8174d8ff0",
      "area": 11,
      "links": [
        "a-native-deployable",
        "built-in-services",
        "built-in-services-built",
        "calling",
        "capabilities",
        "connecting-in-app-jadpo",
        "declared-deployables",
        "external-services-built",
        "kinds-of-package",
        "provider-calls-in-development",
        "running-a-service-in-a-container",
        "tests-and-fakes",
        "the-package-format",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": null,
      "status": null
    },
    {
      "id": "running-a-service-in-a-container",
      "kind": "topic",
      "title": "Running a service in a container",
      "summary": "A provider's API can be a stateless container image that Jadpo starts beside your app, such as Gotenberg turning HTML into PDFs or ClamAV scanning uploads.",
      "tokens": 1483,
      "hash": "sha256:5fbb950070bd9603e55e4fbec318aa5a9e6cfc404e1a58099cdeee9473043bde",
      "area": 11,
      "links": [
        "connecting-in-app-jadpo",
        "declared-deployables"
      ],
      "group": "External services",
      "page": "Running a service in a container",
      "status": "not built"
    },
    {
      "id": "kinds-of-package",
      "kind": "topic",
      "title": "Kinds of package",
      "summary": "A package is Jadpo code shared between apps.",
      "tokens": 1210,
      "hash": "sha256:7d64066d791feadd5ca1a97cb85f30c374eb242e15b0ae0edb41ffef2a3c3901",
      "area": 11,
      "links": [
        "how-integrations-fit-together"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "the-package-format",
      "kind": "topic",
      "title": "The package format",
      "summary": "A package is laid out as `shared/` is, so one set of rules covers the app and every package, and the compiler checks a package as it checks `shared/`.",
      "tokens": 3738,
      "hash": "sha256:164a3a841d1d4d9c824ae69e718df831aab39679bc7ac0daaaafaa99bffea5e4",
      "area": 11,
      "links": [
        "checking-the-person-sign-in",
        "developing-and-publishing-a-package",
        "how-the-package-format-is-read",
        "packages-text-in-an-app",
        "project-layout-and-modules",
        "publish.licence_proprietary",
        "running-a-service-in-a-container"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "where-packages-live",
      "kind": "topic",
      "title": "Where packages live",
      "summary": "`packages/` holds only packages you installed.",
      "tokens": 1409,
      "hash": "sha256:dc49340e6f2202b74ed948bba8fff30f5d0f9861d4ad7eefb79e7ff298e8f5d0",
      "area": 11,
      "links": [
        "failures-for-client-apps",
        "the-public-registry"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "where-packages-come-from",
      "kind": "topic",
      "title": "Where packages come from",
      "summary": "A package reaches your app in one of four ways.",
      "tokens": 5017,
      "hash": "sha256:7818d1621a8b8f49503b0e5d41bcefd6cc82dda01311a951cb9c97de0611b587",
      "area": 11,
      "links": [
        "acceptances",
        "ai",
        "developing-and-publishing-a-package",
        "records-and-manifest",
        "registry.unreachable",
        "standard-library",
        "the-public-registry",
        "what-package-code-may-do"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": "partly built"
    },
    {
      "id": "the-surface",
      "kind": "topic",
      "title": "A package's surface",
      "summary": "A package's surface is everything it offers an app, in one file you can read.",
      "tokens": 1299,
      "hash": "sha256:f1f3af459de0f9f18aa6bafbd4353cf7e4f9428c8826009f36705d0a696795d6",
      "area": 11,
      "links": [
        "records-and-manifest",
        "the-public-api-record"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "developing-and-publishing-a-package",
      "kind": "topic",
      "title": "Developing and publishing a package",
      "summary": "A package lives in its own repository.",
      "tokens": 1951,
      "hash": "sha256:44bd0866687b9bccc4b5e4b0c3a5e70138ca785115e2d63692bea750f8e86a56",
      "area": 11,
      "links": [
        "commands-for-packages",
        "packages-text-in-an-app",
        "standard-library",
        "the-public-registry"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "the-public-registry",
      "kind": "topic",
      "title": "The public registry",
      "summary": "The registry at jadpo.dev holds public Jadpo packages of both kinds.",
      "tokens": 4731,
      "hash": "sha256:f512972290ef1f87bc07dd595f9d072c5084ccfe2d3b8c220a79fbcc414bfbe3",
      "area": 11,
      "links": [
        "ai",
        "commands-for-packages",
        "erasure-at-providers",
        "http",
        "package-upgrades",
        "personal-data",
        "publish.publisher_mismatch",
        "registry.unreachable",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": "not built"
    },
    {
      "id": "the-verifier",
      "kind": "topic",
      "title": "The verifier",
      "summary": "The verifier is `jadpo package verify`, the same tool authors run, in a container image published with each Jadpo release.",
      "tokens": 1922,
      "hash": "sha256:e222f94ff4db19f617b5a656f9d8e9d3196b4d1bb08330f31c8ab2b3aa0855f9",
      "area": 11,
      "links": [
        "cli.verifier_start_failed",
        "http",
        "publish.file_not_allowed",
        "publish.too_large",
        "the-public-registry"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "connecting-in-app-jadpo",
      "kind": "topic",
      "title": "Connecting in app.jadpo",
      "summary": "A connection is how your app reaches a database, a mail server or a provider's API.",
      "tokens": 2545,
      "hash": "sha256:84c03c34052a9d7212dd10a2d5212d9d7d6debb2ccf82b9a5507045d80001d4e",
      "area": 11,
      "links": [
        "acceptances",
        "running-a-service-in-a-container",
        "secrets",
        "stores",
        "the-permissions-report"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "calling",
      "kind": "topic",
      "title": "Calling",
      "summary": "Your app reaches an outside service through a connection, a named entry under `connections:` in `app.jadpo` that says which package to use.",
      "tokens": 3940,
      "hash": "sha256:75d3cdf508f423bea9206194597bf97741bb7e5560a3dd76b640406661c83f8d",
      "area": 11,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "batches-work-over-many-items",
        "built-in-types",
        "connecting-in-app-jadpo",
        "decoding",
        "delivery-at-least-once-safe-to-repeat",
        "emitting-an-event",
        "faults",
        "files-put-read-and-the-disk-driver-in-development",
        "functions-and-actions",
        "how-a-run-is-kept",
        "how-polls-and-max-concurrent-run",
        "idempotent-writes",
        "kinds-of-package",
        "order-and-pages",
        "passing-a-failure-on-attempt",
        "several-changing-provider-calls",
        "time-limits",
        "turning-one-failure-into-another"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "decoding",
      "kind": "topic",
      "title": "Decoding",
      "summary": "Providers often send values in odd forms: a date as Unix seconds, a number as text, money as a whole number of pence.",
      "tokens": 3257,
      "hash": "sha256:42959f5f018836f6e30f0f24e3a98999a0693d594b22979a1ea8a93d4fa5dc8c",
      "area": 11,
      "links": [
        "standard-library"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "what-package-code-may-do",
      "kind": "topic",
      "title": "What package code may do",
      "summary": "A provider package may act on its own API, but never on your app's data.",
      "tokens": 2676,
      "hash": "sha256:f63ab4691be52908488c358c76843f0bc169e9a23c7e3429fe9b2eb515f9484f",
      "area": 11,
      "links": [
        "jobs-and-events",
        "running-a-service-in-a-container",
        "several-changing-provider-calls"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "several-changing-provider-calls",
      "kind": "topic",
      "title": "Several changing calls through a package",
      "summary": "Some jobs need several calls that each change something at a provider, in order: create a customer, attach a card, start a subscription.",
      "tokens": 2462,
      "hash": "sha256:2da0db0c4c9c4ab64e1091eeefd9d295eeb4470b9be5e53fd2213b27dccf7d83",
      "area": 11,
      "links": [
        "effect.call_in_loop",
        "http",
        "jobs-and-events",
        "reads-and-writes",
        "route.calls_past_deadline",
        "several-changing-calls-in-one-action",
        "step.context",
        "step.large_output",
        "step.late_failure",
        "step.store_required",
        "step.too_many",
        "step.unkeyed",
        "testing",
        "the-current-time-clock-now",
        "tooling"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "receiving-from-outside",
      "kind": "topic",
      "title": "Receiving from outside",
      "summary": "A provider tells your app that something happened in one of two ways: it sends a webhook, or it puts a message on a queue.",
      "tokens": 4134,
      "hash": "sha256:ab8376676947bae9e759827b3f861fc9f5e9a59c2d653a25de382e3db15328e9",
      "area": 11,
      "links": [
        "capabilities",
        "field-restrictions",
        "guide-receive-a-webhook",
        "how-queues-are-received",
        "how-webhooks-are-received",
        "kinds-of-package",
        "service-credentials",
        "subscribers",
        "the-cloudflare-queues-driver",
        "webhook-replies-handshakes-and-further-signature-schemes",
        "webhooks"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "oauth-grants",
      "kind": "topic",
      "title": "OAuth grants",
      "summary": "Use a grant when your app acts at another service for each of its users or organisations: a user's Google Calendar, an organisation's Xero, a Slack workspace install.",
      "tokens": 1322,
      "hash": "sha256:1a97cb73672309189cc2730407f801bd71b94ee6910d21e5c8a44a97e09de50e",
      "area": 11,
      "links": [
        "erasure",
        "external-services-built",
        "generated-routes",
        "policy",
        "secrets",
        "signing-keys"
      ],
      "aliases": [
        "acting-for-each-user-oauth-grants",
        "acting-for-a-user-at-another-service-oauth-grants"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": "not built"
    },
    {
      "id": "packages-from-other-jadpo-apps",
      "kind": "topic",
      "title": "Packages from other Jadpo apps",
      "summary": "Your app can call another Jadpo app's API through a package made from that app's OpenAPI document, exactly, with nothing to correct by hand.",
      "tokens": 613,
      "hash": "sha256:f3bd79c05e38521702a972bec92e0e2d2050392314a2eeeed44943992a9c1f16",
      "area": 11,
      "links": [
        "openapi",
        "service-credentials",
        "the-public-api-record"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "capabilities",
      "kind": "topic",
      "title": "Capabilities",
      "summary": "A capability is a job Jadpo does itself, such as storing files or sending email, done through a connection you choose.",
      "tokens": 3995,
      "hash": "sha256:7719686b7840a071d1a178b4d7653d4c14a71a790bd48f714c53e5fe8509bfe9",
      "area": 11,
      "links": [
        "acceptances",
        "ai",
        "bot-protection",
        "built-in-services",
        "caches",
        "data",
        "declared-deployables",
        "delivery-at-least-once-safe-to-repeat",
        "documents",
        "email",
        "erasure",
        "external-services-built",
        "files",
        "how-integrations-fit-together",
        "personal-data",
        "schedules",
        "search",
        "telemetry",
        "the-personal-data-report"
      ],
      "group": "External services",
      "page": "Capabilities",
      "status": null
    },
    {
      "id": "provider-calls-in-development",
      "kind": "topic",
      "title": "Provider calls in development",
      "summary": "In `jadpo dev`, every call to a provider is faked by default, so nothing leaves your machine and you need no credential.",
      "tokens": 957,
      "hash": "sha256:5fc41a3f3dafd05efe333b15dced0c3c60253d2d40a5eedd8a57d1b109eecdde",
      "area": 11,
      "links": [
        "debugging-and-review",
        "fakes-and-the-development-call-log",
        "fakes-for-integrations",
        "telemetry",
        "tests-and-fakes"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "compile-time",
      "kind": "topic",
      "title": "What a provider description costs your build",
      "summary": "A provider's description doesn't slow your build, however large it is, because the compiler never reads it.",
      "tokens": 242,
      "hash": "sha256:a04d67c85e2988b85f6c4bd8daf5119cde83f2670a04a18436aaa23450d3b03f",
      "area": 11,
      "links": [],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "tests-and-fakes",
      "kind": "topic",
      "title": "Tests and fakes",
      "summary": "In `jadpo test`, every package has a generated fake, so tests never call a provider.",
      "tokens": 333,
      "hash": "sha256:69c8c00968498da7df4fec4bc0e3e6104ae3d708450f9c1132fbb0697d9562fc",
      "area": 11,
      "links": [
        "fakes-for-integrations",
        "several-changing-provider-calls"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "what-reviewers-see",
      "kind": "topic",
      "title": "What reviewers see",
      "summary": "The approval report (Reviewing a change) lists, for each change:",
      "tokens": 218,
      "hash": "sha256:9c866dbfd1d460fbcabea51ad52ae646c3cab266d1736178b86993fa6aa58195",
      "area": 11,
      "links": [
        "marking-personal-fields",
        "package-upgrades",
        "reviewing-a-change"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "how-the-package-format-is-read",
      "kind": "topic",
      "title": "How the package format is read",
      "summary": "This is the detail behind The package format: exactly how Jadpo reads a package's folder, its names and the lock.",
      "tokens": 1077,
      "hash": "sha256:061bdf272aaee4fac19b2d8b3082605fbfc815f9b826e2f0de7061294052a1d8",
      "area": 11,
      "links": [
        "the-package-format"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "how-the-surface-and-the-publishing-bar-work",
      "kind": "topic",
      "title": "How the surface and the publishing bar work",
      "summary": "What a package's surface record holds, how its version is worked out, and what `jadpo package check` and `jadpo package show` do.",
      "tokens": 1319,
      "hash": "sha256:ff1c2740c5ceaf61bcd9558983f965423a8adb602dd74aa943f159c1e1fbdcf3",
      "area": 11,
      "links": [
        "developing-and-publishing-a-package",
        "packages-text-in-an-app",
        "the-surface"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
      "kind": "topic",
      "title": "How a release's facts, change record and fingerprints are worked out",
      "summary": "This is the detail behind What a release shows, The changelog, Search and The verifier: what `jadpo package check` prints above its bar, and what `jadpo package verify --json` writes.",
      "tokens": 1621,
      "hash": "sha256:3431821f4ef0a886c6f2a3346491f56c3f76e6dc441dd9ffcda39b28345aa29d",
      "area": 11,
      "links": [
        "the-public-registry",
        "the-verifier"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "how-the-registry-commands-work",
      "kind": "topic",
      "title": "How the registry commands work",
      "summary": "This is the detail behind Installing and updating from the registry, Yanks, takedowns and advisories, Search and Developing for the registry: what each command does and shows.",
      "tokens": 1875,
      "hash": "sha256:f887f24c0327b834dba55a61a101538ea31d9e706bf172ca14945b595cd2bd7d",
      "area": 11,
      "links": [
        "registry.unreachable",
        "the-public-registry"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": "partly built"
    },
    {
      "id": "how-packages-are-installed-and-linked",
      "kind": "topic",
      "title": "How packages are installed and linked",
      "summary": "This is the detail behind Installing safely: what `jadpo package add`, `update`, `remove`, `link` and `unlink` do, and what each refuses.",
      "tokens": 1547,
      "hash": "sha256:9dd6cb90683375fb2d62dc55a43973ffcb0d66b14624b75154995b9f5ec7175a",
      "area": 11,
      "links": [
        "how-the-registry-commands-work",
        "package-upgrades",
        "tooling",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "how-connections-to-packages-are-read",
      "kind": "topic",
      "title": "How connections to packages are read",
      "summary": "This is the detail behind Connecting in `app.jadpo`: which keys a connection to a package takes and needs, and what `jadpo check` writes about the hosts it reaches.",
      "tokens": 1036,
      "hash": "sha256:48e3330c619b4be1473de8493c6364b9ca9ae7100d0d372a51b56e084b54a3f2",
      "area": 11,
      "links": [
        "connecting-in-app-jadpo",
        "package-upgrades"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "package-names-and-linked-checkouts",
      "kind": "topic",
      "title": "A package's names, and watching a linked checkout",
      "summary": "How a name written through a package is told apart from the app's own, and how `jadpo dev` and `jadpo test --watch` follow a package you have linked to a checkout you are working on.",
      "tokens": 554,
      "hash": "sha256:b0c93c4cac57b1855920e6338a9a7d6417b1e57dda04bf34399dc06d9e0cbb92",
      "area": 11,
      "links": [],
      "aliases": [
        "a-package-s-names-and-watching-a-linked-checkout"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "two-versions-side-by-side-lazy-loading-and-the-package-cache",
      "kind": "topic",
      "title": "Two versions side by side, lazy loading and the package cache",
      "summary": "How an app holds two major versions of one package while it moves between them, and how Jadpo avoids compiling and checking package code the app doesn't use.",
      "tokens": 1079,
      "hash": "sha256:4cdde46c89435a45639517aba3195e02efca6ad014bde338bcb3e97580ec1e77",
      "area": 11,
      "links": [
        "packages-text-in-an-app",
        "records-and-manifest"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "how-the-openapi-importer-reads-a-document",
      "kind": "topic",
      "title": "How the OpenAPI importer reads a document",
      "summary": "What `jadpo package import openapi <file>` reads from a provider's OpenAPI document, what it writes, and what it leaves for you.",
      "tokens": 1379,
      "hash": "sha256:48ff6f1b5da58b857e49fa66918ccddd7a37239c2ac9aed3928d2f54695d5879",
      "area": 11,
      "links": [
        "command-line-errors",
        "decoding",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "how-provider-calls-are-made",
      "kind": "topic",
      "title": "How provider calls are made",
      "summary": "This is the detail behind Calling: which keys an operation takes, how its input is sent, who may call it, whether it may be sent again, and how its answer is classified and read.",
      "tokens": 1731,
      "hash": "sha256:fbe249c0401b7e12ae4a9192e0be2063ec40d5d0077efb6f6937635a734a0f65",
      "area": 11,
      "links": [
        "ai",
        "built-in-emails",
        "calling",
        "several-changing-provider-calls"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "wire-encodings-decoders-and-retries",
      "kind": "topic",
      "title": "Wire encodings, decoders and retries",
      "summary": "This is the detail behind Decoding and Calling: the encodings a provider's fields can be sent in, a package's own decoders, which fields are decoded, and how `retry:` and `timed_out:` work.",
      "tokens": 1508,
      "hash": "sha256:d8a712625fc95643605542d9573ffae0f1bad50f9c7d513b389a7826addef808",
      "area": 11,
      "links": [
        "calling",
        "decoding",
        "jobs-and-events",
        "standard-library"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "fakes-and-the-development-call-log",
      "kind": "topic",
      "title": "Fakes and the development call log",
      "summary": "This is the detail behind Tests and fakes and Provider calls in development: what a fake answers, how a script is used, and what the call log keeps.",
      "tokens": 1158,
      "hash": "sha256:5e18d4e1fe096b3f688be85181483126a4333005ca5a9bfda839a56843d6f86f",
      "area": 11,
      "links": [
        "provider-calls-in-development",
        "tests-and-fakes"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "shape-and-name-detection",
      "kind": "topic",
      "title": "Shape and name detection",
      "summary": "How the importer turns a provider's fields into standard types, by their shape and their names.",
      "tokens": 1336,
      "hash": "sha256:c96cd495f706f17fc35954648d3d19afd8cc3de56a7ca972c5073ebcf0b6df90",
      "area": 11,
      "links": [
        "the-scoped-review-and-unconfirmed-operations",
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "recordings",
      "kind": "topic",
      "title": "Recordings",
      "summary": "A recording is a provider's answer to one operation with its plain values replaced by placeholders, so its decoding can be checked without calling the provider.",
      "tokens": 960,
      "hash": "sha256:1dbbe8af6b2f291edd903599e2ccb6c3fe3ff574f073b9419e275c7a818f0d29",
      "area": 11,
      "links": [
        "kinds-of-test",
        "several-changing-provider-calls"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "the-scoped-review-and-unconfirmed-operations",
      "kind": "topic",
      "title": "The scoped review and unconfirmed operations",
      "summary": "This is the detail behind layers 4 and 5 of Mapping imported types to standard types: which imported types you review, how a review is marked, and which calls still need a recording to confirm them.",
      "tokens": 774,
      "hash": "sha256:6bda93b6c2322f5ba33e6e2d59ebb48d798133961c077d9dec0d56968c18fec7",
      "area": 11,
      "links": [
        "where-packages-come-from"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "how-webhooks-are-received",
      "kind": "topic",
      "title": "How webhooks are received",
      "summary": "This is the detail behind Webhooks as events: the generated route, how each signature scheme is checked, and how an event is read and kept once.",
      "tokens": 1402,
      "hash": "sha256:ceb1a1d8901910dfaa7dec9c89b513809d039dda6648c0bc0110beb2c7ad4225",
      "area": 11,
      "links": [
        "how-queues-are-received",
        "limits-and-runtime-faults",
        "receiving-from-outside",
        "webhook-replies-handshakes-and-further-signature-schemes"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "the-cloudflare-queues-driver",
      "kind": "topic",
      "title": "The Cloudflare Queues driver",
      "summary": "Use the Cloudflare Queues driver to receive a Cloudflare queue in an app deployed to Workers.",
      "tokens": 1340,
      "hash": "sha256:eb8c46fd6564551aee7e76dbd0029354e6188c43708a4c176c74f64d0a1d42dc",
      "area": 11,
      "links": [
        "capabilities",
        "receiving-from-outside"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "how-queues-are-received",
      "kind": "topic",
      "title": "How queues are received",
      "summary": "This is the detail behind Queues: when a message is acknowledged, what is parked, how messages are read and fetched, and how a package provides `receiving`.",
      "tokens": 1549,
      "hash": "sha256:38237c6d2ad95b423b1976f85660031bdeec20a9faeef7fd3a4ee3a045c70650",
      "area": 11,
      "links": [
        "receiving-from-outside",
        "the-cloudflare-queues-driver"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "webhook-replies-handshakes-and-further-signature-schemes",
      "kind": "topic",
      "title": "Webhook replies, handshakes and further signature schemes",
      "summary": "This is the detail behind Webhooks that need a reply and Handshakes: how the Twilio, Slack and SNS signatures are checked, how each handshake is answered, and how a reply is made, kept and limited.",
      "tokens": 1665,
      "hash": "sha256:be80cf8b1439e488905bb9a9722b3975f4ad528dcf2df044ce946efb645568fc",
      "area": 11,
      "links": [
        "field-restrictions",
        "receiving-from-outside"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "package-actions-and-recipes",
      "kind": "topic",
      "title": "Package actions and recipes",
      "summary": "What a package action may call, how the app calls one, and how `jadpo package recipe` copies a recipe into your project.",
      "tokens": 1087,
      "hash": "sha256:f272680c81635588183d3af04a25e673d4486d10bcb0a7428f71e54de951a51a",
      "area": 11,
      "links": [
        "what-package-code-may-do"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "package-subscribers-and-recipes-in-sample",
      "kind": "topic",
      "title": "Package subscribers and recipes in sample/",
      "summary": "What a package's own subscribers hear and emit, and how `jadpo package check` compiles a package's recipes in its `sample/` app.",
      "tokens": 797,
      "hash": "sha256:1b26a343d1019a178385b94a7ae99ff6a0aaa0b0242a4550c589a1627fe491ec",
      "area": 11,
      "links": [],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": null
    },
    {
      "id": "how-polls-and-max-concurrent-run",
      "kind": "topic",
      "title": "How polls and max_concurrent: run",
      "summary": "This is the detail behind Polls and a connection's `max_concurrent:`: what a poll declares, when it runs and what it keeps, and how the cap on calls at once is counted.",
      "tokens": 1533,
      "hash": "sha256:5317801fc340cd5ebaf45f879bc23f71b151b8f77c7f1cc9be8fa575e1c3daae",
      "area": 11,
      "links": [
        "what-package-code-may-do"
      ],
      "group": "External services",
      "page": "Receiving from outside",
      "status": null
    },
    {
      "id": "enum-values-and-failures-through-a-package",
      "kind": "topic",
      "title": "Enum values and failures through a package",
      "summary": "How your app writes a package's enum values and failures: through the package's name, as its types are.",
      "tokens": 413,
      "hash": "sha256:a327e3d519f671d4c511e8f09da94f61da5df2da8b9b2d3895dab5e986cf20e8",
      "area": 11,
      "links": [],
      "group": "External services",
      "page": "Using packages",
      "status": null
    },
    {
      "id": "external-services-built",
      "kind": "topic",
      "title": "What is built: External services",
      "summary": "These mistakes are specified but not reported yet:",
      "tokens": 1355,
      "hash": "sha256:bc60aea043506ad246624be0d48b1b96850297cd0d72e5f35e6cf0a63de982cb",
      "area": 11,
      "links": [
        "acceptances",
        "batches-work-over-many-items",
        "calling",
        "developing-and-publishing-a-package",
        "erasure-at-providers",
        "external-services",
        "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
        "how-the-registry-commands-work",
        "jobs-and-events",
        "logic",
        "project-layout-and-modules",
        "the-public-registry",
        "the-verifier"
      ],
      "aliases": [
        "errors-still-to-build"
      ],
      "group": "External services",
      "page": null,
      "status": null
    },
    {
      "id": "jobs-and-events",
      "kind": "topic",
      "title": "Background work",
      "summary": "This page covers the work your app does outside a request: schedules that run an action on a timer, events an action announces, subscribers that react to them, and what happens when that work fails.",
      "tokens": 584,
      "hash": "sha256:806a3c7f99e90974448eb24f6f8691ee62dabea11e922396fdf6501551976d6b",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "events-from-outside",
        "functions-and-actions",
        "http",
        "schedules"
      ],
      "group": "Background work",
      "page": null,
      "status": null
    },
    {
      "id": "schedules",
      "kind": "topic",
      "title": "Schedules",
      "summary": "Use a schedule for work that should happen on a timer rather than when someone asks, such as sending reminders every 15 minutes or tidying up once a day.",
      "tokens": 3942,
      "hash": "sha256:fbfb7e15073e3a227f0a0f6daf834b80728091bef95e5d26a3305fc55a962883",
      "area": 12,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "background-work-and-tenants",
        "delivery-at-least-once-safe-to-repeat",
        "encrypted-fields",
        "how-a-run-is-kept",
        "idempotent-writes",
        "identity",
        "lifecycle",
        "policy-and-background-work",
        "retention",
        "stores",
        "testing",
        "what-an-operator-sees",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Schedules",
      "status": null
    },
    {
      "id": "batch-work-keeps-its-progress",
      "kind": "topic",
      "title": "Batch work keeps its progress",
      "summary": "An action is all-or-nothing: its writes all commit, or none do (All-or-nothing actions).",
      "tokens": 495,
      "hash": "sha256:94228f8ef222cb6b866852601d2d582abe3e206911b4254faa2c7f46fd46c763",
      "area": 12,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "batches-work-over-many-items",
        "faults",
        "named-queries"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "batches-work-over-many-items",
      "kind": "topic",
      "title": "Batches",
      "summary": "Use a batch when one action can't hold the work: importing every row of an uploaded spreadsheet, writing a large export, or walking every record a query finds or every page of a provider's list.",
      "tokens": 3520,
      "hash": "sha256:597ea3dc8df5e3c8dc7454836ae15189b75eb802a1d5f50a386c19a6f8dd6788",
      "area": 12,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "built-in-types",
        "data-formats-json-csv-tsv-and-json-lines",
        "declining-a-judgement-call",
        "external-services",
        "files",
        "how-a-run-is-kept",
        "limits-and-runtime-faults",
        "loops",
        "named-queries",
        "one-input",
        "order-and-pages",
        "passing-functions",
        "type.batch_order_updatable"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": "partly built"
    },
    {
      "id": "how-a-run-is-kept",
      "kind": "topic",
      "title": "How a run is kept",
      "summary": "This topic is the detail of how a `batches.each` run is stored, resumed and checked.",
      "tokens": 2953,
      "hash": "sha256:326ffd5369628e4255d03a5bf1b0988fb8fe7539704cf87ab29453034347af65",
      "area": 12,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "background-work-and-tenants",
        "batches-work-over-many-items",
        "export-batch-runs",
        "file-batch-runs",
        "geospatial-queries",
        "limits-and-runtime-faults",
        "one-store-per-action",
        "several-changing-calls-in-one-action",
        "stable-identity",
        "system-tables",
        "the-jadpo-command",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "file-batch-runs",
      "kind": "topic",
      "title": "How a file's run is kept",
      "summary": "This topic is what a file helper's read run does beyond a query's run (How a run is kept).",
      "tokens": 1655,
      "hash": "sha256:208f82916f72c97b142cedb866ebcd809b0110b9dbb9d7ccc80158f13b887c2c",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "data-formats-json-csv-tsv-and-json-lines",
        "files",
        "how-a-run-is-kept",
        "how-outside-calls-are-made-safe"
      ],
      "aliases": [
        "how-a-file-s-run-is-kept"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "export-batch-runs",
      "kind": "topic",
      "title": "How an export's run is kept",
      "summary": "This topic is what a file helper's write run does beyond a query's run (How a run is kept).",
      "tokens": 751,
      "hash": "sha256:bdd4f33e41de32ced3a825a8018f6eb40858003c4cda3f66518011d2fbce5034",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "data-formats-json-csv-tsv-and-json-lines",
        "files",
        "how-a-run-is-kept",
        "how-outside-calls-are-made-safe"
      ],
      "aliases": [
        "how-an-export-s-run-is-kept"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "batches-tenants-and-grants",
      "kind": "topic",
      "title": "Batches, tenants and grants",
      "summary": "In an app shared by several customers, each one a tenant (Tenancy), a batch reaches only one tenant's records: the one its saved values name.",
      "tokens": 1291,
      "hash": "sha256:1db58bcb2d0c2105d933210cb6043099d7fcc643c61f276282bebc24cfb00e16",
      "area": 12,
      "links": [
        "background-work-and-tenants",
        "policy-and-background-work",
        "tenancy"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "what-a-run-reaches-under-policy",
      "kind": "topic",
      "title": "What a run reaches under policy",
      "summary": "A batch's actions run as the system, but what they do still answers to the policy of the people who started the run or read its status.",
      "tokens": 2177,
      "hash": "sha256:2cd5b00a27692f690e9d5e0bed24b9a768c9f712b7d80391773b748035b11a26",
      "area": 12,
      "links": [
        "action-permissions",
        "built-in-types",
        "subscribers"
      ],
      "group": "Background work",
      "page": "Batches",
      "status": null
    },
    {
      "id": "declaring-an-event",
      "kind": "topic",
      "title": "Declaring an event",
      "summary": "An event records that something happened, so that other code can react to it later without the action that caused it waiting.",
      "tokens": 1032,
      "hash": "sha256:c9edc7319953ebb0d8e0403a77d4b81ba8a41451f12eedcd1cb845114f308936",
      "area": 12,
      "links": [
        "acceptances",
        "declaring-a-failure",
        "emitting-an-event",
        "policy",
        "reacting-in-another-domain",
        "subscribers",
        "the-public-api-record",
        "what-is-committed-and-why"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "emitting-an-event",
      "kind": "topic",
      "title": "Emitting an event",
      "summary": "An action announces an event with `emit`, a statement written like `reject` (Raising a failure).",
      "tokens": 755,
      "hash": "sha256:296604368ecbfa4622c7a0b3c98e50bea92b26bf0c254495b7dbb654806fa749",
      "area": 12,
      "links": [
        "declaring-an-event",
        "faults",
        "idempotent-writes",
        "raising-a-failure-reject",
        "the-operations-every-entity-gets",
        "waiting-for-follow-on-work"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "subscribers",
      "kind": "topic",
      "title": "Subscribers",
      "summary": "A subscriber reacts to an event: each time the event is committed, it runs an action.",
      "tokens": 1116,
      "hash": "sha256:849ca637b5f17425686477b536b4f7e145a694c293eff2e889203a3dceb381cc",
      "area": 12,
      "links": [
        "declaring-an-event",
        "policy",
        "policy-and-background-work",
        "retries-and-giving-up"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "background-work-and-tenants",
      "kind": "topic",
      "title": "Background work and tenants",
      "summary": "In an app with a `tenant:`, each kind of background work reaches a stated set of tenants.",
      "tokens": 549,
      "hash": "sha256:d21080d509f39e9a47ef4b18bf05411828c8279ae141b041c7dc881a6dfdd768",
      "area": 12,
      "links": [
        "batches-tenants-and-grants",
        "magic-links",
        "policy-and-background-work",
        "tenancy"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "reacting-in-another-domain",
      "kind": "topic",
      "title": "Reacting in another domain",
      "summary": "One domain changes another in one of two ways (Ownership and calls replace modules): it calls one of the other domain's `public` actions, or it emits an event the other domain subscribes to.",
      "tokens": 321,
      "hash": "sha256:0241e53b0ef02c58b1adfffb23a4bc28631756f39da23b1d88d76f87db3310bf",
      "area": 12,
      "links": [
        "ownership-and-calls-replace-modules"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "long-running-coordination",
      "kind": "topic",
      "title": "Long-running coordination",
      "summary": "A process that waits for several things over time, such as an order waiting for both payment and stock, needs no workflow language.",
      "tokens": 317,
      "hash": "sha256:5eaf1d01a19d4d9a06b0a2c55ba634e73dddd4ca0163d5c8660a0eda89a5a07a",
      "area": 12,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "delivery-at-least-once-safe-to-repeat",
      "kind": "topic",
      "title": "Delivery: at least once, safe to repeat",
      "summary": "Every committed event reaches each of its subscribers at least once.",
      "tokens": 1823,
      "hash": "sha256:4b383e7dd3021cd87612d0756ec9841771a9fed1e9eb19ff0528071986734c17",
      "area": 12,
      "links": [
        "acceptances",
        "all-or-nothing-actions-and-concurrent-changes",
        "background-work-and-tenants",
        "calling",
        "declaring-an-event",
        "events-from-outside",
        "every-boundary-through-the-contract",
        "retries-and-giving-up",
        "several-changing-calls-in-one-action",
        "standard-type-encodings",
        "structured-values",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "several-changing-calls-in-one-action",
      "kind": "topic",
      "title": "Several changing calls in one action",
      "summary": "Some jobs take several calls that each change something at a provider.",
      "tokens": 4085,
      "hash": "sha256:93a9686df7b3426f73cbb2e8fd423c62a78cfa9a6a4403ce68f86a670424b07c",
      "area": 12,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "built-in-emails",
        "calling",
        "debugging-and-review",
        "effect.call_in_loop",
        "fakes-for-integrations",
        "files",
        "idempotent-writes",
        "loops",
        "personal-data",
        "route.calls_past_deadline",
        "step.context",
        "step.encryption_key_required",
        "step.large_output",
        "step.late_failure",
        "step.settings_invalid",
        "step.store_required",
        "step.too_many",
        "step.unkeyed",
        "system-tables",
        "time-limits",
        "what-an-operator-sees"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "where-events-travel",
      "kind": "topic",
      "title": "Where events travel",
      "summary": "Events stay inside the Jadpo runtime.",
      "tokens": 1767,
      "hash": "sha256:581b0de58e16048f6747e3e81d741f1ced1902f268a7994496ee54fabe993eb8",
      "area": 12,
      "links": [
        "computed-backfills",
        "events-from-outside",
        "retries-and-giving-up",
        "waiting-for-follow-on-work"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "events-from-outside",
      "kind": "topic",
      "title": "Events from outside",
      "summary": "Besides the events your actions emit, four sources outside the app produce events: webhooks, a package's own events, polls and queues.",
      "tokens": 1570,
      "hash": "sha256:41f6201c4aae032701b87adf9d6e024a5f323861862f3a2b4bb09bc13f645454",
      "area": 12,
      "links": [
        "a-workers-deployable",
        "receiving-from-outside",
        "what-package-code-may-do"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "retries-and-giving-up",
      "kind": "topic",
      "title": "Retries and giving up",
      "summary": "When a subscriber's action fails, Jadpo decides whether to try again from the way it failed.",
      "tokens": 1853,
      "hash": "sha256:65825f4f29477a293e294891b4bfdc02d77a1b3d2af558c64e53f2f63ceb71d1",
      "area": 12,
      "links": [
        "calling",
        "failure-kinds",
        "system-tables",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "what-an-operator-sees",
      "kind": "topic",
      "title": "What an operator sees",
      "summary": "Background work that goes wrong waits for a person rather than disappearing.",
      "tokens": 4118,
      "hash": "sha256:0ae0ec1d653e18e2964aa395735b86cc05bfe4356232757a3fca3d13c2375a3d",
      "area": 12,
      "links": [
        "built-in-services",
        "database-and-other-connection-urls",
        "debugging-and-review",
        "logging",
        "retries-and-giving-up",
        "review-and-sign-off",
        "schedules",
        "system-tables",
        "the-jadpo-command"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "limits-and-runtime-faults",
      "kind": "topic",
      "title": "Limits and runtime faults",
      "summary": "These limits may change once they have been measured on real runs.",
      "tokens": 264,
      "hash": "sha256:f359523ba35f295b50eaee12c5c094fb8954202de2549b9496a010ffcdc0fc97",
      "area": 12,
      "links": [
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "jobs-and-events-built",
      "kind": "topic",
      "title": "What is built: Background work",
      "summary": "Which parts of Background work are built, and what the rest waits on",
      "tokens": 431,
      "hash": "sha256:6cdd079ee3b8876b9b07073d8bc295e3964eb979063511b5b084234d3a35d4c0",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "built-in-services",
        "commands-for-services-calls-email-and-stored-data",
        "debugging-and-review",
        "file-batch-runs",
        "how-a-run-is-kept",
        "personal-data",
        "retries-and-giving-up",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": null,
      "status": null
    },
    {
      "id": "testing",
      "kind": "topic",
      "title": "Testing",
      "summary": "A Jadpo test runs your real application against a real database.",
      "tokens": 651,
      "hash": "sha256:89c3a05d610e8976ebeaa202f54a905f748788692176ffa9c873ece0b25b88d4",
      "area": 13,
      "links": [],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "where-tests-live",
      "kind": "topic",
      "title": "Where tests live",
      "summary": "A test sits beside the file it tests, in a file named `<name>.test.jadpo`.",
      "tokens": 308,
      "hash": "sha256:7a0999ac8c5a6977c30fb9374c8c0e457bbb6191222767fdfe17dbfbd8d27da1",
      "area": 13,
      "links": [
        "imports"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "writing-a-test",
      "kind": "topic",
      "title": "Writing a test",
      "summary": "A test is a sentence that names it, then a body of ordinary code.",
      "tokens": 420,
      "hash": "sha256:d7818c4eadb00e10cf52409069f20546b5b21466e8b4bbb529b55637170bfabb",
      "area": 13,
      "links": [
        "stable-identity"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "kinds-of-test",
      "kind": "topic",
      "title": "Kinds of test",
      "summary": "Jadpo works out a test's kind from what it calls, so you don't declare it.",
      "tokens": 3274,
      "hash": "sha256:de29939d12457c0ac82de1aca466c966fef95ef677db48e2b4d732d656523c3f",
      "area": 13,
      "links": [
        "acting-as-a-user",
        "action-permissions",
        "ai-tests",
        "caches-and-events",
        "idempotent-writes",
        "in-development-and-tests",
        "recordings",
        "retention",
        "schedules",
        "shared-test-data-fixtures",
        "starting-and-ending-a-session",
        "streaming-a-model-s-answer",
        "the-operations-every-entity-gets",
        "ways-to-sign-in"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "test-settings",
      "kind": "topic",
      "title": "Test settings",
      "summary": "A test needs no settings.",
      "tokens": 380,
      "hash": "sha256:6f27239d436ade0755b5d74d96b125faf2ceb19f5929c8cddb6d13766f6078e4",
      "area": 13,
      "links": [
        "configuration-in-tests",
        "controlling-time",
        "fakes-for-integrations",
        "feature-flags",
        "shared-test-data-fixtures"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "acting-as-a-user",
      "kind": "topic",
      "title": "Acting as a user",
      "summary": "An action receives its caller, the person or service signed in, as a typed parameter (The principal).",
      "tokens": 1161,
      "hash": "sha256:67e59b8a5eaf840889fa5351e4790a1601d4cbf988d0241615650062513d506a",
      "area": 13,
      "links": [
        "a-membership-role",
        "checking-the-person-sign-in",
        "concealing-records",
        "in-development-and-tests",
        "policy",
        "the-principal"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "controlling-time",
      "kind": "topic",
      "title": "Controlling time",
      "summary": "A test never waits for real time.",
      "tokens": 411,
      "hash": "sha256:8da88b3d26edf69e8d4fd6c9aea4bba66b5812babe0d2d14c74942de5052659e",
      "area": 13,
      "links": [
        "faults",
        "kinds-of-test",
        "standard-library",
        "the-current-time-clock-now"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "configuration-in-tests",
      "kind": "topic",
      "title": "Configuration in tests",
      "summary": "A test never reads your machine's environment.",
      "tokens": 405,
      "hash": "sha256:69f123dbc1c3d52760465c77ea4870e6f369553def0b0512203c14e3a6e900cb",
      "area": 13,
      "links": [
        "settings-config-jadpo"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "fakes-for-integrations",
      "kind": "topic",
      "title": "Fakes for integrations",
      "summary": "A test never reaches a real provider, the outside service an integration talks to.",
      "tokens": 2744,
      "hash": "sha256:fbde31e28f953196dc3da3d83bd973ab6f94d4d4cb05fb8e60abc197260c8cbd",
      "area": 13,
      "links": [
        "ai-tests",
        "batches-work-over-many-items",
        "calling",
        "debugging-and-review",
        "documents",
        "email",
        "external-services",
        "files",
        "oauth-grants",
        "search",
        "several-changing-calls-in-one-action",
        "test.subscriber_failed"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "shared-test-data-fixtures",
      "kind": "topic",
      "title": "Shared test data: fixtures",
      "summary": "When several test files need the same data, write a fixture.",
      "tokens": 942,
      "hash": "sha256:0464416a60ca7f7e1e2490ae22fb0b8ab498dda2e8a22c2b14d81699a6994dc4",
      "area": 13,
      "links": [
        "seeds"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "assertions",
      "kind": "topic",
      "title": "Assertions",
      "summary": "`assert condition` fails the test when the condition is false.",
      "tokens": 1656,
      "hash": "sha256:ef3d6cf94604d619b0ee53991b2e0227e33269a90a1d9d6220dcfb86d4af6c02",
      "area": 13,
      "links": [
        "debugging-and-review",
        "failures",
        "kinds-of-test",
        "passing-a-failure-on-attempt",
        "testing"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "running-tests",
      "kind": "topic",
      "title": "Running tests",
      "summary": "`jadpo test` runs every test in the project, and owns everything a run needs, so nothing about it appears in your source.",
      "tokens": 633,
      "hash": "sha256:1eead93c8923845ddeb60fbc830727d4fc5b683d684ac405ff2cc9a9666acb5d",
      "area": 13,
      "links": [
        "the-jadpo-command",
        "the-test-database"
      ],
      "aliases": [
        "running-tests-from-the-command-line"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "the-test-database",
      "kind": "topic",
      "title": "The test database",
      "summary": "Each test gets its own database at the latest migration, empty except for what its fixtures create.",
      "tokens": 451,
      "hash": "sha256:4a30175f95d85cdbe033a8cdbf8d037882b8003797c9d8bbeabdbd85b4daf74f",
      "area": 13,
      "links": [
        "stores",
        "test.database_unavailable"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "caches-and-events",
      "kind": "topic",
      "title": "Events and caches in tests",
      "summary": "An event is a fact an action records, such as \"an order was placed\", and a subscriber is code that runs when one is delivered (Subscribers).",
      "tokens": 1164,
      "hash": "sha256:62d36b20664bf80231e6d7b65ce7d4675a2d905956675f6b0173ca42566a4a37",
      "area": 13,
      "links": [
        "caches",
        "retries-and-giving-up",
        "subscribers",
        "test.subscriber_failed",
        "waiting-for-follow-on-work"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "testing-built",
      "kind": "topic",
      "title": "What is built: Testing",
      "summary": "Which parts of Testing are built, and what the rest waits on",
      "tokens": 2185,
      "hash": "sha256:d80661c90bae391738f08a9d5673dc6d0fa87a112c7c09eb4b6c919af3ae47f9",
      "area": 13,
      "links": [
        "debugging-and-review",
        "email",
        "kinds-of-test",
        "seeds",
        "testing",
        "tooling"
      ],
      "group": "Testing",
      "page": null,
      "status": null
    },
    {
      "id": "tooling",
      "kind": "topic",
      "title": "Tools",
      "summary": "The `jadpo` command and everything around it: the formatter, the editor support, how errors are shown, the generated `build/` folder, the tools agents use to look things up before they change code,…",
      "tokens": 420,
      "hash": "sha256:654f4ebe11ab98d525e2c1fe7fcdb54e8fd0a496187a8a2ffb59f7a3d1f142dc",
      "area": 14,
      "links": [],
      "group": "Tools",
      "page": null,
      "status": null
    },
    {
      "id": "the-jadpo-command",
      "kind": "topic",
      "title": "The jadpo command",
      "summary": "You work with Jadpo through one command, `jadpo`, and a short list of subcommands.",
      "tokens": 3682,
      "hash": "sha256:f533909261cfe56c83d93799cbe93a476c447bebf89bf0f72c9241e15c4a6bff",
      "area": 14,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "acceptances",
        "checking-the-person-sign-in",
        "comparing-two-builds",
        "debugging-and-review",
        "declared-deployables",
        "external-services",
        "failures-for-client-apps",
        "formatting",
        "jobs-and-events",
        "kinds-of-test",
        "provider-calls-in-development",
        "records-and-manifest",
        "review-and-sign-off",
        "sharing-with-jadpo-hq",
        "test.database_unavailable",
        "testing",
        "the-build-folder",
        "the-root",
        "the-test-database",
        "ways-to-sign-in",
        "where-events-travel",
        "which-jadpo-runs"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-looking-into-and-changing-code",
      "kind": "topic",
      "title": "Commands for looking into and changing code",
      "summary": "These commands show you what your code does: its routes, the SQL its queries send, and what a prompt sends a model.",
      "tokens": 1155,
      "hash": "sha256:8a7cc0c4ea67a3b31eddbc55d6b5ff93518bb12cda8b63641315b2c897403531",
      "area": 14,
      "links": [
        "ai",
        "external-services",
        "project-layout-and-modules",
        "rate-limits",
        "routes-signed-in-by-default"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-the-database-settings-and-translations",
      "kind": "topic",
      "title": "Commands for the database, settings and translations",
      "summary": "These commands change what sits beside your code: the database's migrations, your local settings, and the wording of your app in each language.",
      "tokens": 2005,
      "hash": "sha256:47094354632fd7f74abbdc58869782bc647cefb2f82f20be0e6b322807327af9",
      "area": 14,
      "links": [
        "encrypted-fields",
        "failures-for-client-apps",
        "migration.drop_not_accepted",
        "migrations",
        "seeds",
        "settings-config-jadpo",
        "tooling-for-translations"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-records-findings-and-review",
      "kind": "topic",
      "title": "Commands for records, findings and review",
      "summary": "Some files in your project are records: files Jadpo writes for you to commit, such as the record of your public API, which a reviewer reads in a pull request (Review and records).",
      "tokens": 1818,
      "hash": "sha256:ef6fb9faaf6609efc66a0d75581bf94a25af6513c023bda6876f658872e048e1",
      "area": 14,
      "links": [
        "acceptances",
        "comparing-two-builds",
        "declining-a-judgement-call",
        "records-and-manifest",
        "reviewing-a-change",
        "sharing-with-jadpo-hq",
        "standard-type-clashes",
        "suggestions",
        "what-is-committed-and-why"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-background-work",
      "kind": "topic",
      "title": "Commands for background work",
      "summary": "These commands are for an operator: the person who looks after a running app.",
      "tokens": 879,
      "hash": "sha256:6abc5c7ea3695b933d1a3755629569e691674a5989d0e5cfbea7a1dd81a7760a",
      "area": 14,
      "links": [
        "several-changing-provider-calls",
        "what-an-operator-sees"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-packages",
      "kind": "topic",
      "title": "Commands for packages",
      "summary": "A package is code you install rather than write: a library, or a provider package that calls an outside service such as Stripe (External services).",
      "tokens": 4569,
      "hash": "sha256:5ff759aa290ea9e9da40a0319b01bcd6e609c187b40a9a47ec8df224e3a57298",
      "area": 14,
      "links": [
        "ai",
        "developing-and-publishing-a-package",
        "external-services",
        "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
        "how-the-registry-commands-work",
        "package-upgrades",
        "the-personal-data-report",
        "the-public-registry",
        "the-surface",
        "the-verifier",
        "where-packages-come-from"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-services-calls-email-and-stored-data",
      "kind": "topic",
      "title": "Commands for services, calls, email and stored data",
      "summary": "These commands change a feature flag while your app runs, show what your app sent outside while you develop it, the provider calls and the email, and check a deploy before it happens.",
      "tokens": 1780,
      "hash": "sha256:1f48ae313c080aeac923e7f31e07fad128cd1738c5a570bfd9195fd7d5477e3d",
      "area": 14,
      "links": [
        "a-native-deployable",
        "ai",
        "debugging-and-review",
        "email",
        "external-services",
        "feature-flags",
        "files",
        "flags-changed-listed-and-removed",
        "jobs-and-events",
        "oauth-grants",
        "search",
        "several-changing-calls-in-one-action"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "commands-for-debugging-editors-and-help",
      "kind": "topic",
      "title": "Commands for debugging, editors and help",
      "summary": "`jadpo why <schedule>` ends with the schedule's `.jadpo` place, and takes `--json` (Watching schedules).",
      "tokens": 965,
      "hash": "sha256:25e0c0e9e9ee8aa0a12e08b02cffc4ded5e25ebe158f816f483686c2cd8b5a08",
      "area": 14,
      "links": [
        "debugging-and-review",
        "editor-support",
        "path-ids",
        "personal-data",
        "what-an-operator-sees",
        "which-jadpo-runs"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "formatting",
      "kind": "topic",
      "title": "Formatting",
      "summary": "`jadpo fmt` lays out your code, so you never choose a style.",
      "tokens": 841,
      "hash": "sha256:624c1103eaf032edf0434ae9e2dbe307d43a097575027dfa20f60df1d18fd0e6",
      "area": 14,
      "links": [
        "files-and-names",
        "imports",
        "project-layout-and-modules",
        "settings-config-jadpo"
      ],
      "group": "Tools",
      "page": "Formatter and editors",
      "status": null
    },
    {
      "id": "which-jadpo-runs",
      "kind": "topic",
      "title": "Which jadpo runs",
      "summary": "A project is written for one release line of Jadpo, such as 0.1, and while Jadpo is at 0.x a minor release may break an app.",
      "tokens": 2080,
      "hash": "sha256:d414878fdadaa5d0988ff7c86e09672d6bffae7fe4c4145025e315945a3f123a",
      "area": 14,
      "links": [
        "the-root",
        "what-is-committed-and-why"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    },
    {
      "id": "editor-support",
      "kind": "topic",
      "title": "Editor support",
      "summary": "Your editor gets the compiler's own view of your code through the language server, `jadpo lsp`: errors while you type, hover, go to definition, find references, completion, formatting and quick fixes.",
      "tokens": 2041,
      "hash": "sha256:879c5bf23d7714713989b50b731d9bda65a6ea208a509e1270b7cae48f6d87b9",
      "area": 14,
      "links": [
        "configuration",
        "data",
        "declining-a-judgement-call",
        "http",
        "imports",
        "reads-and-writes",
        "settings-config-jadpo",
        "stable-identity",
        "standard-type-clashes"
      ],
      "group": "Tools",
      "page": "Formatter and editors",
      "status": null
    },
    {
      "id": "error-messages",
      "kind": "topic",
      "title": "Error messages",
      "summary": "Every error has one shape, in the terminal, in the editor and as JSON: what is wrong, where, why, the recommended next step, who decides, the rule ID and a help link.",
      "tokens": 796,
      "hash": "sha256:f3f90422447d4ecaf778d7b5864d2d7ae9abc412217c0b8d0ff294d7fb7c30a0",
      "area": 14,
      "links": [
        "a-native-deployable",
        "declining-a-judgement-call",
        "faults"
      ],
      "aliases": [
        "every-error-has-the-same-shape"
      ],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "the-build-folder",
      "kind": "topic",
      "title": "The build/ folder",
      "summary": "`build/` holds only generated files.",
      "tokens": 691,
      "hash": "sha256:ecb12b8b32e4715bd6c37d3242ae79171c66c4e5f81c737ed4ce2f6d0c7db440",
      "area": 14,
      "links": [
        "data",
        "monitoring-thresholds",
        "reads-and-writes",
        "records-and-manifest",
        "stable-identity",
        "the-public-api-record"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    },
    {
      "id": "tools-for-agents",
      "kind": "topic",
      "title": "Tools for agents",
      "summary": "Coding agents look things up through the compiler rather than by browsing folders.",
      "tokens": 1046,
      "hash": "sha256:6a149f3c15bce5c8c66ae7c3085a4f9cb702c1642c61d6ee6a706edf4cc61975",
      "area": 14,
      "links": [
        "constants",
        "declining-a-judgement-call",
        "logic",
        "project-layout-and-modules"
      ],
      "group": "Tools",
      "page": "Tools for agents",
      "status": null
    },
    {
      "id": "suggestions",
      "kind": "topic",
      "title": "Suggestions",
      "summary": "`jadpo suggest` finds code that could use a standard type or a standard operation, such as money held as a whole number of pence, or a loop that adds up a list.",
      "tokens": 448,
      "hash": "sha256:eea96143c4e277bf00765486ff2708c551858af6b3069ea4354c72412fb7ea7f",
      "area": 14,
      "links": [],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "signals",
      "kind": "topic",
      "title": "Signals",
      "summary": "A signal is a pattern `jadpo suggest` looks for.",
      "tokens": 836,
      "hash": "sha256:172cfed93102b3b24ff6e25207a6e90459b9b73d8d11b97904f0bed1c90eb42c",
      "area": 14,
      "links": [
        "named-types",
        "standard-library"
      ],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "snippets-and-their-canonical-form",
      "kind": "topic",
      "title": "Snippets and their canonical form",
      "summary": "A finding is about a snippet: the smallest expression, or member of a declaration, that holds the signal.",
      "tokens": 343,
      "hash": "sha256:e2ad9a81b49bca93560961b915b160edff966d0f15fae8424df5cae57cf2e315",
      "area": 14,
      "links": [],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "suggestions-report",
      "kind": "topic",
      "title": "The suggestions report",
      "summary": "Findings are numbered S1, S2… in file order, each with its place, what it suggests, the signal and the snippet.",
      "tokens": 441,
      "hash": "sha256:4eb1ea944cd0f29ffdea1761beed46ddf54a4bb62426a9a27b8b27dbd9d390a8",
      "area": 14,
      "links": [
        "sharing-with-jadpo-hq"
      ],
      "aliases": [
        "the-report"
      ],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "ignoring-a-suggestion",
      "kind": "topic",
      "title": "Ignoring a suggestion",
      "summary": "When a finding is wrong for your code, keep it quiet with a reason:",
      "tokens": 278,
      "hash": "sha256:38c222b8c7748571437e1d4ffab04bc8ee6182d8f5ccc2b98cd0c484817a6b24",
      "area": 14,
      "links": [
        "the-root",
        "what-is-committed-and-why"
      ],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "teaching-a-miss",
      "kind": "topic",
      "title": "Teaching a miss",
      "summary": "When the scan missed something, record it before you change the code:",
      "tokens": 457,
      "hash": "sha256:00399750fd2d390852ed4de358b64b1c7cd85ecf83069f73fc8a53760381bc7d",
      "area": 14,
      "links": [
        "the-root",
        "what-is-committed-and-why"
      ],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "what-is-kept-and-where",
      "kind": "topic",
      "title": "What is kept, and where",
      "summary": "Every entry to share goes to `.jadpo/suggest_pending` with its kind: `found`, `accepted` or `ignored`.",
      "tokens": 379,
      "hash": "sha256:0be229ecfc38e1b72aade418bb985b5358fa3cdf0746df4ced16b460b1f7be4c",
      "area": 14,
      "links": [
        "sharing-with-jadpo-hq",
        "what-is-committed-and-why"
      ],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "sharing-with-jadpo-hq",
      "kind": "topic",
      "title": "Sharing with Jadpo HQ",
      "summary": "Sharing is how Jadpo learns which signals are right: which findings people take, which they ignore and why, and what the scan missed.",
      "tokens": 2635,
      "hash": "sha256:bdbd29f3e5140c1317a4a7540fac1c1719fdc5472a627e6a931760bbd4051cbb",
      "area": 14,
      "links": [],
      "group": "Tools",
      "page": "Suggestions",
      "status": null
    },
    {
      "id": "review-and-sign-off",
      "kind": "topic",
      "title": "Review and sign-off",
      "summary": "The changes a person must accept before they ship, such as one that can break an API client or drop something from the database.",
      "tokens": 361,
      "hash": "sha256:3a0aa36adb551850f2a271f9a66cfbc68a3d9fc00661daabd4c8f5d973ea0d63",
      "area": 14,
      "links": [
        "acceptances",
        "commands-for-records-findings-and-review",
        "data",
        "policy",
        "project-layout-and-modules",
        "the-public-api-record"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "errors-only-the-running-app-or-a-build-raises",
      "kind": "topic",
      "title": "Errors only the running app or a build raises",
      "summary": "The running app reports three events of its own, never compile errors:",
      "tokens": 174,
      "hash": "sha256:46a85904ea53646ccf661162f02167f1c04a0f101c455e56dc3d6d7e0c04cbf1",
      "area": 14,
      "links": [
        "identity",
        "logging"
      ],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "a-native-deployable",
      "kind": "topic",
      "title": "A native deployable",
      "summary": "A deployable is one program your app is built into.",
      "tokens": 2197,
      "hash": "sha256:8ca7b52fc3ad75f9a4c3346b45ddde8cfb0b5d5b568ff8095cca1a1fbdf6b8ab",
      "area": 14,
      "links": [
        "built-in-services",
        "configuration",
        "debugging-and-review",
        "declared-deployables",
        "failures",
        "files",
        "migrations",
        "records-and-manifest",
        "schedules",
        "several-changing-provider-calls"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    },
    {
      "id": "declared-deployables",
      "kind": "topic",
      "title": "Declared deployables",
      "summary": "An app can be built into several programs, for example one server that serves its public API and another that runs its back office.",
      "tokens": 2030,
      "hash": "sha256:b053c151adb9aee7ffaacdede79077e51a4af038386f168e9abec209a4108e9d",
      "area": 14,
      "links": [
        "a-workers-deployable",
        "client-addresses",
        "external-services",
        "how-integrations-fit-together",
        "rate-limits",
        "records-and-manifest"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    },
    {
      "id": "a-workers-deployable",
      "kind": "topic",
      "title": "A Workers deployable",
      "summary": "A deployable with `target: Target.wasm` runs on Cloudflare Workers.",
      "tokens": 3735,
      "hash": "sha256:3d3f25600eb29ac558c289a1421e736c51181c836e8023ccb2497ea2e3704546",
      "area": 14,
      "links": [
        "client-addresses",
        "configuration",
        "deployable.target_unsupported",
        "external-services",
        "openapi",
        "rate-limits",
        "schedules",
        "stores",
        "where-events-travel"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    },
    {
      "id": "command-errors",
      "kind": "topic",
      "title": "Command errors",
      "summary": "These are the errors only a command raises, so `jadpo check` can't show them with a source example; the command line's own are under Command-line errors.",
      "tokens": 4724,
      "hash": "sha256:1006db55ca96112c2d1c1ef1a9167c71d3e8abba818d1dd5d3e9dd918942f5a9",
      "area": 14,
      "links": [
        "a-native-deployable",
        "command-line-errors",
        "external-services"
      ],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "command-line-errors",
      "kind": "topic",
      "title": "Command-line errors",
      "summary": "These are the errors about the command line itself: a command, an action or a flag Jadpo doesn't have, or an argument or a value a command can't use.",
      "tokens": 2175,
      "hash": "sha256:cccd5ab58ede0b8c3ef064a38d635bdf8a7dd1e5a8473cea6083e40471f00612",
      "area": 14,
      "links": [],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "database-command-errors",
      "kind": "topic",
      "title": "Database command errors",
      "summary": "These are the errors of the commands that reach a database: applying migrations, seeding, and reading or acting on background work.",
      "tokens": 819,
      "hash": "sha256:0b471fd844c1671bfa0a8d9eb05f3b99adcb14a464bbe46c9805326b0bf6ae40",
      "area": 14,
      "links": [],
      "group": "Errors",
      "page": null,
      "status": null
    },
    {
      "id": "tooling-built",
      "kind": "topic",
      "title": "What is built: Tools",
      "summary": "Each row says what is built and what is specified but not built yet.",
      "tokens": 1311,
      "hash": "sha256:1d5811148f098ddc60b8d497f825cbf46941bc4c2ddbdf664c6e048bd03f1d7e",
      "area": 14,
      "links": [
        "acceptances",
        "commands-for-records-findings-and-review",
        "editor-support",
        "error-messages",
        "testing",
        "the-jadpo-command",
        "the-root",
        "tools-for-agents"
      ],
      "group": "Tools",
      "page": null,
      "status": null
    },
    {
      "id": "personal-data",
      "kind": "topic",
      "title": "Personal data",
      "summary": "Your app says which data is about a person, and Jadpo exports it, erases it and deletes it when its time is up.",
      "tokens": 1281,
      "hash": "sha256:51561884ad5d8e0636d06630f02e02356a270a89760c614f9845ece2a03f238f",
      "area": 15,
      "links": [
        "erasure",
        "personal-data-built",
        "retention",
        "safety-and-privacy",
        "the-personal-data-report"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": "partly built"
    },
    {
      "id": "marking-personal-fields",
      "kind": "topic",
      "title": "Marking personal fields",
      "summary": "A field that identifies or describes a person says so in its block, with `personal:` and one category from a fixed list.",
      "tokens": 1972,
      "hash": "sha256:130e1063bcdf29dc576f396822772ac845772b6e9406b11d66f615f2dace2e0e",
      "area": 15,
      "links": [
        "access-records",
        "audit-trail",
        "comparing-two-builds",
        "data.erase_field_required",
        "erasure",
        "erasure-at-providers",
        "every-standard-type-meets-one-contract",
        "logging",
        "output-and-status",
        "person-entities",
        "personal-data-checks",
        "safety-and-privacy",
        "the-personal-data-report"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "person-entities",
      "kind": "topic",
      "title": "The person",
      "summary": "An entity that represents a person says `person: true`.",
      "tokens": 455,
      "hash": "sha256:eae8c37247309dadbb217b7eb9c83e826dba0d7f8b539759903a12b915297124",
      "area": 15,
      "links": [
        "erasure",
        "the-personal-data-report"
      ],
      "aliases": [
        "the-person"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "erasure",
      "kind": "topic",
      "title": "Erasure",
      "summary": "Erasing a person is a generated operation, `User.erase(user_id)`.",
      "tokens": 4499,
      "hash": "sha256:31da29389b6a9473e73b896ba8a4e0fd110af22d0458a59c9bff233d859940f2",
      "area": 15,
      "links": [
        "absent-values",
        "audit-trail",
        "caches",
        "data.erase_field_required",
        "data.erase_own_field",
        "data.erase_retention_required",
        "data.reference_across_stores",
        "encrypted-fields",
        "files",
        "identity",
        "lifecycle",
        "marking-personal-fields",
        "migrations",
        "oauth-grants",
        "personal-data-export",
        "query.include_erased_reads",
        "query.include_erased_unused",
        "references-and-on-delete",
        "retention",
        "schedules",
        "subscribers",
        "the-personal-data-report"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "erasure-at-providers",
      "kind": "topic",
      "title": "Erasure at providers",
      "summary": "When your app sends a person's data to another company, such as a payment provider, erasing the person also asks that provider to erase them.",
      "tokens": 955,
      "hash": "sha256:8148f605edd43cf9bb75c998e7af19625228874408f3ae295ebd158d263007d9",
      "area": 15,
      "links": [
        "acceptances",
        "built-in-emails",
        "capabilities",
        "connection.value_invalid",
        "package.provider_invalid"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "personal-data-export",
      "kind": "topic",
      "title": "Export",
      "summary": "`User.export(user_id)` returns everything held about a person, as JSON, one list per entity.",
      "tokens": 339,
      "hash": "sha256:2eae68c6c58f0375e1cb305cf1d22aefa3d6608e729b39ceffbb896577d75dd9",
      "area": 15,
      "links": [
        "grants",
        "policy"
      ],
      "aliases": [
        "export"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": "not built"
    },
    {
      "id": "retention",
      "kind": "topic",
      "title": "Retention",
      "summary": "Personal data needs an end date: GDPR's storage limitation means you keep it only as long as you need it.",
      "tokens": 1476,
      "hash": "sha256:f436321fb10400cbd57cbfaba097800ca1f1c7c5ad2af2acedc949e8b8f7be19",
      "area": 15,
      "links": [
        "absent-values",
        "data.retention_field_required",
        "data.retention_held",
        "data.retention_lifecycle_field",
        "data.retention_period",
        "data.retention_since",
        "declaring-an-event",
        "erasure",
        "files",
        "identity",
        "kinds-of-test",
        "lifecycle",
        "references-and-on-delete",
        "schedules",
        "settings-config-jadpo"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "personal-data-checks",
      "kind": "topic",
      "title": "What the compiler checks",
      "summary": "What the compiler refuses about personal data, such as a marked field nothing reads.",
      "tokens": 1053,
      "hash": "sha256:97657e9d0354d0e11fcec592cafae7e4ee802c4662cc99f363b7fe3fa64e1584",
      "area": 15,
      "links": [
        "acceptance.missing",
        "comparing-two-builds",
        "data.erase_field_required",
        "data.erase_own_field",
        "data.erase_required",
        "data.erase_retention_required",
        "data.erase_unreached",
        "data.personal_unreachable",
        "declining-a-judgement-call",
        "erasure-at-providers",
        "query.include_erased_reads",
        "query.include_erased_unused",
        "retention",
        "route.cache_invalid",
        "the-personal-data-report"
      ],
      "aliases": [
        "what-the-compiler-checks"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "data-requests",
      "kind": "topic",
      "title": "Data requests",
      "summary": "`privacy:` in `app.jadpo` turns on generated routes for a person's requests to export or erase their data.",
      "tokens": 1210,
      "hash": "sha256:4ff84052fcf1a576a9d915e22e8d6ec9dca07d60f1b3bb4350564d5b7edff46f",
      "area": 15,
      "links": [
        "built-in-emails",
        "failures-for-client-apps",
        "generated-routes",
        "rate-limits",
        "routes-signed-in-by-default"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": "not built"
    },
    {
      "id": "access-records",
      "kind": "topic",
      "title": "Access records",
      "summary": "Every export and erasure is recorded: who asked, for which person's `id`, and when, never the values.",
      "tokens": 80,
      "hash": "sha256:d7f0fe3cc0bc13de1a776fa6865cb2100cfb857b09588059c7cfd504329c97d8",
      "area": 15,
      "links": [],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "where-data-is-stored",
      "kind": "topic",
      "title": "Where data is stored",
      "summary": "Each store is one database in one place.",
      "tokens": 90,
      "hash": "sha256:9aa68009f1441eee65b54e86c3b45848fe395b7acde631156d10173555dd9d77",
      "area": 15,
      "links": [
        "stores"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "the-personal-data-report",
      "kind": "topic",
      "title": "The personal-data report",
      "summary": "`jadpo check` writes `build/report/personal-data.md` and a `.json` twin, in the same form as its other reports (The suggestions report).",
      "tokens": 1191,
      "hash": "sha256:5d3c499d50c9e92496f16c4846179a9bd1efe6e5e513f7675b3f7e0b19da97cc",
      "area": 15,
      "links": [
        "erasure-at-providers",
        "following-personal-data",
        "review-and-sign-off",
        "several-changing-calls-in-one-action",
        "suggestions-report",
        "the-public-registry"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "encrypted-fields",
      "kind": "topic",
      "title": "Encrypted fields",
      "summary": "An entity field can be stored encrypted.",
      "tokens": 1726,
      "hash": "sha256:d11362d9bbc8e6cadf407c210ba3f70db16ed75c8f56168faaa4ed11caeb0ee1",
      "area": 15,
      "links": [
        "audit-trail",
        "erasure",
        "following-personal-data",
        "hashing-and-cryptography",
        "migrations",
        "secret-values"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "what-this-does-not-cover",
      "kind": "topic",
      "title": "What this does not cover",
      "summary": "The report says plainly what Jadpo covers and what it doesn't:",
      "tokens": 229,
      "hash": "sha256:54522caac92f420f2013d45be9fb438502d1606115d44e0e8691a3862f143c7b",
      "area": 15,
      "links": [],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "personal-data-built",
      "kind": "topic",
      "title": "What is built: Personal data",
      "summary": "Which parts of Personal data are built, and what the rest waits on",
      "tokens": 1285,
      "hash": "sha256:4a1b5346df78fd36013f21a2c2ac30131c4e20c9f2c9dc109633e853e1b714d5",
      "area": 15,
      "links": [
        "ai",
        "audit-trail",
        "data.reference_across_stores",
        "erasure",
        "erasure-at-providers",
        "files",
        "retention",
        "the-personal-data-report"
      ],
      "group": "Data",
      "page": "Personal data",
      "status": null
    },
    {
      "id": "built-in-services",
      "kind": "topic",
      "title": "Built-in services",
      "summary": "Jadpo gives your app some common backend features itself, so you don't install a library or write your own.",
      "tokens": 869,
      "hash": "sha256:36f90f58c60faede404795149b8063ba110b7e254d3eb33060f0a0bf474da332",
      "area": 16,
      "links": [
        "how-integrations-fit-together",
        "not-built-in"
      ],
      "group": "Built-in services",
      "page": null,
      "status": null
    },
    {
      "id": "built-in-service-capabilities",
      "kind": "topic",
      "title": "Capabilities the built-in services use",
      "summary": "A capability is a job Jadpo does through an outside service, such as sending email, that any provider can fill.",
      "tokens": 578,
      "hash": "sha256:dee7b5c1ed0ce73ab96697b3c5145d24f885ddf5e6bd72796565ed88fbb392c6",
      "area": 16,
      "links": [
        "built-in-services-built",
        "capabilities",
        "fakes-for-integrations",
        "telemetry",
        "where-events-travel"
      ],
      "aliases": [
        "capabilities-on-this-page"
      ],
      "group": "External services",
      "page": "Capabilities",
      "status": null
    },
    {
      "id": "feature-flags",
      "kind": "topic",
      "title": "Feature flags",
      "summary": "A feature flag lets you ship code switched off, then turn it on for some users, a share of users, or everyone, without a deploy.",
      "tokens": 2448,
      "hash": "sha256:32606e202ea8c3540820a966b0fed3704e8190cdb227c14d4298ec235830a5e4",
      "area": 16,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "guide-ship-a-change-behind-a-flag",
        "policy-and-background-work",
        "settings-config-jadpo",
        "tenancy",
        "test-settings"
      ],
      "group": "Built-in services",
      "page": "Feature flags",
      "status": "partly built"
    },
    {
      "id": "rate-limits",
      "kind": "topic",
      "title": "Rate limits",
      "summary": "A rate limit caps how many requests a caller may make in a period.",
      "tokens": 2704,
      "hash": "sha256:fabed4183fb96defff4a1187f4fb2328cf3a1a29a4fd39af088b16a68ddcb45d",
      "area": 16,
      "links": [
        "built-in-services-built",
        "caches",
        "calling",
        "client-addresses",
        "guide-limit-how-often-a-route-is-called",
        "magic-links",
        "not-built-in",
        "rate-limited-requests",
        "rate-limits-on-workers",
        "safety-and-privacy"
      ],
      "group": "Built-in services",
      "page": "Rate limits",
      "status": "partly built"
    },
    {
      "id": "caches-drivers-and-what-they-hold",
      "kind": "topic",
      "title": "Cache drivers and what a cache may hold",
      "summary": "A cache lives in a Redis-compatible service and holds only what is harmless to lose.",
      "tokens": 440,
      "hash": "sha256:a19a65f9efbd9bb90d784c684df675d1994249bcc80be6c46aab5ad9ca17b7b2",
      "area": 16,
      "links": [
        "caches",
        "connecting-in-app-jadpo"
      ],
      "group": "Built-in services",
      "page": "Caches",
      "status": "not built"
    },
    {
      "id": "files",
      "kind": "topic",
      "title": "Files",
      "summary": "A `File` field on a record, with the bytes kept in a store of files.",
      "tokens": 4191,
      "hash": "sha256:1b121144357ea0bc833491addc35081e527834b0afbba9cac907ecad4c801487",
      "area": 16,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "batches-work-over-many-items",
        "built-in-types",
        "connection.disk_path_invalid",
        "data-formats-json-csv-tsv-and-json-lines",
        "deployable.target_unsupported",
        "files-put-read-and-the-disk-driver-in-development",
        "grants",
        "guide-export-records-to-a-file",
        "migrations",
        "monitoring-thresholds",
        "one-input",
        "one-store-per-action",
        "personal-data",
        "reading-gzip",
        "running-a-service-in-a-container",
        "several-changing-calls-in-one-action",
        "the-manifest"
      ],
      "group": "Built-in services",
      "page": "Files",
      "status": "partly built"
    },
    {
      "id": "audit-trail",
      "kind": "topic",
      "title": "Audit trail",
      "summary": "An entity's history of changes: who made each, when, and what it changed, kept when you ask for it.",
      "tokens": 3192,
      "hash": "sha256:7898e29ba32354abba96ead52d2a262a67136c8f6744bd071156a33a321b8fd8",
      "area": 16,
      "links": [
        "access-records",
        "delivery-at-least-once-safe-to-repeat",
        "encrypted-fields",
        "erasure",
        "guide-keep-a-record-of-who-changed-what",
        "identity",
        "marking-personal-fields",
        "migrations",
        "retention",
        "route.output_not_output",
        "schedules",
        "subscriber.event_invalid",
        "the-permissions-report",
        "where-events-travel"
      ],
      "group": "Built-in services",
      "page": "Audit trail",
      "status": "partly built"
    },
    {
      "id": "telemetry",
      "kind": "topic",
      "title": "Telemetry",
      "summary": "The generated runtime reports what it does as OpenTelemetry traces, metrics and logs, the open standard most monitoring tools accept.",
      "tokens": 1284,
      "hash": "sha256:b9152ca6b4abd4c906f596aac39be8c38abaa15ee3fdde8bcacf6561766b263e",
      "area": 16,
      "links": [
        "connecting-in-app-jadpo",
        "logging",
        "monitoring-thresholds",
        "project-layout",
        "settings-config-jadpo",
        "the-manifest",
        "traces-metrics-and-logs-in-development"
      ],
      "group": "Built-in services",
      "page": "Monitoring",
      "status": "not built"
    },
    {
      "id": "path-ids",
      "kind": "topic",
      "title": "Path IDs",
      "summary": "Every request records the path it took through your app: the route, each action and query, and each branch taken inside them.",
      "tokens": 485,
      "hash": "sha256:da60fa916367105f1b13db9e75c1d7e4c3109449a1a1755331d934e104a0cd4b",
      "area": 16,
      "links": [
        "built-in-services-built",
        "stable-identity",
        "the-request-timeline-in-jadpo-dev"
      ],
      "group": "Built-in services",
      "page": "Monitoring",
      "status": "not built"
    },
    {
      "id": "monitoring-thresholds",
      "kind": "topic",
      "title": "Monitoring",
      "summary": "A threshold says when something your app does is too slow, too frequent or failing too often, such as a route's p95 duration.",
      "tokens": 1954,
      "hash": "sha256:bb23dc7f14a64cd879e032381b9201d843ef23ca2430d313e34f3bc2595f6b34",
      "area": 16,
      "links": [
        "acceptances",
        "files",
        "path-ids",
        "telemetry",
        "the-developer-console-and-mcp",
        "the-jadpo-command",
        "threshold.declaration_invalid",
        "threshold.subject_unknown"
      ],
      "group": "Built-in services",
      "page": "Monitoring",
      "status": "partly built"
    },
    {
      "id": "email",
      "kind": "topic",
      "title": "Email",
      "summary": "Emails as typed values: templates the compiler checks, sent after your action commits, caught in tests and in a dev inbox.",
      "tokens": 4750,
      "hash": "sha256:e03b2a8c047f47eb161c02fa60ba85468f44dd0c6516b80ed6ea972af3e9cb16",
      "area": 16,
      "links": [
        "built-in-emails",
        "capabilities",
        "declining-a-judgement-call",
        "delivery-at-least-once-safe-to-repeat",
        "email-subjects",
        "email.health_problem",
        "enums-with-wording",
        "erasure-at-providers",
        "every-standard-type-meets-one-contract",
        "guide-send-an-email",
        "retries-and-giving-up",
        "spamassassin-in-the-health-score",
        "text-formats",
        "the-dev-inbox-and-the-health-score",
        "the-smtp-driver",
        "translations-as-messages",
        "where-packages-come-from"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": "built"
    },
    {
      "id": "the-smtp-driver",
      "kind": "topic",
      "title": "The SMTP driver",
      "summary": "The SMTP driver sends your app's email through a mail server you name.",
      "tokens": 670,
      "hash": "sha256:ce81c912a154d20a8f7eec19e745fedadd0354d89753eface9755054546db949",
      "area": 16,
      "links": [
        "connecting-in-app-jadpo",
        "how-outside-calls-are-made-safe",
        "stores"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "built-in-emails",
      "kind": "topic",
      "title": "Built-in emails",
      "summary": "Jadpo sends some emails itself: the magic-link email (Magic links) and the privacy emails (Data requests).",
      "tokens": 3505,
      "hash": "sha256:2af0703dae143b6323c815d1685a14fdc6394e4dcdaeb76d4a6e0725ccd740e2",
      "area": 16,
      "links": [
        "custom-magic-link-email",
        "data-requests",
        "default-magic-link-email",
        "email",
        "erasure",
        "external-services",
        "failures-for-client-apps",
        "locales",
        "magic-links",
        "passkeys",
        "personal-data-export",
        "provider-calls-in-development",
        "retries-and-giving-up",
        "signing-in-from-code-the-app-writes",
        "the-smtp-driver",
        "translations-as-messages"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "documents",
      "kind": "topic",
      "title": "Documents",
      "summary": "A document is something your app renders for people to keep, such as an invoice as a PDF.",
      "tokens": 729,
      "hash": "sha256:f8c4f93d78cebcb466ac7ef5f617218497f0760a16ddc084abed1cfb18a4e093",
      "area": 16,
      "links": [
        "email",
        "fakes-for-integrations",
        "files",
        "guide-call-an-outside-api",
        "how-polls-and-max-concurrent-run",
        "running-a-service-in-a-container"
      ],
      "group": "Built-in services",
      "page": "Documents",
      "status": "not built"
    },
    {
      "id": "search",
      "kind": "topic",
      "title": "Search",
      "summary": "Give an entity a `search:` section and people can search its records by words.",
      "tokens": 4081,
      "hash": "sha256:c145cb78003bbcf6efb24ae5d2ea6af9ce7e637845583335b51c46dc26356595",
      "area": 16,
      "links": [
        "access-records",
        "built-in-services-built",
        "delivery-at-least-once-safe-to-repeat",
        "encrypted-fields",
        "erasure",
        "field-restrictions",
        "guide-add-search-to-a-list",
        "indexes",
        "marking-personal-fields",
        "order-and-pages",
        "policy",
        "values-and-types",
        "when-policy-says-no"
      ],
      "group": "Built-in services",
      "page": "Search",
      "status": "partly built"
    },
    {
      "id": "bot-protection",
      "kind": "topic",
      "title": "Bot protection",
      "summary": "Bot protection stops scripts from using a public form, such as a sign-up or a demo request.",
      "tokens": 628,
      "hash": "sha256:f9ad21975421ce8e1e743bb41c9a8e7528e0069a2326c134e21d4f21b16414ed",
      "area": 16,
      "links": [
        "acceptances",
        "failures-for-client-apps",
        "fakes-for-integrations",
        "guide-call-an-outside-api",
        "rate-limits"
      ],
      "group": "Built-in services",
      "page": "Bot protection",
      "status": "not built"
    },
    {
      "id": "outgoing-webhooks",
      "kind": "topic",
      "title": "Outgoing webhooks",
      "summary": "Outgoing webhooks let your app's customers receive its events at an address of their own.",
      "tokens": 315,
      "hash": "sha256:df2ee37dc5fa9c296146a86da62634e8980a923ae1ccf326e9d1381777180925",
      "area": 16,
      "links": [
        "built-in-services-built",
        "connecting-in-app-jadpo",
        "guide-receive-a-webhook",
        "where-events-travel"
      ],
      "group": "Built-in services",
      "page": "Outgoing webhooks",
      "status": "not built"
    },
    {
      "id": "not-built-in",
      "kind": "topic",
      "title": "What isn't built in",
      "summary": "Some features other frameworks offer aren't part of Jadpo, because the compiler gains little by knowing about them.",
      "tokens": 1035,
      "hash": "sha256:5438cad98c1f4f1bac643ec489c6fce775561ce6a1472dbeb8c84c815f509bb5",
      "area": 16,
      "links": [
        "built-in-services",
        "caches",
        "caches-drivers-and-what-they-hold",
        "commands-for-background-work",
        "counters-and-other-one-step-updates",
        "encrypted-fields",
        "external-services",
        "the-jadpo-command",
        "webhooks",
        "write-revisions"
      ],
      "group": "Built-in services",
      "page": "What isn't built in",
      "status": null
    },
    {
      "id": "rate-limits-on-workers",
      "kind": "topic",
      "title": "Rate limits on Workers",
      "summary": "A Worker's instances share no memory, so on Cloudflare Workers your rate limits need a store that every instance can reach.",
      "tokens": 1556,
      "hash": "sha256:08a29b9cf800a11d13bf5205e81738bdb363f4c080079a8003517e6ee52a3158",
      "area": 16,
      "links": [
        "built-in-services-built",
        "rate-limits"
      ],
      "group": "Built-in services",
      "page": "Rate limits",
      "status": null
    },
    {
      "id": "the-dev-inbox-and-the-health-score",
      "kind": "topic",
      "title": "The dev inbox and the health score",
      "summary": "`jadpo dev` keeps every email your app sends in a local inbox, and scores each one for the common mistakes that send mail to spam.",
      "tokens": 1391,
      "hash": "sha256:8507ac06b0fefb39e2411c2d2ea24e399b4fd01f1cc27227d6f998055f7e579d",
      "area": 16,
      "links": [
        "declining-a-judgement-call",
        "email",
        "spamassassin-in-the-health-score",
        "the-developer-console-and-mcp",
        "the-request-timeline-in-jadpo-dev"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": "partly built"
    },
    {
      "id": "spamassassin-in-the-health-score",
      "kind": "topic",
      "title": "SpamAssassin in the health score",
      "summary": "When SpamAssassin is installed on your machine, `jadpo dev` adds its rules to each mail's health score.",
      "tokens": 536,
      "hash": "sha256:23bb4b9b3b6c9d03f9f33563f76b503d6664f2025f81e62b80bd95659b5bf405",
      "area": 16,
      "links": [
        "the-dev-inbox-and-the-health-score"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "mail-packages-partials-and-email-sent",
      "kind": "topic",
      "title": "Mail packages, partials and email.sent",
      "summary": "Partials, `email.sent` in tests and a mail package that fills the `email` capability each have rules of their own.",
      "tokens": 1441,
      "hash": "sha256:0515ab2da5eed2ff018d4b37231d4326e2b8cf71363e710e06ea6ba253e2ef0c",
      "area": 16,
      "links": [
        "capabilities",
        "email",
        "in-development-and-tests",
        "where-packages-come-from"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "custom-magic-link-email",
      "kind": "topic",
      "title": "Your own magic-link email",
      "summary": "Your app can send its own magic-link email instead of Jadpo's, at level 4 or level 5 of Built-in emails.",
      "tokens": 466,
      "hash": "sha256:dac401afab53f9981545c12da11539c880dba6a1ef4051fa6dca082a5b98f8c9",
      "area": 16,
      "links": [
        "built-in-emails",
        "magic-links",
        "provider-calls-in-development-jadpo-calls",
        "retries-and-giving-up"
      ],
      "aliases": [
        "levels-4-and-5-of-the-magic-link-email"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "default-magic-link-email",
      "kind": "topic",
      "title": "Jadpo's own magic-link email",
      "summary": "With nothing written, Jadpo sends its own magic-link email, at level 1 of Built-in emails.",
      "tokens": 450,
      "hash": "sha256:90f6da510b2066842276b613a3f2a6d25c5229032ff7b75e95b53d55b167465a",
      "area": 16,
      "links": [
        "built-in-emails",
        "magic-links"
      ],
      "aliases": [
        "jadpo-s-own-magic-link-email"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "email-templates-and-sending",
      "kind": "topic",
      "title": "Email rules: templates and sending",
      "summary": "An email's templates are checked when you compile and rendered when the email is sent.",
      "tokens": 1065,
      "hash": "sha256:56d2b8ddec03a94f29c5c9d9271d2d831a4daa254f828e07c45a3fc0f234b409",
      "area": 16,
      "links": [
        "email",
        "limits-and-runtime-faults",
        "prompts-as-files"
      ],
      "group": "Built-in services",
      "page": "Email",
      "status": null
    },
    {
      "id": "how-outside-calls-are-made-safe",
      "kind": "topic",
      "title": "How every outside call is made safe",
      "summary": "Every call that leaves your app's process, to a capability or to a provider, goes through one entry point in the runtime, so that it is logged, faked in tests and never repeated when repeating isn't…",
      "tokens": 1230,
      "hash": "sha256:7fffa6af3805e416aa2ffbc37cc9dd3c556fd2b505efba6598dd353a1182e82b",
      "area": 16,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "built-in-service-capabilities",
        "connecting-in-app-jadpo",
        "email",
        "provider-calls-in-development-jadpo-calls",
        "several-changing-calls-in-one-action",
        "what-an-operator-sees"
      ],
      "aliases": [
        "the-seam-every-outside-call-goes-through"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "files-put-read-and-the-disk-driver-in-development",
      "kind": "topic",
      "title": "File fields, put, read and the disk driver",
      "summary": "A `File` field, `store.put` and `store.read` each refuse what doesn't fit.",
      "tokens": 2378,
      "hash": "sha256:40467fc498083db2eba895db0e5e9999183d6362258ae52eb298bf291b397b6f",
      "area": 16,
      "links": [
        "built-in-services-built",
        "calling",
        "email",
        "fakes-for-integrations",
        "faults",
        "files",
        "schedules"
      ],
      "group": "Built-in services",
      "page": "Files",
      "status": null
    },
    {
      "id": "export-file-pieces",
      "kind": "topic",
      "title": "How an export writes its file",
      "summary": "A large export is written a page of rows at a time, and each page is a piece of the file.",
      "tokens": 367,
      "hash": "sha256:06a324c3cc2903a5504c335207d5f4aeb9e9c464bf7ead1eb8aab0c198e39d37",
      "area": 16,
      "links": [
        "data-formats-json-csv-tsv-and-json-lines",
        "export-batch-runs"
      ],
      "aliases": [
        "files-an-export-s-pieces"
      ],
      "group": "Built-in services",
      "page": "Files",
      "status": null
    },
    {
      "id": "reading-gzip",
      "kind": "topic",
      "title": "Reading gzip",
      "summary": "Some uploads arrive as gzip files, such as a supplier's `.csv.gz`.",
      "tokens": 527,
      "hash": "sha256:bb6cf4023772d8ac0764ad2f59ec7364ddd9ed2286fd7e22050e03a8c32f23b9",
      "area": 16,
      "links": [
        "data-formats-json-csv-tsv-and-json-lines",
        "files"
      ],
      "group": "Built-in services",
      "page": "Files",
      "status": null
    },
    {
      "id": "flags-declared-read-and-tested",
      "kind": "topic",
      "title": "Flag rules: declaring, reading, testing",
      "summary": "How a flag is declared, how your code reads it, and how a test sets it.",
      "tokens": 673,
      "hash": "sha256:fd36614b4c6193667a6e29fbf54930cd7c046e6c68d18282e336dce18c6be538",
      "area": 16,
      "links": [
        "feature-flags",
        "flags-changed-listed-and-removed"
      ],
      "group": "Built-in services",
      "page": "Feature flags",
      "status": null
    },
    {
      "id": "flags-changed-listed-and-removed",
      "kind": "topic",
      "title": "Flag rules: changing, listing, removing",
      "summary": "How `jadpo flags` changes and lists a flag's value, and how a flag is removed from the code.",
      "tokens": 1273,
      "hash": "sha256:cc471cf0a13a8f1d61a12c2054e37cfa96dd5385f456bbcdfbfbde45984bf3f9",
      "area": 16,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "data-requests",
        "feature-flags"
      ],
      "group": "Built-in services",
      "page": "Feature flags",
      "status": null
    },
    {
      "id": "monitoring-thresholds-generated",
      "kind": "topic",
      "title": "What Jadpo generates from thresholds",
      "summary": "`jadpo check` reads each domain's thresholds and writes rules a monitoring tool can load.",
      "tokens": 842,
      "hash": "sha256:02bccf31ab7abe01265feeef2f0834f86160d726aab1e9a400bb48a6d306ab5c",
      "area": 16,
      "links": [
        "monitoring-thresholds"
      ],
      "group": "Built-in services",
      "page": "Monitoring",
      "status": null
    },
    {
      "id": "built-in-services-built",
      "kind": "topic",
      "title": "What is built: Built-in services",
      "summary": "The errors this page describes are built with the feature they belong to.",
      "tokens": 2127,
      "hash": "sha256:dae7926d55421602f42b7f16eedf596ab3cbf474c4dd711ac55c3259b74b8d7e",
      "area": 16,
      "links": [
        "audit-trail",
        "connection.disk_path_invalid",
        "custom-magic-link-email",
        "data-formats-json-csv-tsv-and-json-lines",
        "data-requests",
        "default-magic-link-email",
        "email-templates-and-sending",
        "export-file-pieces",
        "files",
        "files-put-read-and-the-disk-driver-in-development",
        "flags-changed-listed-and-removed",
        "flags-declared-read-and-tested",
        "how-outside-calls-are-made-safe",
        "mail-packages-partials-and-email-sent",
        "monitoring-thresholds",
        "monitoring-thresholds-generated",
        "rate-limits-on-workers",
        "reading-gzip",
        "search",
        "spamassassin-in-the-health-score",
        "the-dev-inbox-and-the-health-score"
      ],
      "group": "Built-in services",
      "page": null,
      "status": null
    },
    {
      "id": "debugging-and-review",
      "kind": "topic",
      "title": "Debugging",
      "summary": "Jadpo code is written mainly by coding agents and read by people, so two jobs matter most.",
      "tokens": 1766,
      "hash": "sha256:65db5c9fbb8cf09453d98b1b2814bac5db9fc6d2b68c8056d435ba8c4ec78ca1",
      "area": 17,
      "links": [
        "debugging-and-review-built",
        "tools-for-agents"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "partly built"
    },
    {
      "id": "errors-point-at-the-jadpo-line",
      "kind": "topic",
      "title": "Errors point at the .jadpo line",
      "summary": "Every stack, log event and error response that names a place names a `.jadpo` file and line, never the generated code.",
      "tokens": 296,
      "hash": "sha256:66bb016ec7c3a9360775831917de29c1b0a0d3fdcde75c8148d797285af1ff49",
      "area": 17,
      "links": [
        "logging"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "production-incidents-after-the-code-has-changed",
      "kind": "topic",
      "title": "Production incidents after the code has changed",
      "summary": "By the time you look at a production failure, the code may have moved on.",
      "tokens": 361,
      "hash": "sha256:3866f54c5b6b5bc842ebe867ded4acb6dc9774069125b249050a23f2387d468c",
      "area": 17,
      "links": [
        "production-builds",
        "stable-identity"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "not built"
    },
    {
      "id": "breakpoints-and-stepping",
      "kind": "topic",
      "title": "Breakpoints and stepping",
      "summary": "You can't set a breakpoint in a `.jadpo` file or step through one in an editor.",
      "tokens": 146,
      "hash": "sha256:70a87d29f3a9afef97390d0f7d1517238adb0462853e8903789edff9b5552295",
      "area": 17,
      "links": [
        "capturing-a-failing-request-as-a-test",
        "explain-a-decision",
        "the-request-timeline-in-jadpo-dev"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "explain-a-decision",
      "kind": "topic",
      "title": "jadpo why: why the language decided something",
      "summary": "Much of what surprises people in Jadpo is a decision the language made for them: policy hid a record, a lifecycle filtered it out, a subscriber didn't run, or a cache answered.",
      "tokens": 555,
      "hash": "sha256:99a9902923997297d91a5affd08ece61b21373449b81c17c667cf542e0ee7da9",
      "area": 17,
      "links": [
        "concealing-records",
        "lifecycle",
        "policy",
        "subscribers"
      ],
      "aliases": [
        "jadpo-why-why-the-language-decided-something"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "the-request-timeline-in-jadpo-dev",
      "kind": "topic",
      "title": "The request timeline in jadpo dev",
      "summary": "`jadpo dev` records every request it serves and prints one line for each, with its request id.",
      "tokens": 685,
      "hash": "sha256:baefc499a59452ae50034a638dda7c3caf671ae5b13da04b3c614d36173aa3db",
      "area": 17,
      "links": [
        "logging",
        "provider-calls-in-development-jadpo-calls",
        "several-changing-calls-in-one-action",
        "telemetry",
        "tools-for-agents"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "watching-code-run-jadpo-watch",
      "kind": "topic",
      "title": "Watching code run: jadpo watch",
      "summary": "Not built yet.",
      "tokens": 493,
      "hash": "sha256:14975b3fcced9980912226c93342cc7a957bf01b1bd8aa82883a43a2b3afd302",
      "area": 17,
      "links": [
        "provider-calls-in-development-jadpo-calls",
        "telemetry",
        "what-an-operator-sees"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "not built"
    },
    {
      "id": "provider-calls-in-development-jadpo-calls",
      "kind": "topic",
      "title": "Provider calls in development: jadpo calls",
      "summary": "In `jadpo dev`, every provider operation is faked by default, so nothing leaves your machine and you need no credentials.",
      "tokens": 1191,
      "hash": "sha256:239652d570d8a105f710a99e22bbc51f3c6c2352ccc4136970fd0f2c10107b33",
      "area": 17,
      "links": [
        "fakes-for-integrations",
        "oauth-grants",
        "provider-calls-in-development",
        "telemetry"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "traces-metrics-and-logs-in-development",
      "kind": "topic",
      "title": "Traces, metrics and logs in development",
      "summary": "In development, your app's telemetry, its traces, metrics and logs, stays on your machine (Telemetry).",
      "tokens": 293,
      "hash": "sha256:0c01e9c28ce72cb77385c2012eb5ecfb1bcf129bb0ec634ff10359d5f8234263",
      "area": 17,
      "links": [
        "running-a-service-in-a-container",
        "telemetry"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "not built"
    },
    {
      "id": "capturing-a-failing-request-as-a-test",
      "kind": "topic",
      "title": "Capturing a failing request as a test",
      "summary": "The quickest reliable fix starts by reproducing the bug.",
      "tokens": 441,
      "hash": "sha256:f764429447be4f02ed64a2219605d4e2a18f9a1536248033fe7bf5a1dfe1355f",
      "area": 17,
      "links": [
        "marking-personal-fields",
        "shared-test-data-fixtures"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "running-a-query-or-action-jadpo-call",
      "kind": "topic",
      "title": "Running a query or action: jadpo call",
      "summary": "Not built yet.",
      "tokens": 310,
      "hash": "sha256:7d0bc20e81cd73deee8a8b6d4e1b9d79b4be16adc1fe49c9722ba41e4cb6549b",
      "area": 17,
      "links": [
        "seeds",
        "the-principal"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "the-developer-console-and-mcp",
      "kind": "topic",
      "title": "The developer console and MCP",
      "summary": "The same evidence is also there as a web page, and as tools for an agent that can't run commands.",
      "tokens": 515,
      "hash": "sha256:97fb98aa7ada7df36854f29156df2062129a4297d5286626f10064a84d27719c",
      "area": 17,
      "links": [
        "commands-for-background-work",
        "delivery-at-least-once-safe-to-repeat",
        "identity"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "not built"
    },
    {
      "id": "reviewing-a-change",
      "kind": "topic",
      "title": "Reviewing a change",
      "summary": "When an agent hands you a change, you should see it in the order it matters.",
      "tokens": 1472,
      "hash": "sha256:c9ec94bd9991eca91b148801c11e5b889b60e6e65b595f29676e1e0fcfb75f5b",
      "area": 17,
      "links": [
        "acceptance.base_missing",
        "acceptances",
        "action-permissions",
        "bot-protection",
        "cli.approval_arguments",
        "comparing-two-builds",
        "declining-a-judgement-call",
        "erasure-at-providers",
        "migrations",
        "the-permissions-report",
        "the-personal-data-report",
        "the-public-api-record",
        "tooling-for-translations",
        "where-packages-come-from"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "what-the-graph-and-production-evidence-add",
      "kind": "topic",
      "title": "What the graph and production evidence add",
      "summary": "Each of these joins the compiler's graph to path IDs.",
      "tokens": 516,
      "hash": "sha256:6db5fd88f93f07cc8d5488e53e102592e601934f6bb57d5fc0659ac22d24108e",
      "area": 17,
      "links": [
        "marking-personal-fields",
        "path-ids"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": "not built"
    },
    {
      "id": "everything-as-json",
      "kind": "topic",
      "title": "Everything as JSON",
      "summary": "Every command on this page takes `--json` (Tools for agents), and each kind of evidence has one versioned schema: the fault event, the request timeline, `why` answers, the graph and the review report.",
      "tokens": 347,
      "hash": "sha256:b50f368826b0cb97661c8b9fd131237beb2135d5802f3f5023473cc1f1baef8f",
      "area": 17,
      "links": [
        "every-boundary-through-the-contract",
        "personal-data",
        "tools-for-agents"
      ],
      "group": "Tools",
      "page": "Tools for agents",
      "status": null
    },
    {
      "id": "debugging-and-review-built",
      "kind": "topic",
      "title": "What is built: Debugging",
      "summary": "Which parts of Debugging are built, and what the rest waits on",
      "tokens": 335,
      "hash": "sha256:565a0c92a8e4f0b2b3d3c6ccf4d9f18679ea862f0dc2e6bd38c2902d243e9f2d",
      "area": 17,
      "links": [
        "reviewing-a-change",
        "what-an-operator-sees"
      ],
      "group": "Tools",
      "page": "Debugging",
      "status": null
    },
    {
      "id": "records-and-manifest",
      "kind": "topic",
      "title": "Review and records",
      "summary": "Besides your running app, the compiler writes two kinds of file, and it keeps them apart so that every change can be reviewed and every production event traced back to its source.",
      "tokens": 1528,
      "hash": "sha256:611f650b17d38db633e096f2e696fbb27bfe29fb13a9ebf9d592b68fb55a76e6",
      "area": 18,
      "links": [
        "acceptances",
        "connecting-in-app-jadpo",
        "declaring-an-event",
        "external-services",
        "suggestions",
        "translations-as-messages"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "what-is-committed-and-why",
      "kind": "topic",
      "title": "What is committed, and why",
      "summary": "You commit a file only if it can't be worked out again from today's source, or if it is a promise whose diff a person must read.",
      "tokens": 3800,
      "hash": "sha256:a4743f73eb59a5e214c33c5616a9f1d92776e7c5908bfdd053a583cf69d45d94",
      "area": 18,
      "links": [
        "acceptances",
        "external-services",
        "migrations",
        "records-and-manifest-built",
        "suggestions",
        "the-root",
        "translations-as-messages",
        "which-jadpo-runs"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "the-manifest",
      "kind": "topic",
      "title": "The manifest",
      "summary": "`jadpo check` writes one manifest for your project, `build/manifest.json`, whether the project has errors or not.",
      "tokens": 1180,
      "hash": "sha256:4e48d543b1f62ab7646cb206b7525d9b811d3b11651d7f156b2c1eac80952aaf",
      "area": 18,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "files",
        "policy",
        "prompts-as-files",
        "records-and-manifest-built"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "stable-identity",
      "kind": "topic",
      "title": "Stable identity",
      "summary": "Jadpo knows a declaration or field by the name it was born with, so a rename never looks like something removed and something added.",
      "tokens": 906,
      "hash": "sha256:9ac4787342359f1a61b3af1669828c9d848079ad8606d1c58d2a6c04a68e3927",
      "area": 18,
      "links": [
        "files-and-names",
        "path-ids",
        "system-tables",
        "tooling"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "comparing-two-builds",
      "kind": "topic",
      "title": "Comparing two builds",
      "summary": "Every review is a diff of two manifests.",
      "tokens": 2161,
      "hash": "sha256:9e7899d98c9753ac732f7fb0e8a40c1431d3a1359bfd7fb2e3358c50ee783305",
      "area": 18,
      "links": [
        "acceptance.base_missing",
        "anyone-signed-in-or-anyone",
        "erasure-at-providers",
        "marking-personal-fields",
        "migration.drop_not_accepted",
        "review-and-sign-off",
        "reviewing-a-change",
        "the-personal-data-report"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "acceptances",
      "kind": "topic",
      "title": "Acceptances",
      "summary": "Some changes can break someone else, such as removing a field clients read.",
      "tokens": 3164,
      "hash": "sha256:943f9b4356af7d2138c22d7eb0593ba4be56cf3034ed953f76e7473baada61c8",
      "area": 18,
      "links": [
        "a-membership-role",
        "acceptance.edited",
        "acceptance.invalid",
        "acceptance.missing",
        "acceptance.no_reason",
        "acceptance.unmatched",
        "declaring-an-event",
        "declining-a-judgement-call",
        "domains",
        "erasure",
        "erasure-at-providers",
        "external-services",
        "magic-links",
        "migrations",
        "monitoring-thresholds",
        "output-and-status",
        "package-upgrades",
        "policy",
        "review-and-sign-off",
        "routes-signed-in-by-default",
        "the-public-api-record",
        "where-packages-come-from"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "package-upgrades",
      "kind": "topic",
      "title": "Package upgrades",
      "summary": "An upgrade is a change to `jadpo.lock` and `packages/`, reviewed like any other change, its `surface.jadpo_record` diff included.",
      "tokens": 595,
      "hash": "sha256:277120d331b80558a3e33ed2241e3fab8982f3b73af74dbecd41c3a56c5407ab",
      "area": 18,
      "links": [
        "acceptances",
        "external-services",
        "reviewing-a-change",
        "where-packages-come-from"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "production-builds",
      "kind": "topic",
      "title": "Production builds",
      "summary": "A deployable carries a small build stamp, not its manifest.",
      "tokens": 375,
      "hash": "sha256:7f6352048ea8feff926f2932bcba4ef45fe1968bb4b3a101694fb44b3bc69c8c",
      "area": 18,
      "links": [
        "errors-point-at-the-jadpo-line",
        "records-and-manifest-built",
        "tooling"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "what-an-agent-runs",
      "kind": "topic",
      "title": "What an agent runs",
      "summary": "Every command takes `--json`, and `jadpo help --json` describes them all (Tools for agents).",
      "tokens": 310,
      "hash": "sha256:f111f4b5b31bdffcd2c8d01f369668ea05b5fd97934cd0a7675d5a20a95583d3",
      "area": 18,
      "links": [
        "comparing-two-builds",
        "tools-for-agents"
      ],
      "group": "Tools",
      "page": "Tools for agents",
      "status": null
    },
    {
      "id": "records-worked-examples",
      "kind": "topic",
      "title": "Examples: an API change, a package upgrade and an incident",
      "summary": "The agent commits and opens the pull request, saying a reason is needed.",
      "tokens": 910,
      "hash": "sha256:3c71781766623fd908ec4c2fe5eec55345bbf1aa48f8f0dd71e2d42a29312c57",
      "area": 18,
      "links": [
        "acceptance.no_reason",
        "external-services",
        "records-and-manifest-built"
      ],
      "aliases": [
        "three-journeys"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "records-and-manifest-built",
      "kind": "topic",
      "title": "What is built: Review and records",
      "summary": "Which parts of Review and records are built, and what the rest waits on",
      "tokens": 1851,
      "hash": "sha256:23f9b2d22b11798bdc86693afb16ef5775c57f2647612552884968fc72d682cb",
      "area": 18,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "acceptances",
        "configuration",
        "declared-deployables",
        "declaring-an-event",
        "external-services",
        "failures",
        "identity",
        "jobs-and-events",
        "logic",
        "migrations",
        "monitoring-thresholds-generated",
        "package-upgrades",
        "person-entities",
        "project-layout-and-modules",
        "retention",
        "reviewing-a-change",
        "the-personal-data-report",
        "tooling",
        "values-and-types"
      ],
      "group": "Tools",
      "page": "Review and records",
      "status": null
    },
    {
      "id": "standard-library",
      "kind": "topic",
      "title": "Standard library",
      "summary": "The standard library is the set of operations every program can use without declaring them, such as `list.count(items)` and `temporal.in_zone(at, zone)`, over the standard types, such as `Money`.",
      "tokens": 1842,
      "hash": "sha256:c8d8851f90393b506f32748d8dc0b73e965cb83faa6409e1d5117e1f4c6d6054",
      "area": 19,
      "links": [
        "ai",
        "batches-work-over-many-items",
        "collections",
        "every-standard-type-meets-one-contract",
        "geospatial",
        "locales",
        "logic",
        "passing-functions",
        "standard-library-built",
        "the-standard-operator-table",
        "the-standard-types",
        "time-types",
        "values-and-types",
        "zones-and-local-times"
      ],
      "aliases": [
        "language-gaps-this-page-depends-on",
        "scenario-applications"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "the-standard-types",
      "kind": "topic",
      "title": "How standard types are named, and what is left out",
      "summary": "A standard type's name says exactly what it is, and a type you might look for may be part of another or left for your app to define.",
      "tokens": 2179,
      "hash": "sha256:f74893fc4ec7175c0604ed786f1e8f3ee19587c921b941ea5e3c5a34da5d8bdc",
      "area": 19,
      "links": [
        "geospatial",
        "identity",
        "personal-data",
        "type-area",
        "type-bank-account",
        "type-barcode",
        "type-bearing",
        "type-calendar-date",
        "type-colour",
        "type-country",
        "type-country-subdivision",
        "type-currency",
        "type-data-size",
        "type-date-range",
        "type-dimensions",
        "type-dosage-instruction",
        "type-duration",
        "type-ean13",
        "type-feature",
        "type-feature-collection",
        "type-flight-number",
        "type-git-ref",
        "type-hmac",
        "type-http-header-name",
        "type-identity-document",
        "type-identity-document-kind",
        "type-image-dimensions",
        "type-instant-range",
        "type-length",
        "type-mass",
        "type-money",
        "type-network-port",
        "type-nhs-number",
        "type-package-url",
        "type-percentage",
        "type-point",
        "type-postal-address",
        "type-pressure",
        "type-price",
        "type-problem-details",
        "type-range",
        "type-ratio",
        "type-recurrence-rule",
        "type-rich-text",
        "type-rich-text-block",
        "type-secret-text",
        "type-speed",
        "type-subtitle-cue",
        "type-temperature",
        "type-uk-sort-code",
        "type-unit-quantity",
        "type-url",
        "type-us-ssn",
        "type-web-origin",
        "type-writing-script",
        "values-and-types"
      ],
      "aliases": [
        "shared-vocabulary-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "every-standard-type-meets-one-contract",
      "kind": "topic",
      "title": "What every standard type can do",
      "summary": "Every standard type comes with the same baseline of operations, so once you know how one type is built, read, sent, stored and shown, you know them all.",
      "tokens": 3982,
      "hash": "sha256:f849381152dfab717f55e3aa6b120776ff7b4d08aae16ecc40f6db78ba061315",
      "area": 19,
      "links": [
        "ai",
        "enums",
        "every-boundary-through-the-contract",
        "geospatial",
        "objects",
        "predicates-and-shapes",
        "standard-library-operations",
        "suggestions",
        "time-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "every-boundary-through-the-contract",
      "kind": "topic",
      "title": "How a standard value is sent, stored and shown",
      "summary": "A standard value keeps its currency, unit and precision wherever it goes into or out of your program.",
      "tokens": 3725,
      "hash": "sha256:69523938657763118c2a347f7a208d1b5bf82a43c87820db1897bc66a497c4ea",
      "area": 19,
      "links": [
        "acceptances",
        "built-in-services",
        "caches",
        "data",
        "data-formats-json-csv-tsv-and-json-lines",
        "debugging-and-review",
        "external-services",
        "files",
        "http",
        "jobs-and-events",
        "logging",
        "one-input",
        "paths-and-placeholders",
        "personal-data",
        "reads-and-writes",
        "records-and-manifest",
        "settings-config-jadpo",
        "structured-values",
        "testing",
        "time-and-calendar-additions",
        "time-types",
        "translations-as-messages"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "standard-type-encodings",
      "kind": "topic",
      "title": "Changing a standard type's encoding",
      "summary": "Upgrading Jadpo never makes your stored data unreadable.",
      "tokens": 979,
      "hash": "sha256:96a9fc6623a06b1d4ee8237a54811e2bf1a9ff4c5539ef6211db7cbcced90b1b",
      "area": 19,
      "links": [
        "system-tables"
      ],
      "aliases": [
        "changing-a-standard-type-s-encoding"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "packages-use-the-standard-types",
      "kind": "topic",
      "title": "Packages use the standard types",
      "summary": "When you declare a type with the same shape as a standard type, the compiler reports the error `type.standard_exists` and points you at the standard type.",
      "tokens": 1370,
      "hash": "sha256:fa31dd1ecc19c67bcdd4b8e9efc69b9b6b61622ab8513664ad07219066b0b7dc",
      "area": 19,
      "links": [
        "acceptances",
        "declining-a-judgement-call",
        "decoding",
        "geospatial-interop",
        "records-and-manifest",
        "standard-library",
        "standard-type-clashes"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "standard-type-clashes",
      "kind": "topic",
      "title": "A release that adds a standard type",
      "summary": "When a Jadpo upgrade adds a standard type with a name your app already uses for a type of its own, your app never breaks silently.",
      "tokens": 2071,
      "hash": "sha256:54aabdec1960ae9dc9c85cdfb0e90c07a26735e49b964a5b82801c1bf71d7c34",
      "area": 19,
      "links": [
        "editor-support",
        "records-and-manifest",
        "standard-library"
      ],
      "aliases": [
        "a-release-that-adds-a-standard-type"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "what-every-operation-follows",
      "kind": "topic",
      "title": "What every operation follows",
      "summary": "Every namespace follows the same rules, so a call you haven't seen before reads like one you have.",
      "tokens": 1051,
      "hash": "sha256:64d44faa746698c1f6efbe93d3e7746332ea796af1606c508094aec6bf2bb590",
      "area": 19,
      "links": [
        "expressions-and-operators",
        "failures",
        "functions-and-actions",
        "project-layout-and-modules",
        "values-and-types",
        "zones-and-local-times"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "validating-in-the-middle-of-a-program",
      "kind": "topic",
      "title": "Validating in the middle of a program",
      "summary": "To check a value partway through a program, construct it.",
      "tokens": 345,
      "hash": "sha256:fb801beefd96a550bf6234c0177e1b6a32d3101f03d55f72e7325a000bfeabc6",
      "area": 19,
      "links": [
        "creating-values",
        "objects"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "standard-library-operations",
      "kind": "topic",
      "title": "All operations",
      "summary": "The sections below list every operation beyond the contract's baseline, with its signature, failures and SQL form, one section per namespace or group of types.",
      "tokens": 303,
      "hash": "sha256:26c5047607ecea1b157d015d3e285b7dd78f199e0864a9b80c6ff0c0af908329",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "locales"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "the-standard-operator-table",
      "kind": "topic",
      "title": "The standard operator table",
      "summary": "Operators on standard types work by one fixed table rather than a library function per job, so `price * 20%` and `distance / 2h` read as they would on paper.",
      "tokens": 3643,
      "hash": "sha256:d8be6c4d447071bf85458b1679b34625a9f46ff24d0f580a932dd550b1b8885a",
      "area": 19,
      "links": [
        "arithmetic-and-comparison",
        "creating-values",
        "entities-and-the-id",
        "expressions-and-operators",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "sql-forms",
      "kind": "topic",
      "title": "SQL forms",
      "summary": "A SQL form is a PostgreSQL 16 expression that gives exactly the result the runtime gives, for every argument.",
      "tokens": 1848,
      "hash": "sha256:630da5a9b93f0253f9a66b95a2a1ec8a3189393e67951b4b677361b80c2dce03",
      "area": 19,
      "links": [
        "computed-backfills",
        "counters-and-other-one-step-updates",
        "counts-sums-and-groups",
        "data",
        "filters",
        "indexes",
        "order-and-pages",
        "storage-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "lists",
      "kind": "topic",
      "title": "Lists",
      "summary": "A list holds items of one type in order, like an array in TypeScript, except that it never changes: every operation that changes a list gives you a new one.",
      "tokens": 3012,
      "hash": "sha256:4f964ae5af284e5d4306a941c8bde4724062baa2521084dd82c9d5ad0f2fbe57",
      "area": 19,
      "links": [
        "collections",
        "expressions-and-operators",
        "maps",
        "passing-functions",
        "standard-library",
        "text",
        "values-never-change"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "sets",
      "kind": "topic",
      "title": "Sets",
      "summary": "A set holds items of one type, each only once, and has no order your code can use.",
      "tokens": 1032,
      "hash": "sha256:49dc984ca908050a7188fb3504eb7b5e6f6541dd289004a10e435080fc42d473",
      "area": 19,
      "links": [
        "collections"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "maps",
      "kind": "topic",
      "title": "Maps",
      "summary": "A map holds values by key, like a `Map` in TypeScript, except that it never changes.",
      "tokens": 1256,
      "hash": "sha256:c4e2e12a712e975869168c79623a16941081c70e5e7105e4ea434aa3a6b666bb",
      "area": 19,
      "links": [
        "collections"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "ranges",
      "kind": "topic",
      "title": "Ranges",
      "summary": "A range is a span of values between a start and an end, such as a booking's hours or a band of cake sizes.",
      "tokens": 2037,
      "hash": "sha256:c1f74c724e6eefd85625136fea51b21eba32d55d1019f3cdc816174e279871d0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "numbers"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "numbers",
      "kind": "topic",
      "title": "Numbers",
      "summary": "Numbers have two namespaces: `integer` operations take values built on `Int`, and `decimal` operations take values built on `Decimal`.",
      "tokens": 3885,
      "hash": "sha256:207b9c9e28c80fed161403d97f81d8be561bde0d9a4309f2ac2a2f0c521b893e",
      "area": 19,
      "links": [
        "built-in-types",
        "creating-values",
        "every-standard-type-meets-one-contract",
        "expressions-and-operators",
        "standard-library",
        "translations-as-messages",
        "when-one-type-can-stand-in-for-another"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "money-and-payments",
      "kind": "topic",
      "title": "Money and payments",
      "summary": "Use `Money` for an amount of money and `Currency` for its currency.",
      "tokens": 1850,
      "hash": "sha256:3a162213b11f186fceaf1bc89fd64707cebb2aad99fa17d11bbd31041cb576e9",
      "area": 19,
      "links": [
        "signatures-use-named-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "exchange-rates",
      "kind": "topic",
      "title": "Exchange rates",
      "summary": "An `ExchangeRate` says how much one currency is worth in another at a moment, so you can convert an amount.",
      "tokens": 3185,
      "hash": "sha256:078dd9076a195bc913716ecca82f2d3d33f77377dc2e31deb71ab866de1b6618",
      "area": 19,
      "links": [
        "built-in-types",
        "named-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "money-operations",
      "kind": "topic",
      "title": "Money operations",
      "summary": "The `money` operations make, take apart, add up, share out and convert amounts of `Money`.",
      "tokens": 2219,
      "hash": "sha256:fb5e877d86d9f06821736c469cbda49ab762a929c9c359dfdba252a1661644f3",
      "area": 19,
      "links": [
        "attempt",
        "exchange-rates",
        "money-and-payments",
        "the-standard-operator-table",
        "translations-as-messages",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "prices-discounts-and-rates",
      "kind": "topic",
      "title": "Prices, discounts and rates",
      "summary": "These types hold a price, a discount, a price per kilogram or litre, and the rates a business quotes: tax, basis points and interest.",
      "tokens": 2657,
      "hash": "sha256:e2fe3daa006b612ee9b6e4ba3ba61c2b34a1bfbe4d8f661a7c8db80a9170cb7d",
      "area": 19,
      "links": [
        "enums",
        "physical-quantities",
        "the-standard-operator-table"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "bank-accounts",
      "kind": "topic",
      "title": "Bank accounts",
      "summary": "A `BankAccount` holds the details a payment to a bank account needs.",
      "tokens": 1616,
      "hash": "sha256:fc7d9ea25c48f544f37f7caa1c4aed7640a605b39a15d81bb5d443feff329286",
      "area": 19,
      "links": [
        "groups-with-the-baseline-only",
        "marking-personal-fields"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "physical-quantities",
      "kind": "topic",
      "title": "Physical quantities",
      "summary": "A quantity type holds a measured amount, such as a length, a mass, a temperature or a file's size.",
      "tokens": 4141,
      "hash": "sha256:8e7760d623419c96e0583b54e147bd9888398846475b44df0c103a6b24d74c8e",
      "area": 19,
      "links": [
        "creating-values",
        "declining-a-judgement-call",
        "durations",
        "expressions-and-operators",
        "groups-with-the-baseline-only",
        "signatures-use-named-types",
        "the-standard-operator-table",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "time-and-calendar-additions",
      "kind": "topic",
      "title": "Time and calendar additions",
      "summary": "These types add to the time types: a time of day, a month, a week, a range of dates, an amount of calendar time, and the text forms of recurrences, opening hours and calendar events.",
      "tokens": 3448,
      "hash": "sha256:dca90790e4b95df7115ceba2f4bcf3b31469d552d3199a2c22279106613ba018",
      "area": 19,
      "links": [
        "arithmetic-and-comparison",
        "objects",
        "ranges",
        "standard-library",
        "the-standard-operator-table",
        "time-types",
        "zones-and-local-times"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "recurrences-and-opening-hours",
      "kind": "topic",
      "title": "Recurrences and opening hours",
      "summary": "A `RecurrenceRule` says when something repeats, such as a class every Monday at 09:30.",
      "tokens": 2278,
      "hash": "sha256:d48dd73d1b4c272913dee9de8288d1794b8b6135b9aab16f471278d9935358a5",
      "area": 19,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "calendar-events",
      "kind": "topic",
      "title": "Calendar events",
      "summary": "A `CalendarEvent` is an entry in a calendar: a holiday, a booking, a shift.",
      "tokens": 4844,
      "hash": "sha256:a6a0336805534ddbece7a256f0b0739dbc35c858f579134b5bce0aac5f70162b",
      "area": 19,
      "links": [
        "zones-and-local-times"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "text",
      "kind": "topic",
      "title": "Text",
      "summary": "The `text` operations count, search, cut, pad and change the case of text, and turn other values into text and back.",
      "tokens": 4672,
      "hash": "sha256:a5e139c6b89df1f76bffa05031e7717579633790bdd94205858921dd29d828b3",
      "area": 19,
      "links": [
        "built-in-types",
        "creating-values",
        "enums",
        "every-standard-type-meets-one-contract",
        "expressions-and-operators",
        "locales",
        "named-types",
        "numbers",
        "one-input",
        "showing-dates-and-times-to-people",
        "standard-library",
        "time-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "text-formats",
      "kind": "topic",
      "title": "Text formats",
      "summary": "Four standard types hold text with structure:",
      "tokens": 3877,
      "hash": "sha256:fd61fcca7f081761f8ec90311deffbf1bf8b9a21d119a8d04402732d781a30f5",
      "area": 19,
      "links": [
        "collections",
        "email",
        "enums",
        "locales"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "bytes",
      "kind": "topic",
      "title": "Bytes",
      "summary": "A `Bytes` value is a whole: the `bytes` operations make a new one, `encoding` writes it as text and reads it back, and `hash` digests it.",
      "tokens": 545,
      "hash": "sha256:f20ea3949df32a28cede5b9c652ddee7e8eab7636f4528571e1ee5b6db4da9fe",
      "area": 19,
      "links": [],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "hashing-and-cryptography",
      "kind": "topic",
      "title": "Hashing and cryptography",
      "summary": "The `hash` and `crypto` operations hash values, encrypt and decrypt them, hash and check passwords, sign and check messages, and check tokens and one-time codes.",
      "tokens": 4834,
      "hash": "sha256:163391eec6d9355d88f114cd807cabd5f5f8fe24415aac3e90d53dc419c840f0",
      "area": 19,
      "links": [
        "built-in-services",
        "checking-values-before-the-app-starts",
        "encrypted-fields",
        "external-services",
        "identity",
        "secret-values",
        "secrets",
        "signing-keys"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "signed-tokens",
      "kind": "topic",
      "title": "Signed tokens",
      "summary": "`crypto.verify_jwt` checks a JSON Web Token (JWT) that another service signed, such as the token a partner's sign-in service gives a person.",
      "tokens": 3641,
      "hash": "sha256:aafc47bf8fffa2c856dafc4ef25b4b2d026aa86d776b8c51c0a276875816c214",
      "area": 19,
      "links": [
        "policy",
        "secret-values",
        "standard-library-built",
        "the-standard-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "secret-values",
      "kind": "topic",
      "title": "Secret values",
      "summary": "A secret value is a password, key, token or code that your app receives and checks, but never sends, logs, stores or shows.",
      "tokens": 2740,
      "hash": "sha256:d4fb8da5794aceaa59742ef602eb7714970b73927f4393b814e52df286847825",
      "area": 19,
      "links": [
        "encrypted-fields",
        "hashing-and-cryptography",
        "randomness",
        "secrets",
        "standard-library-built",
        "starting-and-ending-a-session",
        "what-the-graph-and-production-evidence-add"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "security-records",
      "kind": "topic",
      "title": "Security records",
      "summary": "These are the types for what security code keeps and checks: digests, signatures and sealed values, a password policy, passkeys and certificates.",
      "tokens": 4141,
      "hash": "sha256:4c5f4d307a080b385ac67ebdabc199b8231e97d155f7af71e340b862333860cd",
      "area": 19,
      "links": [
        "hashing-and-cryptography",
        "passkeys",
        "values-never-change"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "randomness",
      "kind": "topic",
      "title": "Randomness",
      "summary": "`random` gives your app random tokens, codes, whole numbers, shuffles and samples.",
      "tokens": 1329,
      "hash": "sha256:179e0b6733415c028bf9ba1e52e5697902c60cef63745e591f69af51fa666410",
      "area": 19,
      "links": [
        "debugging-and-review",
        "secret-values",
        "what-the-graph-and-production-evidence-add"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "encodings",
      "kind": "topic",
      "title": "Encodings",
      "summary": "The `encoding` operations turn bytes into text and back: Base64 and Base64url for bytes sent as text, hexadecimal for digests, UTF-8 for text as bytes, and percent-encoding for a part of a link.",
      "tokens": 1760,
      "hash": "sha256:14f2704f9af6c41b0716ab041905a74283e53190278dee1365f4abc7e6d97895",
      "area": 19,
      "links": [
        "data-formats-json-csv-tsv-and-json-lines",
        "identity",
        "paths-and-placeholders"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "data-formats-json-csv-tsv-and-json-lines",
      "kind": "topic",
      "title": "Data formats: JSON, CSV, TSV and JSON Lines",
      "summary": "Four namespaces turn data in a format into your app's types and back, each in one shape.",
      "tokens": 2833,
      "hash": "sha256:49d8ab92db3308ae069a128c72a1d4f6515374ef3ed7e7e45e7324dc3e48294d",
      "area": 19,
      "links": [
        "batches-work-over-many-items",
        "built-in-types",
        "calling",
        "every-boundary-through-the-contract",
        "export-batch-runs",
        "file-batch-runs",
        "files",
        "http",
        "order-and-pages",
        "passing-functions"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "json",
      "kind": "topic",
      "title": "json",
      "summary": "`json` reads and writes JSON.",
      "tokens": 4195,
      "hash": "sha256:cb8663c55524ec25c04e7b21f09de19565608554efedc1c53efade13e87a4cc4",
      "area": 19,
      "links": [
        "batches-work-over-many-items",
        "file-batch-runs",
        "how-failures-reach-the-client",
        "http",
        "logging",
        "magic-links",
        "time-types",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "colour",
      "kind": "topic",
      "title": "Colour",
      "summary": "`Colour` is a colour as a web page uses it: written as CSS writes a hex colour, `#1e6fd9`, and held as its red, green, blue and alpha channels.",
      "tokens": 2321,
      "hash": "sha256:f83ef4cba4af9532a9a37793e1e078b1f1b5a1f20d0ae5854f438b7e90db582c",
      "area": 19,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "media",
      "kind": "topic",
      "title": "Media",
      "summary": "The media types describe images, video, audio and captions: an image's size, a frame rate, a timecode, a subtitle cue, a film's age rating.",
      "tokens": 2167,
      "hash": "sha256:5dc19bd34ef8b269d493a4b54a43715818b58825f3c7a6316b97fc38e284e28d",
      "area": 19,
      "links": [],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "web-and-software",
      "kind": "topic",
      "title": "Web and software",
      "summary": "The web types are the values a web app and its network pass around: URLs and paths, domain names, HTTP statuses and headers, cookies, IP ranges, and the problem documents an API reports failures with.",
      "tokens": 3659,
      "hash": "sha256:b1f76aa85939ae42891f8fec67cd684f1ff5a5a1d2bc34545092dbf49813149d",
      "area": 19,
      "links": [
        "external-services",
        "http",
        "marking-personal-fields",
        "software-types",
        "testing"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "software-types",
      "kind": "topic",
      "title": "Software types",
      "summary": "The software types are the values tools and build systems pass around: version numbers and ranges, git refs, package and container names, licences, trace ids, file names and paths.",
      "tokens": 2943,
      "hash": "sha256:686bf8dedb4127f55189ec917ae43158938268dd2ec26a3336be04425fa376e3",
      "area": 19,
      "links": [
        "files",
        "named-types",
        "telemetry"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "groups-with-the-baseline-only",
      "kind": "topic",
      "title": "Groups with the baseline only",
      "summary": "Many standard types are a value with a check and nothing more: an IBAN, a card number, a barcode, an NHS number.",
      "tokens": 2188,
      "hash": "sha256:6873f24d863a08b321a644fba37fb95f878993d889baa1179cc86bc7963c9306",
      "area": 19,
      "links": [
        "bank-accounts",
        "every-standard-type-meets-one-contract",
        "marking-personal-fields",
        "personal-data",
        "safety-and-privacy",
        "standard-library-built",
        "values-and-types"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "cards-and-identity-documents",
      "kind": "topic",
      "title": "Cards and identity documents",
      "summary": "Cards and identity documents are numbers a person holds: a card's brand and last four digits, its expiry, a VAT number or tax id, a passport or a driving licence.",
      "tokens": 2896,
      "hash": "sha256:d07801d211872008f9ee55b793e075a287ce44c7deca3bbc44169523683f5964",
      "area": 19,
      "links": [
        "bank-accounts",
        "creating-values",
        "money-and-payments"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "names-addresses-and-countries",
      "kind": "topic",
      "title": "Names, addresses and countries",
      "summary": "These types hold people's names, postal addresses and email addresses, and the closed lists every app needs: countries and their subdivisions, languages, scripts, continents, nationalities.",
      "tokens": 3489,
      "hash": "sha256:76b298b4707e09a4c172a1f82d61f278c60152e0b8f3dec9f988c414dce08638",
      "area": 19,
      "links": [
        "marking-personal-fields",
        "match"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "phone-numbers-and-postal-codes",
      "kind": "topic",
      "title": "Phone numbers and postal codes",
      "summary": "A phone number is kept in its international form and a postal code in its country's form, but people type both in their own way.",
      "tokens": 1839,
      "hash": "sha256:f615b3b8bd16af20807432b8d79fb453ff75c9fd735cdd062be7ccdbb891cbd1",
      "area": 19,
      "links": [
        "objects"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "commerce-travel-and-health-codes",
      "kind": "topic",
      "title": "Commerce, travel and health codes",
      "summary": "These are the codes trade, transport and healthcare use: barcodes, ISBNs, container numbers, delivery terms, airport codes, blood types, diagnosis codes.",
      "tokens": 1921,
      "hash": "sha256:466370a2d31da24b582b5e1bdaa2f952814793925793806b52bac95bd7ab037f",
      "area": 19,
      "links": [
        "groups-with-the-baseline-only"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "records-and-health-measures",
      "kind": "topic",
      "title": "Records and health measures",
      "summary": "These types are the records that sit beside an app's own data: a parcel's size and tracking number, a flight, a clothing size, a vehicle registration, a rating, a barcode.",
      "tokens": 3959,
      "hash": "sha256:f6b978535330fe59bb9b0f9ab53809d4d6fbad524d8726d63f1ca339c35a8bb3",
      "area": 19,
      "links": [
        "personal-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "logic-and-bits",
      "kind": "topic",
      "title": "Logic and bits",
      "summary": "`and`, `or` and `not` are the logical operators (Expressions and operators).",
      "tokens": 139,
      "hash": "sha256:c528b84e80ce63ed3ea38de085dd4d5516da8df3e58f2a866ad946bf79d68069",
      "area": 19,
      "links": [
        "expressions-and-operators"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "geospatial-types",
      "kind": "topic",
      "title": "Geospatial types",
      "summary": "The geospatial types hold places and shapes on the Earth: a point, a line, a polygon, a bounding box, a circle, a map tile.",
      "tokens": 2223,
      "hash": "sha256:58417241a8affce7a3ad458df7877940e6a446f9b73e479c1542cfd4e4dcad7e",
      "area": 19,
      "links": [
        "enums",
        "geospatial",
        "geospatial-built",
        "geospatial-interop",
        "geospatial-left-out",
        "geospatial-storage",
        "marking-personal-fields",
        "packages-use-the-standard-types",
        "precision-and-determinism",
        "predicates-and-shapes"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "ai-types",
      "kind": "topic",
      "title": "AI types",
      "summary": "The AI types are the values an app passes to and from a model: chat messages and their roles, vectors and embeddings, and token counts.",
      "tokens": 2185,
      "hash": "sha256:81f1307a53565f8ed10d0ef5e211cb138549168cc83086f65d42b43a43dc0801",
      "area": 19,
      "links": [
        "ai",
        "ai-built",
        "ai-left-out",
        "embeddings-and-search",
        "external-services",
        "personal-data",
        "the-ai-capability",
        "vector-index"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "coming-from-typescript",
      "kind": "topic",
      "title": "Coming from TypeScript",
      "summary": "If you know TypeScript, a few of the standard library's choices will differ from what you expect:",
      "tokens": 240,
      "hash": "sha256:d6bd1eda824c4c520c98269e02e9c0ddf99c3b38898402cab27f6039da8ed439",
      "area": 19,
      "links": [],
      "aliases": [
        "how-the-five-languages-compare"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "standard-library-built",
      "kind": "topic",
      "title": "What is built: Standard library",
      "summary": "Which parts of Standard library are built, and what the rest waits on",
      "tokens": 408,
      "hash": "sha256:8527ceb1757febdf217a7fe714a239838064427eae965eadc93f4e6bd626632c",
      "area": 19,
      "links": [
        "ai-built",
        "debugging-and-review",
        "geospatial-built",
        "personal-data",
        "policy",
        "records-and-manifest",
        "tooling"
      ],
      "group": "Language",
      "page": "Standard library",
      "status": null
    },
    {
      "id": "geospatial",
      "kind": "topic",
      "title": "Geospatial",
      "summary": "Geospatial values say where things are, and what is near or inside what, such as the shops within five kilometres of a customer.",
      "tokens": 881,
      "hash": "sha256:c9e3114a37f88f2316bc7ba281c8995d989ffd7dce1d86c8ba86af599ab8d72d",
      "area": 20,
      "links": [
        "geometry-operations",
        "geospatial-interop",
        "geospatial-queries",
        "geospatial-storage",
        "geospatial-types",
        "reads-and-writes",
        "storage-types",
        "what-every-operation-follows"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "what-every-geospatial-operation-follows",
      "kind": "topic",
      "title": "What every geospatial operation follows",
      "summary": "Every `geo.` operation works the same way in the respects below, so you can rely on them without checking each operation.",
      "tokens": 701,
      "hash": "sha256:d04cafdfec2c33fe54ca636a5103f17c5e6d7f6f6003fb71cb0480cc23c8f822",
      "area": 20,
      "links": [
        "geospatial-interop",
        "precision-and-determinism"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geometry-operations",
      "kind": "topic",
      "title": "Geometry operations",
      "summary": "The `geo.` operations measure distances, lengths, directions and areas, and say whether one shape touches or holds another.",
      "tokens": 2947,
      "hash": "sha256:9a5ca9f25f31fc50863957c020b75fad481ace6136e0ae6588780624f5c4c403",
      "area": 20,
      "links": [
        "counts-sums-and-groups",
        "geospatial-left-out",
        "geospatial-queries",
        "objects",
        "precision-and-determinism",
        "predicates-and-shapes",
        "zones-and-local-times"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "predicates-and-shapes",
      "kind": "topic",
      "title": "Predicates and shapes",
      "summary": "Whether one shape contains, is within or intersects another, and a shape's centre and bounding box.",
      "tokens": 3057,
      "hash": "sha256:432c765c526ac95635c039ff59b2ed52d79ef9bf17dda36d3c5610e087d0357e",
      "area": 20,
      "links": [
        "every-boundary-through-the-contract",
        "geospatial-types",
        "objects"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geospatial-storage",
      "kind": "topic",
      "title": "Storing geometries",
      "summary": "A geometry field of an entity is stored in one PostgreSQL column of PostGIS's `geography` type.",
      "tokens": 2887,
      "hash": "sha256:b0c8f8af28f11fa86b94e564dbe09c55c395b3723bc28f449416081c890dfdd8",
      "area": 20,
      "links": [
        "ai",
        "data",
        "geospatial-interop",
        "geospatial-types",
        "indexes",
        "migrations",
        "precision-and-determinism",
        "queries-on-entities-in-redis",
        "storage-types"
      ],
      "aliases": [
        "storage"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geospatial-queries",
      "kind": "topic",
      "title": "Finding records by place",
      "summary": "You find records by where they are with a `geo.` call as a query's `where:` condition.",
      "tokens": 3391,
      "hash": "sha256:bad10fd76b149a7622b2ac2e7bfc4e234773e096787060242e3e44339c3e30ec",
      "area": 20,
      "links": [
        "filters",
        "geometry-operations",
        "reads-and-writes"
      ],
      "aliases": [
        "queries"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "precision-and-determinism",
      "kind": "topic",
      "title": "Precision and determinism",
      "summary": "A `geo.` operation gives the same digits on the interpreter, a native build and a wasm32 build, and a query gives the same records the code would keep.",
      "tokens": 1507,
      "hash": "sha256:bd6dc302fb283f07a823d79c8e20c227ae373c4efdaacd6af0022108b81b8cda",
      "area": 20,
      "links": [
        "geometry-operations",
        "geospatial-queries",
        "numbers"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geospatial-interop",
      "kind": "topic",
      "title": "GeoJSON and other formats",
      "summary": "Other systems send and expect geometries in their own formats: map libraries take GeoJSON layers, spreadsheets and other systems' APIs hold WKT text, and trackers send pairs of numbers.",
      "tokens": 4368,
      "hash": "sha256:56e76c407e6a609aebb7a661689d0500d680fa7f17f2126e3d1984fc19dbe7ff",
      "area": 20,
      "links": [
        "a-query-giving-a-map-layer",
        "geospatial-types",
        "output-and-status",
        "precision-and-determinism",
        "predicates-and-shapes",
        "structured-values",
        "type.record_type_arguments"
      ],
      "aliases": [
        "interop"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geospatial-left-out",
      "kind": "topic",
      "title": "What geospatial leaves out, and what to use instead",
      "summary": "Some geospatial work is left out of the language.",
      "tokens": 473,
      "hash": "sha256:08ceb38ceb93f00697f4ec8851420a14964833dfd343be01405f8791f4648c5d",
      "area": 20,
      "links": [
        "external-services",
        "geospatial-queries",
        "what-every-geospatial-operation-follows"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "geospatial-built",
      "kind": "topic",
      "title": "What is built: Geospatial",
      "summary": "Which parts of Geospatial are built, and what the rest waits on",
      "tokens": 237,
      "hash": "sha256:75c961ff0d32edcc8c5270391acc92381156a24166aae12cae896c0f67468f52",
      "area": 20,
      "links": [
        "counts-sums-and-groups",
        "indexes",
        "queries-on-entities-in-redis"
      ],
      "group": "Data",
      "page": "Geospatial",
      "status": null
    },
    {
      "id": "ai",
      "kind": "topic",
      "title": "AI",
      "summary": "Your app can ask a language model for an answer, a stream of text or an embedding (a list of numbers that stands for a text's meaning).",
      "tokens": 2325,
      "hash": "sha256:9c2eb6298431d3ed6b4dd5232b1f99abb215682a6a6840c5dde675083bd1809b",
      "area": 21,
      "links": [
        "ai-tests",
        "external-services",
        "the-ai-capability",
        "typed-output"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": "partly built"
    },
    {
      "id": "the-ai-capability",
      "kind": "topic",
      "title": "The ai capability",
      "summary": "Ask a model for a typed answer does the whole job, start to finish.",
      "tokens": 3501,
      "hash": "sha256:c827bff7831508600b9055665755c90ec971f51dec2326bbe768e3026d1e7bf8",
      "area": 21,
      "links": [
        "ai-tests",
        "all-or-nothing-actions-and-concurrent-changes",
        "calling",
        "capabilities",
        "failures",
        "guide-ask-a-model-for-a-typed-answer",
        "json",
        "secrets",
        "settings-config-jadpo",
        "several-changing-calls-in-one-action",
        "streaming-a-model-s-answer",
        "streams-embeddings-and-the-openai-and-anthropic-packages",
        "the-conformance-suite",
        "typed-output",
        "waiting-for-follow-on-work"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "typed-output",
      "kind": "topic",
      "title": "Typed output",
      "summary": "`ai.generate(prompt, as: T)` never hands back a value that hasn't passed every one of `T`'s rules.",
      "tokens": 1214,
      "hash": "sha256:a19a101bf12c5d5bace12d4d6708e62797287a2e90f25113199b0d363ae7a497",
      "area": 21,
      "links": [
        "a-package-filling-ai",
        "embeddings-and-search",
        "generating-its-fake-and-the-local-driver",
        "openapi",
        "policy"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "prompts-as-files",
      "kind": "topic",
      "title": "Prompts as files",
      "summary": "A prompt is what your app sends a model.",
      "tokens": 2549,
      "hash": "sha256:a52bc22e2e720dff4ec78494313f4b02a0e44bd37e51d7e1150de9ca48b1b475",
      "area": 21,
      "links": [
        "project-layout",
        "safety-and-privacy",
        "secret-values",
        "secrets",
        "the-manifest",
        "what-the-compiler-checks-of-translations"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "embeddings-and-search",
      "kind": "topic",
      "title": "Embeddings and search",
      "summary": "An embedding is a vector, a list of numbers, that stands for a text's meaning: texts that mean much the same have vectors close together.",
      "tokens": 3362,
      "hash": "sha256:ba35c9996b8912677491ed683a9cdaec1dd1feac8b04dfe8f6e7ce708812fdb5",
      "area": 21,
      "links": [
        "naming",
        "output-and-status"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "vector-index",
      "kind": "topic",
      "title": "The vector index",
      "summary": "You don't write an index for a vector search.",
      "tokens": 1428,
      "hash": "sha256:323356b55f0c78ca8a1b024b03d3a183f9454b3c2246459fae26dfd8a3ed751b",
      "area": 21,
      "links": [
        "declining-a-judgement-call",
        "indexes",
        "lifecycle",
        "query.nearest_exact"
      ],
      "aliases": [
        "the-index"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "without-pgvector",
      "kind": "topic",
      "title": "Without pgvector",
      "summary": "Vectors need PostgreSQL with the pgvector extension, which the major hosted services offer.",
      "tokens": 1009,
      "hash": "sha256:83c2aa7b31258f7a8c573bea250aab4767a84c5cc4a6f8285dfa689dd5e175ba",
      "area": 21,
      "links": [
        "database-command-errors",
        "geospatial"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "asking-for-an-embedding",
      "kind": "topic",
      "title": "Asking for an embedding",
      "summary": "To search by meaning, your app needs each text's embedding.",
      "tokens": 1061,
      "hash": "sha256:58fc10c4dcaff673e1c3adb50d60d23a7755513e14d2ef1549682dd5aa78ddca",
      "area": 21,
      "links": [
        "safety-and-privacy",
        "what-a-route-runs"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "keeping-embeddings-current",
      "kind": "topic",
      "title": "Keeping embeddings current",
      "summary": "When a record's text changes, its embedding must be made again.",
      "tokens": 335,
      "hash": "sha256:a0798202aaf2990341673556cddbe87dfd6ce4d7f282ac8c8d1d8289a7528c1a",
      "area": 21,
      "links": [
        "batches-work-over-many-items",
        "subscribers"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "safety-and-privacy",
      "kind": "topic",
      "title": "Safety and privacy",
      "summary": "By default, your app may send a model no personal data at all.",
      "tokens": 2816,
      "hash": "sha256:30cbed47c6f92dba8f1c3a80172ebbbe1f973e670e06f23758d0396f4a807701",
      "area": 21,
      "links": [
        "acceptances",
        "ai-built",
        "ai-types",
        "counters-and-other-one-step-updates",
        "erasure-at-providers",
        "fakes-and-the-development-call-log",
        "field-restrictions",
        "following-personal-data",
        "how-budgets-are-counted",
        "marking-personal-fields",
        "policy",
        "standard-library",
        "telemetry",
        "the-personal-data-report"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "ai-tests",
      "kind": "topic",
      "title": "Testing AI calls",
      "summary": "A test never reaches a real model.",
      "tokens": 2421,
      "hash": "sha256:a920046c1382dd1ada47c4019849d54f6a63fb00750a2f55cb1f4fe1f284da50",
      "area": 21,
      "links": [
        "ai-left-out",
        "controlling-time",
        "embeddings-and-recordings",
        "error-messages",
        "fakes-and-the-development-call-log",
        "fakes-for-integrations",
        "recording-an-answer",
        "recordings",
        "tests-and-fakes",
        "the-ai-capability"
      ],
      "aliases": [
        "tests"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "ai-left-out",
      "kind": "topic",
      "title": "What AI leaves out, and what to use instead",
      "summary": "Some things you might expect aren't part of Jadpo's AI support.",
      "tokens": 634,
      "hash": "sha256:de9de5ae715e4db06105b06ee847429a978acc81729876b315a37b47865b221a",
      "area": 21,
      "links": [
        "ai-types",
        "batches-work-over-many-items",
        "search",
        "what-package-code-may-do"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "generating-its-fake-and-the-local-driver",
      "kind": "topic",
      "title": "Generating, its fake and the local driver",
      "summary": "For when a setting is refused or a call surprises you: the full rules for `ai:`, `ai.generate` and the built-in `Driver.openai_compatible`, and for how the fake stands in for them in tests.",
      "tokens": 1964,
      "hash": "sha256:ddddb51c167ecd71d7118ddcec016c32d359aabdfb5e89d4a1419a596ddc6727",
      "area": 21,
      "links": [
        "a-package-filling-ai",
        "all-or-nothing-actions-and-concurrent-changes",
        "calling",
        "connecting-in-app-jadpo",
        "embeddings-and-recordings",
        "openapi",
        "settings-config-jadpo",
        "several-changing-calls-in-one-action",
        "the-ai-capability",
        "typed-output"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "streaming-from-a-model",
      "kind": "topic",
      "title": "Streaming from a model",
      "summary": "`ai.stream` sends a model's text to the client as it is written, rather than waiting for the whole answer, as a chat app does.",
      "tokens": 982,
      "hash": "sha256:daab00b4dec57d2c8d69066e2e9d9ba81374d41f2b56ac196d8ca3bd72c5a6b6",
      "area": 21,
      "links": [
        "how-budgets-are-counted",
        "several-changing-calls-in-one-action",
        "streaming-a-model-s-answer",
        "streams-embeddings-and-the-openai-and-anthropic-packages"
      ],
      "aliases": [
        "streaming"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "a-package-filling-ai",
      "kind": "topic",
      "title": "A package filling ai",
      "summary": "The full rules for a provider package's `provides/ai.jadpo`, which maps `ai`'s operations onto the provider's.",
      "tokens": 1569,
      "hash": "sha256:28b2ecafb27d667f4a3b08f7b9ea4741a79cfab8f5d7c29ebb514aba7604baf9",
      "area": 21,
      "links": [
        "fakes-and-the-development-call-log",
        "generating-its-fake-and-the-local-driver",
        "how-budgets-are-counted",
        "streams-embeddings-and-the-openai-and-anthropic-packages",
        "the-ai-capability"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "embeddings-and-recordings",
      "kind": "topic",
      "title": "Embeddings and recordings",
      "summary": "The full rules for `ai.embed`, `ai.embed_all` and recorded answers.",
      "tokens": 1227,
      "hash": "sha256:2a08217c6b09e6f07f99714f7aad3500c31f41a4c8d0d6b498caee6c8d107352",
      "area": 21,
      "links": [
        "ai-tests",
        "asking-for-an-embedding",
        "recordings"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "recording-an-answer",
      "kind": "topic",
      "title": "Recording an answer",
      "summary": "`jadpo ai record` asks the model once, in development, and keeps its answer as a recording a test can answer with.",
      "tokens": 730,
      "hash": "sha256:18430c7844c1781e6e92f24a2fc20dd692e229466eba10eac2fd0a2a3ec5c220",
      "area": 21,
      "links": [
        "embeddings-and-recordings"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "how-budgets-are-counted",
      "kind": "topic",
      "title": "How budgets are counted",
      "summary": "The full rules for `ai: { limits: }` and how each call is counted against them.",
      "tokens": 1520,
      "hash": "sha256:d134a042009cd19583918ee83d23616c037519ab1c44c1847a63b4d827959ac1",
      "area": 21,
      "links": [
        "safety-and-privacy",
        "schedules",
        "settings-config-jadpo",
        "streams-embeddings-and-the-openai-and-anthropic-packages"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "following-personal-data",
      "kind": "topic",
      "title": "Following personal data",
      "summary": "The full rules for how the compiler follows personal data to a model.",
      "tokens": 858,
      "hash": "sha256:15e77d6171df9fb8cee6c0c97e5777dd070c1ded1245ad4d52806e0ac5aa49be",
      "area": 21,
      "links": [
        "field-restrictions",
        "marking-personal-fields",
        "safety-and-privacy",
        "the-personal-data-report"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "streams-embeddings-and-the-openai-and-anthropic-packages",
      "kind": "topic",
      "title": "Streams, embeddings and the OpenAI and Anthropic packages",
      "summary": "How a provider package maps streams and embeddings, and what Jadpo's own OpenAI and Anthropic packages send.",
      "tokens": 2576,
      "hash": "sha256:2d24551bfc56535aee15d67d01c16b2f224481306ffb7d5c9414ed66f016660c",
      "area": 21,
      "links": [
        "generating-its-fake-and-the-local-driver",
        "the-ai-capability",
        "where-packages-come-from"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "the-conformance-suite",
      "kind": "topic",
      "title": "The conformance suite",
      "summary": "`jadpo package conform <package> ai` checks that a provider package fills `ai` as the capability says, before the registry lists it.",
      "tokens": 1489,
      "hash": "sha256:665f2c2e4ae8158f9ef050942479329ecbb227030f76f5221c20f2736deffab4",
      "area": 21,
      "links": [],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "ai-built",
      "kind": "topic",
      "title": "What is built: AI",
      "summary": "A feature not built yet is `toolchain.not_built_yet` where it is written.",
      "tokens": 298,
      "hash": "sha256:2eebdaf1d905a354ef3d225fc137152a568042f30158724663d2b7def5b992f1",
      "area": 21,
      "links": [
        "acceptances",
        "encrypted-fields",
        "running-a-query-or-action-jadpo-call",
        "the-personal-data-report"
      ],
      "group": "Built-in services",
      "page": "AI",
      "status": null
    },
    {
      "id": "types",
      "kind": "type",
      "title": "Standard types",
      "summary": "Every standard type Jadpo has, 259 of them, from A to Z.",
      "tokens": 8344,
      "hash": "sha256:4ec5e393d508745bb2de22a504e5c09668af212cf7d1b093b2cd97eea84d874d",
      "area": 19,
      "links": [
        "the-standard-types",
        "type-aba-routing-number",
        "type-allergen",
        "type-alt-text",
        "type-angle",
        "type-api-key",
        "type-area",
        "type-aspect-ratio",
        "type-audio-codec",
        "type-bank-account",
        "type-barcode",
        "type-basis-points",
        "type-bearer-token",
        "type-bearing",
        "type-bic",
        "type-bitrate",
        "type-blood-glucose",
        "type-blood-pressure",
        "type-blood-type",
        "type-booking-reference",
        "type-bounding-box",
        "type-cabin-class",
        "type-calendar-date",
        "type-calendar-event",
        "type-calendar-period",
        "type-calling-code",
        "type-card-bin",
        "type-card-brand",
        "type-card-expiry",
        "type-carrier",
        "type-cefr-level",
        "type-certificate",
        "type-chat-message",
        "type-chat-role",
        "type-cidr",
        "type-circle",
        "type-clothing-size",
        "type-clothing-size-system",
        "type-colour",
        "type-concentration",
        "type-container-image",
        "type-container-number",
        "type-content-rating",
        "type-content-rating-scheme",
        "type-continent",
        "type-cookie",
        "type-country",
        "type-country-subdivision",
        "type-crs",
        "type-currency",
        "type-current",
        "type-cve",
        "type-data-size",
        "type-date-range",
        "type-digest",
        "type-dimensions",
        "type-discount",
        "type-doi",
        "type-domain-name",
        "type-dosage-instruction",
        "type-dose",
        "type-driving-licence-number",
        "type-duration",
        "type-ean13",
        "type-easting-northing",
        "type-email",
        "type-email-with-name",
        "type-embedding",
        "type-emoji",
        "type-encrypted-value",
        "type-energy",
        "type-epc-rating",
        "type-exchange-rate",
        "type-exif-orientation",
        "type-family-name",
        "type-feature",
        "type-feature-collection",
        "type-file-name",
        "type-file-path",
        "type-file-type",
        "type-flight-number",
        "type-fraction",
        "type-frame-rate",
        "type-frequency",
        "type-geohash",
        "type-geometry",
        "type-git-ref",
        "type-given-name",
        "type-h3-cell",
        "type-hash",
        "type-heart-rate",
        "type-hmac",
        "type-hostname",
        "type-hs-code",
        "type-html",
        "type-http-header-name",
        "type-http-method",
        "type-http-status",
        "type-iata-airline",
        "type-iata-airport",
        "type-iban",
        "type-icao-airport",
        "type-icd10-code",
        "type-idempotency-key",
        "type-identity-document",
        "type-identity-document-kind",
        "type-illuminance",
        "type-image-dimensions",
        "type-imei",
        "type-incoterm",
        "type-insets",
        "type-instant",
        "type-instant-range",
        "type-interest-rate",
        "type-interest-rate-basis",
        "type-invoice-number",
        "type-ip-address",
        "type-isbn",
        "type-isin",
        "type-iso-week",
        "type-json-pointer",
        "type-jurisdiction",
        "type-jwk",
        "type-jwt",
        "type-jwt-claims",
        "type-language",
        "type-latitude",
        "type-lawful-basis",
        "type-lei",
        "type-length",
        "type-line-string",
        "type-local-date-time",
        "type-local-time",
        "type-locale",
        "type-localised-text",
        "type-log-level",
        "type-longitude",
        "type-lot-number",
        "type-mac-address",
        "type-map-tile",
        "type-markdown",
        "type-masked-card-number",
        "type-mass",
        "type-model-id",
        "type-money",
        "type-month",
        "type-mpan",
        "type-mprn",
        "type-multi-line-string",
        "type-multi-point",
        "type-multi-polygon",
        "type-nationality",
        "type-network-port",
        "type-nhs-number",
        "type-o-auth-scope",
        "type-oidc-claims",
        "type-one-time-code",
        "type-opening-hours",
        "type-orcid",
        "type-package-url",
        "type-paper-size",
        "type-passport-number",
        "type-password",
        "type-password-check",
        "type-password-hash",
        "type-password-policy",
        "type-payment-card-number",
        "type-payment-reference",
        "type-percentage",
        "type-person-name",
        "type-phone-extension",
        "type-phone-number",
        "type-point",
        "type-polygon",
        "type-postal-address",
        "type-postal-code",
        "type-power",
        "type-pressure",
        "type-price",
        "type-problem-details",
        "type-public-key",
        "type-push-token",
        "type-quarter",
        "type-range",
        "type-rating",
        "type-ratio",
        "type-rect",
        "type-recurrence-rule",
        "type-regular-expression",
        "type-relative-url",
        "type-rich-text",
        "type-rich-text-block",
        "type-rich-text-mark",
        "type-rich-text-span",
        "type-route-of-administration",
        "type-secret-text",
        "type-semantic-version",
        "type-serial-number",
        "type-shoe-size",
        "type-shoe-size-system",
        "type-sku",
        "type-slug",
        "type-snomed-concept",
        "type-sound-level",
        "type-span-id",
        "type-spdx-licence",
        "type-speed",
        "type-sscc",
        "type-subtitle-cue",
        "type-tax-id",
        "type-tax-rate",
        "type-temperature",
        "type-temperature-difference",
        "type-tenure",
        "type-text-direction",
        "type-timecode",
        "type-token-count",
        "type-token-usage",
        "type-totp-secret",
        "type-trace-id",
        "type-trace-parent",
        "type-tracking-number",
        "type-uk-account-number",
        "type-uk-company-number",
        "type-uk-national-insurance-number",
        "type-uk-sort-code",
        "type-uk-utr",
        "type-ulid",
        "type-un-locode",
        "type-un-number",
        "type-unit-price",
        "type-unit-quantity",
        "type-upc-a",
        "type-uprn",
        "type-url",
        "type-url-path",
        "type-us-ein",
        "type-us-ssn",
        "type-user-agent",
        "type-username",
        "type-utc-offset",
        "type-utm-parameters",
        "type-uuid",
        "type-vat-number",
        "type-vector",
        "type-vehicle-registration",
        "type-version-range",
        "type-video-codec",
        "type-video-resolution",
        "type-vin",
        "type-voltage",
        "type-volume",
        "type-web-authn-credential",
        "type-web-origin",
        "type-weekday",
        "type-writing-script",
        "type-year",
        "type-year-month",
        "type-zone",
        "type-zoned-time"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-aba-routing-number",
      "kind": "type",
      "title": "AbaRoutingNumber",
      "summary": "A US bank's routing number: nine digits with a check digit.",
      "tokens": 422,
      "hash": "sha256:5d78da6bea0352419636160a2139d73c8d79e02b24d8419a7cc45d5fa02ad4db",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uk-sort-code",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-allergen",
      "kind": "type",
      "title": "Allergen",
      "summary": "One of the 14 allergens a UK or EU food label must name: `milk`, `celery` and so on.",
      "tokens": 525,
      "hash": "sha256:fa8ea3d3ad1e3f50930a65db52b8b6efec561489f9f75d3340613b46fdef070a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-alt-text",
      "kind": "type",
      "title": "AltText",
      "summary": "What an image shows, for someone who can't see it.",
      "tokens": 454,
      "hash": "sha256:0a818404dc74725439e827a821afeeeaa835546bdf6ad2ce1ec2dd81327613a7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-angle",
      "kind": "type",
      "title": "Angle",
      "summary": "An angle: `90deg` or `1.5rad`.",
      "tokens": 770,
      "hash": "sha256:e19406bcb8b69289405a77e6a158037937609939fd74a6b9f4f6a7b1992e0a98",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bearing",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-api-key",
      "kind": "type",
      "title": "ApiKey",
      "summary": "A key for an API: up to 512 characters with no spaces.",
      "tokens": 388,
      "hash": "sha256:5174e2ec1490eeec5958771a326785faa3015143249cf5cffd2eed33079877cb",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bearer-token",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-area",
      "kind": "type",
      "title": "Area",
      "summary": "An area: `12sqm` or `2ha`.",
      "tokens": 704,
      "hash": "sha256:9c4b2a96b5c98bfe5336d972c950a07318c4b1f842812700c282592059b4ff83",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-length",
        "type-polygon",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-aspect-ratio",
      "kind": "type",
      "title": "AspectRatio",
      "summary": "Width to height in whole numbers: `16:9`.",
      "tokens": 463,
      "hash": "sha256:8379d023173d62773b01ad63f06eeabf07e603054c45028af9faa1fc67955a37",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ratio",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-audio-codec",
      "kind": "type",
      "title": "AudioCodec",
      "summary": "An audio format as browsers name it: `mp4a.40.2`, `opus`.",
      "tokens": 430,
      "hash": "sha256:368dc683b0aad99b73fd2b549613d9296e3c1c8e1381e711ab90e0a6d5f6a0df",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-video-codec",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bank-account",
      "kind": "type",
      "title": "BankAccount",
      "summary": "A bank account to pay into or take from, in any country.",
      "tokens": 754,
      "hash": "sha256:ad04912e6665cb3e627b6f4b2247b8e53a3ee4b93174e05bca60220c69e2fc2a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-iban",
        "type-uk-account-number",
        "type-uk-sort-code",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-barcode",
      "kind": "type",
      "title": "Barcode",
      "summary": "What a barcode encodes, and which kind of barcode it is.",
      "tokens": 597,
      "hash": "sha256:05d3cea133d444c79847bda076d90b09dd2cc795a7f2fedb5f6c672c61bd2589",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ean13",
        "type-upc-a",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-basis-points",
      "kind": "type",
      "title": "BasisPoints",
      "summary": "A count of hundredths of a percent: 25 basis points is 0.25%.",
      "tokens": 437,
      "hash": "sha256:ef736a2f30d792b3929e0cf2645664b8caab5465b9e82bd932a9607df76cc843",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-percentage",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bearer-token",
      "kind": "type",
      "title": "BearerToken",
      "summary": "An access token sent as `Authorization: Bearer`.",
      "tokens": 395,
      "hash": "sha256:308774f6c01383bee8a1f2f2a79e1924aad8394f401f9467733f77422131f2ac",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-jwt",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bearing",
      "kind": "type",
      "title": "Bearing",
      "summary": "A compass direction: degrees clockwise from true north, from 0 to 360.",
      "tokens": 486,
      "hash": "sha256:d70b003d3f3c7fa4efe915daeb6de2b6a1cd6cffab0754552b602ae815a243ff",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-angle",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bic",
      "kind": "type",
      "title": "Bic",
      "summary": "A bank's identifier code, also called a SWIFT code: 8 or 11 characters.",
      "tokens": 422,
      "hash": "sha256:1bf5c9ddc31e990ac15f351eccd876c0715674c7c25b2d31231b3e89d08aab4a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-iban",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bitrate",
      "kind": "type",
      "title": "Bitrate",
      "summary": "Data per second: `100Mbps`.",
      "tokens": 661,
      "hash": "sha256:c7a98f8a5f3a3b8d342b9d5e06eeb0a99e2d90eeab303e8044a58ea56c55095e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-data-size",
        "type-duration",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-blood-glucose",
      "kind": "type",
      "title": "BloodGlucose",
      "summary": "A blood sugar level, shown `5.5 mmol/L`.",
      "tokens": 725,
      "hash": "sha256:198210e070d49ee764166e598053032a5293bc72929e707ee681d752aaf8e157",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-concentration",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-blood-pressure",
      "kind": "type",
      "title": "BloodPressure",
      "summary": "A blood pressure reading: `120/80 mmHg`.",
      "tokens": 622,
      "hash": "sha256:76770488fbfad891499d36bd7794f1961fae807f6425aa13f7cc53ea1504d17a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-pressure",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-blood-type",
      "kind": "type",
      "title": "BloodType",
      "summary": "A person's blood group: `O-`, `AB+` and so on.",
      "tokens": 445,
      "hash": "sha256:0cef380f353ca436f54cc15dbe5e5750435516a0e7b2848844bce9bd8779c2f1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-booking-reference",
      "kind": "type",
      "title": "BookingReference",
      "summary": "A booking's six-character reference: `X7K9QZ`.",
      "tokens": 407,
      "hash": "sha256:e302507fab21949501bbd33ffad1dff2b2e141a5627e155f27b59a62c3cdb802",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-payment-reference",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-bounding-box",
      "kind": "type",
      "title": "BoundingBox",
      "summary": "A rectangle on a map, given by its four sides.",
      "tokens": 786,
      "hash": "sha256:95516c29694d86a6349646a83bb02a657f7868066ab19e7ff641827c1041a779",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-circle",
        "type-latitude",
        "type-longitude",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-cabin-class",
      "kind": "type",
      "title": "CabinClass",
      "summary": "The cabin a seat is sold in: `economy`, `premium_economy`, `business` or `first`.",
      "tokens": 393,
      "hash": "sha256:b50c474c3b03b6a0c9d13c8d9f75d01c797fa9b1c1dbe5fd1d7531aeb2e28c12",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-calendar-date",
      "kind": "type",
      "title": "CalendarDate",
      "summary": "A day on the calendar, with no time or zone: `2026-10-25`.",
      "tokens": 986,
      "hash": "sha256:c5fa49b58a5009f42be90425f7fdf7ca95e16ed1df85c1440006022d95327640",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-date-range",
        "type-instant",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-calendar-event",
      "kind": "type",
      "title": "CalendarEvent",
      "summary": "A calendar event, as a calendar app reads one: a title, and its days or its times.",
      "tokens": 1412,
      "hash": "sha256:dc1a99dfce77629fcb0476bb04c02e0137135577438b5d21453b43af9d3263a0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-date",
        "type-local-date-time",
        "type-recurrence-rule",
        "type-zone",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-calendar-period",
      "kind": "type",
      "title": "CalendarPeriod",
      "summary": "An amount of calendar time in years, months and days: `P1Y2M10D`.",
      "tokens": 580,
      "hash": "sha256:eef26f58a45c6c19534d7c1a83128f48f5fc43d3d084fead39cd5042060f3991",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-duration",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-calling-code",
      "kind": "type",
      "title": "CallingCode",
      "summary": "A country's telephone code with its `+`: `+44`.",
      "tokens": 417,
      "hash": "sha256:37cfe74bfaf5233840842e2db50ead71018061240aa2bd715a7430ee36cfaa5a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-phone-number",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-card-bin",
      "kind": "type",
      "title": "CardBin",
      "summary": "The first 6 or 8 digits of a card number, which name its issuer.",
      "tokens": 413,
      "hash": "sha256:fddc0eca31b1e5074602bc40b2b5348eda3548184800c0dcf4e3084d6131fb45",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-payment-card-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-card-brand",
      "kind": "type",
      "title": "CardBrand",
      "summary": "A card scheme: `visa`, `mastercard`, `american_express` and so on.",
      "tokens": 457,
      "hash": "sha256:ff28b95311bb3b9c44babc015ea3da8f8c1e9695a4675e39edf40658503ffbc8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-card-expiry",
      "kind": "type",
      "title": "CardExpiry",
      "summary": "The month a payment card runs to, written `2028-12`.",
      "tokens": 482,
      "hash": "sha256:8fa1e28630be792821eda124851cd4d62a7430efd24f04ecb308b5ba1d1e332e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-year-month",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-carrier",
      "kind": "type",
      "title": "Carrier",
      "summary": "A shipping company by its two-to-four-letter code: `UPSN`, `MAEU`.",
      "tokens": 401,
      "hash": "sha256:c25c21b1e987fc0cdf8a8faffb02b77ef9e1f04d6c08aecbe36cb560cdb91f2b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-tracking-number",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-cefr-level",
      "kind": "type",
      "title": "CefrLevel",
      "summary": "A language ability level, from `A1` to `C2`.",
      "tokens": 408,
      "hash": "sha256:31839c77228ff3098af0dc52a84ec48aacded35c502d15ccb6298f66d5db9835",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-language",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-certificate",
      "kind": "type",
      "title": "Certificate",
      "summary": "An X.509 certificate, the kind that secures a website.",
      "tokens": 4126,
      "hash": "sha256:a80322c0e38bc65d8cdce36fd7aa56a135c80d70e489c8de637ef51fa25345eb",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hash",
        "type-instant",
        "type-public-key",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-chat-message",
      "kind": "type",
      "title": "ChatMessage",
      "summary": "One message in a conversation with an AI model: who wrote it and what it says.",
      "tokens": 521,
      "hash": "sha256:d7bd14baf3c733b757db58ca92a9e464768d6366a257096b877f1ac23c52aa98",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-chat-role",
        "types-ai"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-chat-role",
      "kind": "type",
      "title": "ChatRole",
      "summary": "Who wrote a message in a conversation with a model: `system`, `user`, `assistant` or `tool`.",
      "tokens": 397,
      "hash": "sha256:075185e95bcd606040e25607247e92bc5171adfabe6136de2522f1a813417ce6",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-chat-message",
        "types-ai"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-cidr",
      "kind": "type",
      "title": "Cidr",
      "summary": "A range of IP addresses: `192.0.2.0/24`.",
      "tokens": 513,
      "hash": "sha256:a5eda0df16cac81cbb15c5fce3ea29a535652a7a04dfbee337a9713729a05fe4",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ip-address",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-circle",
      "kind": "type",
      "title": "Circle",
      "summary": "A centre and a distance around it.",
      "tokens": 640,
      "hash": "sha256:e74843bd6caf8bb846288b831bebbabfa9710ee0bde7b4e610feaff27c569370",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-length",
        "type-point",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-clothing-size",
      "kind": "type",
      "title": "ClothingSize",
      "summary": "A clothing size in its system, as the label writes it: `UK 10`, `US M`.",
      "tokens": 490,
      "hash": "sha256:d6c4949022124be4afd31b2b8a28df24152ded4c9c2b82da045c1841785b3638",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-clothing-size-system",
        "type-shoe-size",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-clothing-size-system",
      "kind": "type",
      "title": "ClothingSizeSystem",
      "summary": "Which system a clothing size is in: `UK`, `EU` or `US`.",
      "tokens": 406,
      "hash": "sha256:2ac385ad15f21f4e0f846fe486fc2373f81d3a84361ca6717544a33e055ab31e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-clothing-size",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-colour",
      "kind": "type",
      "title": "Colour",
      "summary": "A colour, written `#1e6fd9`, or `#1e6fd980` when it isn't fully opaque.",
      "tokens": 850,
      "hash": "sha256:c6a4c35769c18ae8a4dd35b15eb81e855d63e93a0873b395253a98865428f387",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-concentration",
      "kind": "type",
      "title": "Concentration",
      "summary": "A mass in a volume: `5mgL` or `1gL`.",
      "tokens": 657,
      "hash": "sha256:3abcc5e0f54c389bcfcc6649fecdd94cb927478780ed4085ec99ab5aadc2828c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-blood-glucose",
        "type-mass",
        "type-volume",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-container-image",
      "kind": "type",
      "title": "ContainerImage",
      "summary": "A container image's whole name: `docker.io/library/nginx:1.27`.",
      "tokens": 688,
      "hash": "sha256:957e4e8ba4270bacc4941ead245ddf164dd867bbe9e2b368ccee698ddd5b4eca",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-container-number",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-container-number",
      "kind": "type",
      "title": "ContainerNumber",
      "summary": "A shipping container's number, checked by its check digit: `CSQU3054383`.",
      "tokens": 486,
      "hash": "sha256:98b9331a972b65b19e2c93ce08b911b114494996ae2ff16aee17b09917bfbe0d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-container-image",
        "type-tracking-number",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-content-rating",
      "kind": "type",
      "title": "ContentRating",
      "summary": "An age rating and the body that gave it: `BBFC 12A`.",
      "tokens": 514,
      "hash": "sha256:039e9de1ee3938e425db6ddc0c209d0992efe09025d32a4585471d2663f87bd0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-content-rating-scheme",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-content-rating-scheme",
      "kind": "type",
      "title": "ContentRatingScheme",
      "summary": "A body that rates films or games for age: `BBFC`, `MPA`, `PEGI` or `ESRB`.",
      "tokens": 431,
      "hash": "sha256:5aaafb621c934f830468047017295c59ddb1458cd3c319abb0fce492341ad5d8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-content-rating",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-continent",
      "kind": "type",
      "title": "Continent",
      "summary": "A continent, as the United Nations groups the world: `europe`, `asia`.",
      "tokens": 445,
      "hash": "sha256:6140bace6b42c5ff291dea18ac007c1410e8c315105c30b12098680511b4472e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-cookie",
      "kind": "type",
      "title": "Cookie",
      "summary": "A cookie as a server sets it: `SID=31d4d96e; Path=/; Secure; HttpOnly`.",
      "tokens": 687,
      "hash": "sha256:ff3a520a13ce19118a4beb9fb5b14625b007e560d7deea89942e3df5c9abaa4f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-country",
      "kind": "type",
      "title": "Country",
      "summary": "A country, written as its two-letter code: `GB`.",
      "tokens": 1348,
      "hash": "sha256:08da2a4e28fa11e9189c84c752e8a7803a71034d1831c0ad1ada11b34f20c774",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country-subdivision",
        "type-nationality",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-country-subdivision",
      "kind": "type",
      "title": "CountrySubdivision",
      "summary": "A state, province or other part of a country, written as its code: `GB-ENG`, `US-CA`.",
      "tokens": 720,
      "hash": "sha256:823942a74ea8045f592fe6bf05103f333346ae1dff6f1a8f944f77d9ab0c48c6",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-crs",
      "kind": "type",
      "title": "Crs",
      "summary": "A coordinate reference system, by its EPSG code: `EPSG:27700`.",
      "tokens": 449,
      "hash": "sha256:a0c084a2c84779a7a30bbfe68fdf015c8abceaf821d59e973055c06a66cccb87",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-easting-northing",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-currency",
      "kind": "type",
      "title": "Currency",
      "summary": "A currency, by its three-letter code: `GBP`.",
      "tokens": 1324,
      "hash": "sha256:6f5cad91cfc676bdd917811e33e33b237a5db0b417921b3f71946db0a4b37d2b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-money",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-current",
      "kind": "type",
      "title": "Current",
      "summary": "An electric current: `500mA`.",
      "tokens": 608,
      "hash": "sha256:2bf72890b21509b2025d2619499f8eeff03d3a002e8c71ef785b301dc3f59da3",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-voltage",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-cve",
      "kind": "type",
      "title": "Cve",
      "summary": "A security vulnerability's id: `CVE-2021-44228`.",
      "tokens": 444,
      "hash": "sha256:43701fa0ef531ae8dc54a5a5a193656eee5d776183f62ec7ad163beb3f297139",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-data-size",
      "kind": "type",
      "title": "DataSize",
      "summary": "An amount of data: `5MB` or `4KiB`.",
      "tokens": 637,
      "hash": "sha256:d97041a4713b2ade5281fc81f771e35fdc1350831eb1cb5db581b0208743fee7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bitrate",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-date-range",
      "kind": "type",
      "title": "DateRange",
      "summary": "The days from one date to another, both included: `2026-10-01/2026-10-31`.",
      "tokens": 700,
      "hash": "sha256:e0f33e81bd41fa153d2d9fe19338bf5a70244be497cf00716fa755c65496fa55",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-date",
        "type-instant-range",
        "type-range",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-digest",
      "kind": "type",
      "title": "Digest",
      "summary": "A content digest, with its algorithm: `sha256:` and 64 hexadecimal digits.",
      "tokens": 755,
      "hash": "sha256:2f043c30b8ca752d2c7a241d191e2143c7878bb88c5869fb4444f48ed8ee6155",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hash",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-dimensions",
      "kind": "type",
      "title": "Dimensions",
      "summary": "A box's length, width and height.",
      "tokens": 683,
      "hash": "sha256:549e88f26dd655c19531fa542cf332c1a97bb86fd9916eff91dd6ede8f33406b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-image-dimensions",
        "type-length",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-discount",
      "kind": "type",
      "title": "Discount",
      "summary": "An amount off a price, or a percentage off it.",
      "tokens": 661,
      "hash": "sha256:60660bcd87566c37b447d986daae6c669e62273418af350bea370c1828cf8d74",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-money",
        "type-percentage",
        "type-price",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-doi",
      "kind": "type",
      "title": "Doi",
      "summary": "A digital object identifier, naming a paper or a dataset: `10.1038/nphys1170`.",
      "tokens": 542,
      "hash": "sha256:727454450060bfd5ec23fc1d6d0e5fd5407e54e79529aa2171ef60c88a16cde6",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-orcid",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-domain-name",
      "kind": "type",
      "title": "DomainName",
      "summary": "A domain name: `example.com`.",
      "tokens": 498,
      "hash": "sha256:d059212ae8c52f87dad6560b1b9a33930a4ba918a9d8cf48dc16763de31a378a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hostname",
        "type-url",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-dosage-instruction",
      "kind": "type",
      "title": "DosageInstruction",
      "summary": "How to take a medicine: a dose, a route and how often.",
      "tokens": 756,
      "hash": "sha256:b181004638296792a9660ed60ba4a79e5132aafcdbba579e77e063c042a43181",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-dose",
        "type-duration",
        "type-route-of-administration",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-dose",
      "kind": "type",
      "title": "Dose",
      "summary": "An amount of a medicine: `500 mg` or `5 ml`.",
      "tokens": 530,
      "hash": "sha256:6bf03e249cb5c15966fde21cc52e2a3ca888bf93c45465cbf82097309b5fbce0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-dosage-instruction",
        "type-mass",
        "type-volume",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-driving-licence-number",
      "kind": "type",
      "title": "DrivingLicenceNumber",
      "summary": "A driving licence's number, with the country that issued it.",
      "tokens": 558,
      "hash": "sha256:91f6c05a5a8f0708bfc994a531f944884f972a02750c205f633bd64bb737b3a1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-identity-document",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-duration",
      "kind": "type",
      "title": "Duration",
      "summary": "An exact length of time, to the millisecond: 90 minutes is `PT1H30M`.",
      "tokens": 485,
      "hash": "sha256:deebc07cd27980bb5f7d476b3a48a8ee6041eaf5dae1e1018978d5ae179346a8",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-period",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-ean13",
      "kind": "type",
      "title": "Ean13",
      "summary": "The 13-digit barcode number on most products outside North America.",
      "tokens": 463,
      "hash": "sha256:073f9c71d4e7eaab747b186b9551acbaa864dd60eb3d03afe58aad69ab411ba7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-isbn",
        "type-sku",
        "type-upc-a",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-easting-northing",
      "kind": "type",
      "title": "EastingNorthing",
      "summary": "Map coordinates on a projected grid: an easting, a northing and which grid.",
      "tokens": 546,
      "hash": "sha256:8480dd5f23b17f0c2069bbd0aaa5790acd8d70680a74fd07e6464557eb33dc9d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-crs",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-email",
      "kind": "type",
      "title": "Email",
      "summary": "An email address, checked as one.",
      "tokens": 466,
      "hash": "sha256:355042ee05181614f7b55b1c57ebbeb8e2cd88241ba9bf512851b1c124311e3b",
      "area": 2,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-email-with-name",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-email-with-name",
      "kind": "type",
      "title": "EmailWithName",
      "summary": "An email address with the name shown beside it: `Mary Somerville <mary@example.com>`.",
      "tokens": 674,
      "hash": "sha256:2b0dbe0d5c947d1c0130979e6c7a38ed608efaa9c7a671d5272ada774ca2004d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-email",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-embedding",
      "kind": "type",
      "title": "Embedding",
      "summary": "A list of numbers with the AI model that made it.",
      "tokens": 514,
      "hash": "sha256:37dfcd8cbb62f4834d36ee0dacf835b546f6f3ed8f795d51c3e385448328bd47",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-model-id",
        "type-vector",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-emoji",
      "kind": "type",
      "title": "Emoji",
      "summary": "One emoji: `😀`, `👍🏽`.",
      "tokens": 423,
      "hash": "sha256:126bd2b6d5ed2169d22dd4f30d7006155e9b1df4334aa0014f985e08215b8528",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-encrypted-value",
      "kind": "type",
      "title": "EncryptedValue",
      "summary": "A value sealed by `crypto.encrypt`.",
      "tokens": 706,
      "hash": "sha256:52bf1bf6c226d47b1a7a27a23288295b85d52c3e5c7addb5a5256963d4a42776",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hash",
        "type-password-hash",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-energy",
      "kind": "type",
      "title": "Energy",
      "summary": "An amount of energy: `2kWh` or `250kcal`.",
      "tokens": 625,
      "hash": "sha256:c78560cfa758881d7057e7e8074cb72de0e147ca2589aa11a62ac9d8f1ad85db",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-power",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-epc-rating",
      "kind": "type",
      "title": "EpcRating",
      "summary": "A UK energy certificate's band: `A` to `G`.",
      "tokens": 384,
      "hash": "sha256:194d9e3bc1b428bfc7c0f9c170a9b17687da1c89c0fac3b5cb8b3389cdef9218",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-exchange-rate",
      "kind": "type",
      "title": "ExchangeRate",
      "summary": "A rate between two currencies at a moment in time.",
      "tokens": 752,
      "hash": "sha256:5b062ec6b25e0eec7d297ae5c4430dbaf30390c225dab6ccec1371b4ba87f3d5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-currency",
        "type-instant",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-exif-orientation",
      "kind": "type",
      "title": "ExifOrientation",
      "summary": "How a stored photo must be turned to look upright, as a camera records it.",
      "tokens": 464,
      "hash": "sha256:ee1e1b432779d94694f93719d2b91d53cadfe093981299435796351f2784b416",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-family-name",
      "kind": "type",
      "title": "FamilyName",
      "summary": "A person's family name, one line as they write it.",
      "tokens": 487,
      "hash": "sha256:f171dfd603ce59bddde014315284ab84fff212cae1324fed8f582d579967e80a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-person-name",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-feature",
      "kind": "type",
      "title": "Feature",
      "summary": "A shape with your own data attached, in GeoJSON's form, as a map library takes one.",
      "tokens": 604,
      "hash": "sha256:03d52e07cab42cb8de39e9a27f487da87fc2c0dded2904c50af828b364c32051",
      "area": 20,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-feature-collection",
        "type-geometry",
        "type-point",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-feature-collection",
      "kind": "type",
      "title": "FeatureCollection",
      "summary": "A list of features, all with the same shape and properties types, as a map layer.",
      "tokens": 523,
      "hash": "sha256:260f3bf034b11e7fe9033a1448a64243665c960095975e83ed19f1e6bcd0fa70",
      "area": 20,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-feature",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-file-name",
      "kind": "type",
      "title": "FileName",
      "summary": "A file's name that every common file system takes: `report.pdf`.",
      "tokens": 486,
      "hash": "sha256:0be65295257cdaba3fdabbf66e8622d3e2bf5612cd1c36035a5c7af3c9273388",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-file-path",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-file-path",
      "kind": "type",
      "title": "FilePath",
      "summary": "A portable file path: `/var/lib/acme/uploads`, `reports/2026/october.csv`.",
      "tokens": 502,
      "hash": "sha256:fa5316ce853ca5d86063e92a4a15b438ef65045021feaa4fafbbaa5d3dc4eea1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-file-name",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-file-type",
      "kind": "type",
      "title": "FileType",
      "summary": "A file's media type: `image/png`, `application/pdf` and so on.",
      "tokens": 474,
      "hash": "sha256:efd4b12c9c9c77ec0a41abfb7ede781cca6cca40f2cd5e4b4aab607786431ae3",
      "area": 16,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-flight-number",
      "kind": "type",
      "title": "FlightNumber",
      "summary": "A flight's code: `BA123`.",
      "tokens": 529,
      "hash": "sha256:51d46ebbd27cc02069964748f7acfc6c640ecbef7b1041e16c7a7b12c82a70c9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-iata-airline",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-fraction",
      "kind": "type",
      "title": "Fraction",
      "summary": "An exact fraction as written: `3/4`.",
      "tokens": 472,
      "hash": "sha256:5a5ba79d244e28f9e5577ebd971e32ac4bb74e79ae412971250f66e8f2b85310",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-percentage",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-frame-rate",
      "kind": "type",
      "title": "FrameRate",
      "summary": "Frames a second, as an exact fraction: `25/1`, or `30000/1001` for 29.97.",
      "tokens": 487,
      "hash": "sha256:08fe890d905fc8d30baa44436f12c95391087dbb6d3d63a2eb5d378beb580d98",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-frequency",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-frequency",
      "kind": "type",
      "title": "Frequency",
      "summary": "How often something happens per second: `50Hz` or `2.4GHz`.",
      "tokens": 648,
      "hash": "sha256:ba056c69f437c2e260e15c68c0a7a5195f21b50a13c0e7914d5d610ff2fef157",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-frame-rate",
        "type-heart-rate",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-geohash",
      "kind": "type",
      "title": "Geohash",
      "summary": "A rectangle on Earth, as up to 12 letters and digits: `gcpvj0duq`.",
      "tokens": 462,
      "hash": "sha256:9c60aaac9ed5fddff3190cb8fdb4890a3792170e8566ef53304b922f720b5805",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-h3-cell",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-geometry",
      "kind": "type",
      "title": "Geometry",
      "summary": "Any one of the six shapes: a point, a path, an area or a set of any of those.",
      "tokens": 1307,
      "hash": "sha256:11cfb1a0da2ea76768595339e10d0a994e6ffcd4f775e1a791397e9ce662b44d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-line-string",
        "type-multi-line-string",
        "type-multi-point",
        "type-multi-polygon",
        "type-point",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-git-ref",
      "kind": "type",
      "title": "GitRef",
      "summary": "A git branch, tag, full ref or commit hash: `main`, `refs/tags/v1.2.0`.",
      "tokens": 475,
      "hash": "sha256:0e49ced3eaea7d33ff4c0feb44f7297424f63824ec6d9f4470a1c0b7119d0fea",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-package-url",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-given-name",
      "kind": "type",
      "title": "GivenName",
      "summary": "The name a person goes by, one line as they write it.",
      "tokens": 501,
      "hash": "sha256:c757d2d39f899b667ca186f46b2eb3b9cbd541d3808c647e24f52e6934a63dbc",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-person-name",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-h3-cell",
      "kind": "type",
      "title": "H3Cell",
      "summary": "A cell of Uber's H3 grid of hexagons, as 15 hexadecimal digits: `8928308280fffff`.",
      "tokens": 499,
      "hash": "sha256:a9366035de584084c850473a920a5a88fdb4a93c335def6cd1fd61b6ad88acd8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-geohash",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-hash",
      "kind": "type",
      "title": "Hash",
      "summary": "A SHA-256 digest: the 32 bytes `hash.sha256` gives.",
      "tokens": 543,
      "hash": "sha256:74e39c018e9f3b13736dbf15fd90e8c034aea35881d695e6b8ebec3c12eae8db",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hmac",
        "type-password-hash",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-heart-rate",
      "kind": "type",
      "title": "HeartRate",
      "summary": "A heart rate: `72bpm`.",
      "tokens": 673,
      "hash": "sha256:630956a39e11087297711a3018ddaa525335a0e01e1e777982cae8c2e345cb38",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-frequency",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-hmac",
      "kind": "type",
      "title": "Hmac",
      "summary": "An HMAC-SHA-256 tag, such as a webhook's signature.",
      "tokens": 606,
      "hash": "sha256:47b6e9f046a2636280cdf630a06642b5f474272b4a2f02170384bfc2ff2ef889",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hash",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-hostname",
      "kind": "type",
      "title": "Hostname",
      "summary": "A host: a domain name or an IP address.",
      "tokens": 470,
      "hash": "sha256:417136d22b4884c32ae0e0f21838f41586a8727e9bad10e95f0305a734ab2dcb",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-domain-name",
        "type-web-origin",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-hs-code",
      "kind": "type",
      "title": "HsCode",
      "summary": "A customs code for a kind of goods: six to ten digits, such as `090111` for coffee.",
      "tokens": 418,
      "hash": "sha256:558a32557b845a6e347585cd861776a0e57e47edcd2f555647ff45e67400fa16",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-sku",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-html",
      "kind": "type",
      "title": "Html",
      "summary": "HTML that's always safe to put in a page or an email.",
      "tokens": 821,
      "hash": "sha256:440373f2f1423ff7b4a3836b794a4db2c1453a4c5309070f81b574f2209ae1ab",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-markdown",
        "type-rich-text",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-http-header-name",
      "kind": "type",
      "title": "HttpHeaderName",
      "summary": "An HTTP header's name, in lower case: `content-type`.",
      "tokens": 447,
      "hash": "sha256:4dc62a73df891d0471ffe565dfe3281bbde47dbc01aacd7d5f750ed27c29a03b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-http-method",
      "kind": "type",
      "title": "HttpMethod",
      "summary": "An HTTP method a route is written with: `GET`, `POST`, `PUT`, `PATCH` or `DELETE`.",
      "tokens": 434,
      "hash": "sha256:5c4d2066505f5fc331d1b1d70183cd49d21a9a83630ad9002f0f8417478cdbb2",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-http-status",
      "kind": "type",
      "title": "HttpStatus",
      "summary": "An HTTP response's status code, from 100 to 599.",
      "tokens": 394,
      "hash": "sha256:92db967d95c0da58710658561688f028b0b4ca0703c44c9994f4ca1bcf62d476",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-iata-airline",
      "kind": "type",
      "title": "IataAirline",
      "summary": "An airline's two-character code: `BA`, `U2`.",
      "tokens": 386,
      "hash": "sha256:addc780110550c0678ca98a4b3be68e14a92efd8d3999255976a4c5a34051299",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-flight-number",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-iata-airport",
      "kind": "type",
      "title": "IataAirport",
      "summary": "An airport's three-letter code, as tickets print it: `LHR`.",
      "tokens": 408,
      "hash": "sha256:9167010db38540da57ce013e6bb85d291e038388294992737a11d94f8807f771",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-icao-airport",
        "type-un-locode",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-iban",
      "kind": "type",
      "title": "Iban",
      "summary": "An international bank account number, with its check digits: `GB29NWBK60161331926819`.",
      "tokens": 603,
      "hash": "sha256:2a39f52003dff97ad843897ca659fa92919e7c44170bc12adbafe17f6eec3f8a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bank-account",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-icao-airport",
      "kind": "type",
      "title": "IcaoAirport",
      "summary": "An airport's four-letter code, as air traffic control uses it: `EGLL`.",
      "tokens": 394,
      "hash": "sha256:8e87f9f0d32e91e2a520a60154b88c850ee418d0ba0b8cd18111e0782a81393c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-iata-airport",
        "types-travel"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-icd10-code",
      "kind": "type",
      "title": "Icd10Code",
      "summary": "A diagnosis's ICD-10 code, with its dot: `I21.9`.",
      "tokens": 450,
      "hash": "sha256:2cfd82411096acd5569ee1a9e10cb3ff893dc52aa0db26c6d68f4885ab97395b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-snomed-concept",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-idempotency-key",
      "kind": "type",
      "title": "IdempotencyKey",
      "summary": "A key a client sends so that a retried request isn't applied twice.",
      "tokens": 479,
      "hash": "sha256:333581a1e6ff1db705957606ae11a1af9c26b495b0a437ab66f7379f72d8c7f5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uuid",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-identity-document",
      "kind": "type",
      "title": "IdentityDocument",
      "summary": "An identity document: its kind, the country, its number and when it expires.",
      "tokens": 750,
      "hash": "sha256:4a8bd07c617d342b3794dea1062aec958d83870dc70f4c5063fd521cd94781f7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-date",
        "type-country",
        "type-driving-licence-number",
        "type-identity-document-kind",
        "type-passport-number",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-identity-document-kind",
      "kind": "type",
      "title": "IdentityDocumentKind",
      "summary": "What kind of identity document one is: `passport`, `identity_card`, `driving_licence` or `residence_permit`.",
      "tokens": 449,
      "hash": "sha256:4892ba5da35b7ed41d7315d5e07a4be161725a16eb07baba367a45625f866825",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-identity-document",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-illuminance",
      "kind": "type",
      "title": "Illuminance",
      "summary": "How much light falls on a surface: `500lx`.",
      "tokens": 611,
      "hash": "sha256:93d1e7e43dffe88249f3907b621594b21aa1d69dcacd61a03628669319d5f9f0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-image-dimensions",
      "kind": "type",
      "title": "ImageDimensions",
      "summary": "An image's width and height in pixels: `1920x1080`.",
      "tokens": 594,
      "hash": "sha256:39c814365a2452cf7f8ce806d26339f6a44bb5d6c09cc4880a0e3d95ef7158e0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-dimensions",
        "type-video-resolution",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-imei",
      "kind": "type",
      "title": "Imei",
      "summary": "A mobile device's 15-digit IMEI.",
      "tokens": 463,
      "hash": "sha256:d7cc7b83ee3d18fcce93d9d36be067a1c4f93de4f660f9d82eb32b21c98c5015",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-push-token",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-incoterm",
      "kind": "type",
      "title": "Incoterm",
      "summary": "A rule saying who pays for what in international shipping: `FOB`, `DDP` and so on.",
      "tokens": 504,
      "hash": "sha256:1d5345160dd737825cbed3f7198390b5b0f905d4d5a1380321eb3ced8505d7b8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-insets",
      "kind": "type",
      "title": "Insets",
      "summary": "Space inside each edge, written in CSS's order: `8 16 8 16`.",
      "tokens": 522,
      "hash": "sha256:7e8847cfea8a54a452b9beb86c059e8094521ae19b3fd99082c7c99319b7464e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-rect",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-instant",
      "kind": "type",
      "title": "Instant",
      "summary": "One moment in time, the same everywhere in the world: `2026-10-25T09:30:00Z`.",
      "tokens": 878,
      "hash": "sha256:912e07754140950f377f244b3473e0be89873c029c1adbd4784dc6b3aba96dfa",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-date",
        "type-duration",
        "type-local-date-time",
        "type-zoned-time",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-instant-range",
      "kind": "type",
      "title": "InstantRange",
      "summary": "The moments from a start up to, but not including, an end.",
      "tokens": 845,
      "hash": "sha256:d7a0266a872443211155e74a4f2a73b16c6a9f5e74ad91a96c1d48cba8d5dcbf",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-date-range",
        "type-instant",
        "type-zone",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-interest-rate",
      "kind": "type",
      "title": "InterestRate",
      "summary": "A yearly rate of interest, and the basis it is quoted on: `5.5% APR`.",
      "tokens": 489,
      "hash": "sha256:32192831f4df0e8e7b67d9516c9aba65a0228858572d9daef01ac05c1350aa1b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-interest-rate-basis",
        "type-percentage",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-interest-rate-basis",
      "kind": "type",
      "title": "InterestRateBasis",
      "summary": "What an interest rate is quoted as: `aer`, `apr` or `flat`.",
      "tokens": 413,
      "hash": "sha256:e70b1e556c8c46827604f643b16e0b2cae820e1304d03a97a7a41a2c82be6026",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-interest-rate",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-invoice-number",
      "kind": "type",
      "title": "InvoiceNumber",
      "summary": "An invoice's number: up to 200 characters, as your own system writes it.",
      "tokens": 442,
      "hash": "sha256:5dd506880e250910b840e5d9baab6d265756aab108bc5b021d253d79d217e29a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-payment-reference",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-ip-address",
      "kind": "type",
      "title": "IpAddress",
      "summary": "An IPv4 or IPv6 address: `192.0.2.1`, `2001:db8::1`.",
      "tokens": 465,
      "hash": "sha256:5b0bff226cdb83f8b5efa06d46d5c6bc8c01dcfadf6da40cdef85e0c517adbbe",
      "area": 2,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-cidr",
        "type-hostname",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-isbn",
      "kind": "type",
      "title": "Isbn",
      "summary": "A book's number, in its 13 digits with no hyphens.",
      "tokens": 432,
      "hash": "sha256:578a670c4d2cb032a18450a09a670a517d5f5fbfc73f9531b0d81caa2c595402",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ean13",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-isin",
      "kind": "type",
      "title": "Isin",
      "summary": "A securities identification number, naming a share or a bond: `US0378331005`.",
      "tokens": 448,
      "hash": "sha256:4507740182fa8d54e607a732ff4b0797275ead8d0a62cf58d5dc088d22528e19",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-lei",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-iso-week",
      "kind": "type",
      "title": "IsoWeek",
      "summary": "A numbered week of a year, as ISO 8601 counts them: `2026-W43`.",
      "tokens": 499,
      "hash": "sha256:430fe807b6b86c4889f347e53f19de90ca3150e840c7e5b70fbe6792ba41c4b5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-date-range",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-json-pointer",
      "kind": "type",
      "title": "JsonPointer",
      "summary": "A pointer into a JSON document: `/foo/0`.",
      "tokens": 431,
      "hash": "sha256:8445dbdb21a5bbb376be7480fa0e10cd7758c61189c0dec6f363abd93d71380f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-jurisdiction",
      "kind": "type",
      "title": "Jurisdiction",
      "summary": "Where a law applies: a country, or a part of one such as England.",
      "tokens": 557,
      "hash": "sha256:941c726b569525830f37c471602fad384008e6ff492a37fc6e83d898daf9fc1f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-country-subdivision",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-jwk",
      "kind": "type",
      "title": "Jwk",
      "summary": "A public key that a token is checked against, as an identity provider publishes it.",
      "tokens": 1593,
      "hash": "sha256:270a4f70abb82ddc6b884bf89960e1128c375c324ad1b2f44f3caee725e31921",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-public-key",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-jwt",
      "kind": "type",
      "title": "Jwt",
      "summary": "A signed token: three parts joined by `.`.",
      "tokens": 659,
      "hash": "sha256:aceb0f1d891174c7ce1c4608a6ec125755caa204d362bc525e51eebd3ce4ff64",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-jwt-claims",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-jwt-claims",
      "kind": "type",
      "title": "JwtClaims",
      "summary": "What a checked token says: who issued it, who it is about and when it expires.",
      "tokens": 1024,
      "hash": "sha256:b911c19cad4412e330d43737acf6e880cf134179533a7e51a275a72e416e1949",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-instant",
        "type-jwt",
        "type-oidc-claims",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-language",
      "kind": "type",
      "title": "Language",
      "summary": "A language, written as its two-letter code: `en`.",
      "tokens": 740,
      "hash": "sha256:aa5f8aa2890e2a0a8820a5c6f6d6c877ed9e000ea2e89e484a3dca75bd98dac0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-locale",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-latitude",
      "kind": "type",
      "title": "Latitude",
      "summary": "Degrees north of the equator, from -90 to 90: `51.5072`.",
      "tokens": 444,
      "hash": "sha256:a3c651b0733718365c4f0d43c047e499739ed11487e0b25314d6a72184375f28",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-lawful-basis",
      "kind": "type",
      "title": "LawfulBasis",
      "summary": "Your lawful reason for using personal data, under GDPR: `consent`, `legitimate_interests` and so on.",
      "tokens": 458,
      "hash": "sha256:34dcefebc2852f38e94471277f18fb33c3d8a9a5b93d440925f3f5e1d0f39fcc",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-lei",
      "kind": "type",
      "title": "Lei",
      "summary": "A Legal Entity Identifier, the global ID of a company in financial reporting.",
      "tokens": 477,
      "hash": "sha256:7e57492a9220eafc0a02ee0ea62804b9bea47bdad260f55d1c59ff13aaa50ae8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uk-company-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-length",
      "kind": "type",
      "title": "Length",
      "summary": "A length or distance: `5km`, `45cm`, `3inch` or `2metre`.",
      "tokens": 835,
      "hash": "sha256:b14fa646ff1c90f7ea687ffd39fe5c2a6606e05f92bd6187b76b035c7049f2f0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-area",
        "type-dimensions",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-line-string",
      "kind": "type",
      "title": "LineString",
      "summary": "A path of two points or more, in order.",
      "tokens": 932,
      "hash": "sha256:4e6905c62418a5c7b3d64ba42d6bc67ef97c5e36bcc20dc096c34d79d9847c43",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-length",
        "type-multi-point",
        "type-point",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-local-date-time",
      "kind": "type",
      "title": "LocalDateTime",
      "summary": "A date and a clock time with no zone: `2026-10-25T09:30:00`.",
      "tokens": 537,
      "hash": "sha256:705899d441b880b3dd98835e3145fa51978f175ecfed7eb39c2ebd975271f902",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-date",
        "type-instant",
        "type-local-time",
        "type-zone",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-locale",
      "kind": "type",
      "title": "Locale",
      "summary": "A language and region together, which decides how dates and numbers look: `en-GB`.",
      "tokens": 990,
      "hash": "sha256:0d8ed64e793c4b983ca72ab632049678fd81252783fc2d0bbeb1a011a9886866",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-language",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-localised-text",
      "kind": "type",
      "title": "LocalisedText",
      "summary": "The same text in several languages: `{\"en-GB\": \"Rye loaf\", \"fr-FR\": \"Pain de seigle\"}`.",
      "tokens": 578,
      "hash": "sha256:209b6145a0218f37f7458d522c763c2bd6111554a9aba2394d23dcc66425518c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-locale",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-local-time",
      "kind": "type",
      "title": "LocalTime",
      "summary": "A time on the clock, with no date or zone: `09:30:00`.",
      "tokens": 469,
      "hash": "sha256:446ae51402e8f39be9ed364966de193ede656e7b7d63d329917071ed269a691c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-instant",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-log-level",
      "kind": "type",
      "title": "LogLevel",
      "summary": "How severe a log record is: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR` or `FATAL`.",
      "tokens": 427,
      "hash": "sha256:26a9164cd93662f811394a530e2cdbd9bc1144b2d02cdded8c8d1273f23751f5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-longitude",
      "kind": "type",
      "title": "Longitude",
      "summary": "Degrees east of the prime meridian, from -180 to 180: `-0.1276`.",
      "tokens": 438,
      "hash": "sha256:3cffe2efd95a873af25ed9342bcfd336167617ef17c2f42a732921311897d6b7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-lot-number",
      "kind": "type",
      "title": "LotNumber",
      "summary": "A manufacturing batch: up to 20 characters, such as `ABC123`.",
      "tokens": 435,
      "hash": "sha256:d8638c760b08ca3b7924ca80b997ed7008f93d800add1322b1e01f2930acb238",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-serial-number",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-mac-address",
      "kind": "type",
      "title": "MacAddress",
      "summary": "A network card's hardware address: `AC-DE-48-00-00-80`.",
      "tokens": 474,
      "hash": "sha256:a454cff42dc4038657e8a82c770d1966f91d4c780f80196e723859b819b9c601",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-imei",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-map-tile",
      "kind": "type",
      "title": "MapTile",
      "summary": "One square of a web map at one zoom level: `10/511/340`.",
      "tokens": 482,
      "hash": "sha256:b73afd5f82b131cbd199daaefbab71e66494b9870ec742aa053cf085fd238961",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-markdown",
      "kind": "type",
      "title": "Markdown",
      "summary": "Text written in Markdown, the plain-text format for bold, headings and lists.",
      "tokens": 577,
      "hash": "sha256:cd0f71b28d58ff511b944cfa98f4d9e1a141f7f513121fb63c7443675eb9f466",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-html",
        "type-rich-text",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-masked-card-number",
      "kind": "type",
      "title": "MaskedCardNumber",
      "summary": "What you may keep of a card once its number is gone: the brand and the last four digits.",
      "tokens": 669,
      "hash": "sha256:692aa098e5f9fd079ed3f00f7d99b26e8b5d7692a80ec582641b24cbe952f3dc",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-card-brand",
        "type-payment-card-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-mass",
      "kind": "type",
      "title": "Mass",
      "summary": "A mass or weight: `250g`, `2.5kg` or `500mcg`.",
      "tokens": 638,
      "hash": "sha256:7d5987f57f1922eb3c368ec6c7ab3b2d50206f13c1c54f4db72038af09fe75bf",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-dosage-instruction",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-model-id",
      "kind": "type",
      "title": "ModelId",
      "summary": "An AI model by its provider and name: `openai/gpt-4o`.",
      "tokens": 541,
      "hash": "sha256:9935e7a4ad6c13168e0754279d0bccc8d7cdaec7b9a5ba1477e50e9e59b8734f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-embedding",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-money",
      "kind": "type",
      "title": "Money",
      "summary": "An amount of money: a whole number of a currency's smallest units, and the currency.",
      "tokens": 1102,
      "hash": "sha256:26b0167b531d9297e44b5aebf71f7eba08572e8dc0248340162cf25bf0f1af1d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-price",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-month",
      "kind": "type",
      "title": "Month",
      "summary": "A month of the year: `january` to `december`.",
      "tokens": 418,
      "hash": "sha256:96848a4f102c62952a515f8e64fd8d88c11e6c110c192ba2649ab8350a883f50",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-year-month",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-mpan",
      "kind": "type",
      "title": "Mpan",
      "summary": "A UK electricity supply's 13-digit number.",
      "tokens": 458,
      "hash": "sha256:27cabe29bed1e48da7ac8f12a1bec4af161f35ca8ee7843171b94dbc7ac58ed7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-mprn",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-mprn",
      "kind": "type",
      "title": "Mprn",
      "summary": "A UK gas supply's number: 6 to 10 digits.",
      "tokens": 422,
      "hash": "sha256:14a6a7d158aed258cf60eee7f05c91455a619010e220954d1d772b16f6357045",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-mpan",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-multi-line-string",
      "kind": "type",
      "title": "MultiLineString",
      "summary": "Several paths, at least one, that belong together.",
      "tokens": 901,
      "hash": "sha256:c7f0d848b6ce851a4cfacfd102af67489153f0cc165bca11c855e657bfd5d775",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-line-string",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-multi-point",
      "kind": "type",
      "title": "MultiPoint",
      "summary": "A set of points, at least one, that belong together.",
      "tokens": 847,
      "hash": "sha256:478b11c5b7ead82b738ec1dc47942a2c8604e2536f36154ca047fe7f9c5d2c5e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-feature-collection",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-multi-polygon",
      "kind": "type",
      "title": "MultiPolygon",
      "summary": "Several areas, at least one, that belong together.",
      "tokens": 1020,
      "hash": "sha256:d1bfe49e3e06f04e0cf35243f4c4ada691129dd812ab01261c189bc916a2bd3f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-polygon",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-nationality",
      "kind": "type",
      "title": "Nationality",
      "summary": "A person's nationality, named by country code: `GB`.",
      "tokens": 1301,
      "hash": "sha256:8741b59c7c1bd06551836198fe1bc29c946c8173a2178624584df795799ffdd9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-network-port",
      "kind": "type",
      "title": "NetworkPort",
      "summary": "A TCP or UDP port, from 1 to 65535.",
      "tokens": 385,
      "hash": "sha256:280f522521a2e34e1acfcb9d3909590476a6bcf9b1c8a28cac7c1a20683d3a92",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-nhs-number",
      "kind": "type",
      "title": "NhsNumber",
      "summary": "An NHS number, the patient identifier in England, Wales and the Isle of Man: ten digits.",
      "tokens": 494,
      "hash": "sha256:a73a88d918f7c1c8292a2244c49c7abf3a28257ec0871e3ec375eef36c2c00f8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-icd10-code",
        "type-snomed-concept",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-o-auth-scope",
      "kind": "type",
      "title": "OAuthScope",
      "summary": "One permission an OAuth token grants: `todos:read`.",
      "tokens": 483,
      "hash": "sha256:7e47bee64f4b2bac16ccdf148b9b5111540f9192dad3c15c158d728676821417",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-oidc-claims",
      "kind": "type",
      "title": "OidcClaims",
      "summary": "Who an identity provider says signed in.",
      "tokens": 866,
      "hash": "sha256:878f1176fff3c4f1148b653fd4f8f1c664b980ce0cfc064a3417b56c6e521dc9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-email",
        "type-family-name",
        "type-given-name",
        "type-jwt-claims",
        "type-phone-number",
        "type-url",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-one-time-code",
      "kind": "type",
      "title": "OneTimeCode",
      "summary": "A code a person types from an app, a text or an email: six to eight digits.",
      "tokens": 388,
      "hash": "sha256:bb4e46141d1ed20eb067ed9735794037fedaa9339d77ba73a8550003217717d5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-totp-secret",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-opening-hours",
      "kind": "type",
      "title": "OpeningHours",
      "summary": "When a place is open each week, and the days that differ.",
      "tokens": 669,
      "hash": "sha256:aac72ebbd583a5cd069933fc1d274032f68b602d9ae57db5b18a65740b3482e9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-recurrence-rule",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-orcid",
      "kind": "type",
      "title": "Orcid",
      "summary": "A researcher's ORCID iD: `0000-0002-1825-0097`.",
      "tokens": 505,
      "hash": "sha256:22310fd15dce0e5f7ea08f2c231e5edda6cecfb2c1dee51b2d348d6d3370e498",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-doi",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-package-url",
      "kind": "type",
      "title": "PackageUrl",
      "summary": "A package's address, the same across package managers: `pkg:npm/left-pad@1.3.0`.",
      "tokens": 701,
      "hash": "sha256:31b68e2062c80704c34824a6a245efa7cbfe50202469ace6fb387a9f8dae7821",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-semantic-version",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-paper-size",
      "kind": "type",
      "title": "PaperSize",
      "summary": "A paper size: `A4`, `Letter` and so on.",
      "tokens": 520,
      "hash": "sha256:76373640d1cb6fd5fe3376678e35cc89fb73fdc7e3113911a09f8e68a12eb4c3",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-passport-number",
      "kind": "type",
      "title": "PassportNumber",
      "summary": "A passport's number, with the country that issued it.",
      "tokens": 543,
      "hash": "sha256:ab8aa6fc01b7df483b67895147dbe6eecf2ffb06fab683892bd909496bf26b4c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-identity-document",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-password",
      "kind": "type",
      "title": "Password",
      "summary": "A password as a person types it: 8 to 256 characters.",
      "tokens": 520,
      "hash": "sha256:9ca0dd0d92345bd7ce1db394c61ee1cee24860bee1c3d3f5fe3c35a31e35037a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-password-hash",
        "type-secret-text",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-password-check",
      "kind": "type",
      "title": "PasswordCheck",
      "summary": "What checking a password says: `wrong`, `correct` or `correct_outdated`.",
      "tokens": 500,
      "hash": "sha256:509b584b3b2117efdd9df806790049e13f216bf7870ce70a7c7ac4182d64d060",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-password-hash",
      "kind": "type",
      "title": "PasswordHash",
      "summary": "A password's hash, ready to store.",
      "tokens": 834,
      "hash": "sha256:009ea13a569834afa2e04fa5756544b2ba8b4e8d2ebacae352ad112abd90d8fc",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-hash",
        "type-password",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-password-policy",
      "kind": "type",
      "title": "PasswordPolicy",
      "summary": "The rules a password must meet: how short, how long, and whether to check breached lists.",
      "tokens": 537,
      "hash": "sha256:770f9802fc5f1e6d6fabb0a886638bcf54b19545a19ff2339c9e5eb2b17bf587",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-payment-card-number",
      "kind": "type",
      "title": "PaymentCardNumber",
      "summary": "A payment card's full number, checked by its check digit.",
      "tokens": 607,
      "hash": "sha256:48bbe040ff701559ef8e128d0fec1b48f67a327c22d402cf87822d118b639d00",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-masked-card-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-payment-reference",
      "kind": "type",
      "title": "PaymentReference",
      "summary": "The reference a payer sees on a UK bank payment: up to 18 characters.",
      "tokens": 464,
      "hash": "sha256:171abad497e3b8b14f2039af4651200779907ac1db1610ceeecb45baf6628509",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-invoice-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-percentage",
      "kind": "type",
      "title": "Percentage",
      "summary": "A share of something, written `20%`, where `20%` is the same as 0.20.",
      "tokens": 718,
      "hash": "sha256:920632ad73827b7fecb377d2d1fd7680d89984bd916c1899e9a4b4e0a33a9b59",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ratio",
        "type-tax-rate",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-person-name",
      "kind": "type",
      "title": "PersonName",
      "summary": "A person's name: a given name and, if they have one, a family name.",
      "tokens": 679,
      "hash": "sha256:58a0ecfafc24384b207c48a50d36141ec518133ba0efde44d51cd11111690c5b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-family-name",
        "type-given-name",
        "type-username",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-phone-extension",
      "kind": "type",
      "title": "PhoneExtension",
      "summary": "An internal extension dialled after a phone number: up to 20 digits.",
      "tokens": 452,
      "hash": "sha256:87e3567c98c72616eadc5bfa0a6a37d9a9aa37b917ec82fb2a7beb7e51be228c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-phone-number",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-phone-number",
      "kind": "type",
      "title": "PhoneNumber",
      "summary": "A phone number with its country code, written `+447400123456`.",
      "tokens": 617,
      "hash": "sha256:de65e71d1ec3533e423c3df34de2fc4b238368c3a7fbaccee4e5996cd9968e2d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calling-code",
        "type-phone-extension",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-point",
      "kind": "type",
      "title": "Point",
      "summary": "A position on Earth: its latitude, its longitude and, if you know it, its height.",
      "tokens": 1266,
      "hash": "sha256:2a0cd6403343cf7d5c4c4c80cbf8fde9c5ddc3e58a17151cc9be4c55f52c238f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-latitude",
        "type-length",
        "type-line-string",
        "type-longitude",
        "type-polygon",
        "type-postal-address",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-polygon",
      "kind": "type",
      "title": "Polygon",
      "summary": "An area on a map, with any holes it has.",
      "tokens": 1178,
      "hash": "sha256:1369296630c3ac5b9aa5f5c98947ca8a5ae3206ab319fe3ecfb7df3857085513",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bounding-box",
        "type-circle",
        "type-point",
        "types-geospatial"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-postal-address",
      "kind": "type",
      "title": "PostalAddress",
      "summary": "A postal address in any country.",
      "tokens": 862,
      "hash": "sha256:377ca12a078cab5af83a225d85842a5b3ce26247641be9ed29a76daa48a52888",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-point",
        "type-postal-code",
        "type-uprn",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-postal-code",
      "kind": "type",
      "title": "PostalCode",
      "summary": "A postal code or ZIP code, such as `SW1A 1AA`.",
      "tokens": 518,
      "hash": "sha256:12895842946f88ba2479c57dccfe1a355eb22334fe9987e12505989c9bba3ff5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-postal-address",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-power",
      "kind": "type",
      "title": "Power",
      "summary": "A rate of energy use: `3kW`.",
      "tokens": 614,
      "hash": "sha256:a8ba36934cf32a189f772d450768901d7e58ad504e88e225b4fa27fa49675895",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-energy",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-pressure",
      "kind": "type",
      "title": "Pressure",
      "summary": "A pressure: `1013hPa`.",
      "tokens": 629,
      "hash": "sha256:1e809f6dd89dfb4719e23e4d7fa82434428cefcf0f6d2be6efcbd941b6af505e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-blood-pressure",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-price",
      "kind": "type",
      "title": "Price",
      "summary": "An amount, and whether it includes tax.",
      "tokens": 688,
      "hash": "sha256:5922fc68615b353929e98262ff27e13606349f70d5db2cfbd0c6273d601035e1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-money",
        "type-unit-price",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-problem-details",
      "kind": "type",
      "title": "ProblemDetails",
      "summary": "An HTTP API's error body, as other APIs often send one.",
      "tokens": 658,
      "hash": "sha256:da2fea0c504acc59b5b70143e667c804158c9a2fd2dbf6be9eca54a158e1051b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-http-status",
        "type-url",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-public-key",
      "kind": "type",
      "title": "PublicKey",
      "summary": "An Ed25519 public key: 32 bytes as Base64url.",
      "tokens": 614,
      "hash": "sha256:daad593e2f163572a4b49650d17e143c68e9c6e8e8eb6591aaaade1717c97c67",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-jwk",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-push-token",
      "kind": "type",
      "title": "PushToken",
      "summary": "The address of a device for push notifications, from Apple's or Google's service.",
      "tokens": 568,
      "hash": "sha256:5b30e1b741d8f86f71db770e9341c51eea68e40ea7af6168e0a35c4e3f5d55b9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-imei",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-quarter",
      "kind": "type",
      "title": "Quarter",
      "summary": "A quarter of a calendar year: `2026-Q4`.",
      "tokens": 429,
      "hash": "sha256:eac6551592c55cbf34f16e9ef94a9802427a311be355f577bdcbb651aaa3a011",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-range",
      "kind": "type",
      "title": "Range",
      "summary": "The values of one ordered type from a start up to, but not including, an end.",
      "tokens": 750,
      "hash": "sha256:174ce81eb207d4492fdb491ce1e4460feabfabe60409004154c03f8201cea76e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-date-range",
        "type-instant-range",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rating",
      "kind": "type",
      "title": "Rating",
      "summary": "A rating on its own scale: `4.5/5`.",
      "tokens": 539,
      "hash": "sha256:46b9317137d658ef316d584eaa0ba8ca0eef3a58fed7dcc30cb755228fefcdca",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-percentage",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-ratio",
      "kind": "type",
      "title": "Ratio",
      "summary": "One number to another, as written: `16:9`.",
      "tokens": 471,
      "hash": "sha256:4c0d2f6bad12ada0200cbf99804dbd19360977e0cf7571c3f86ca93b20631503",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-aspect-ratio",
        "type-percentage",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rect",
      "kind": "type",
      "title": "Rect",
      "summary": "A rectangle by its top-left corner and its size, written like an SVG `viewBox`: `0 0 300 200`.",
      "tokens": 554,
      "hash": "sha256:b5dadf57b19e2617ad3e9fe477ccdb70318fd333eab0feb1836ded1fd189fb5e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-insets",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-recurrence-rule",
      "kind": "type",
      "title": "RecurrenceRule",
      "summary": "When something repeats, in the calendar standard's own text.",
      "tokens": 903,
      "hash": "sha256:0f02890af9a75767fbafb85fa2a725272014ce45fac43698eb2224df6b12bbda",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-opening-hours",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-regular-expression",
      "kind": "type",
      "title": "RegularExpression",
      "summary": "A pattern for matching text: `[A-Z]{2}[0-9]{2}`.",
      "tokens": 479,
      "hash": "sha256:2378d8267d74e25359a4cf60e90c7b22944f4aedc87b8a92222dfbb813df6a6b",
      "area": 2,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-relative-url",
      "kind": "type",
      "title": "RelativeUrl",
      "summary": "An address relative to another: `../images/logo.png`, `?page=2`.",
      "tokens": 604,
      "hash": "sha256:1a56f678eab81e43586ed6e9f2bb08eaeb72bc81b44c8b0a6641df4641194914",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-url",
        "type-url-path",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rich-text",
      "kind": "type",
      "title": "RichText",
      "summary": "A structured document: a list of paragraphs, headings, quotes and list items.",
      "tokens": 681,
      "hash": "sha256:c389dcfd9f2e6e557134061593e0f81e1dfcd4552551168e9565e770fc4e4ef5",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-html",
        "type-markdown",
        "type-rich-text-block",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rich-text-block",
      "kind": "type",
      "title": "RichTextBlock",
      "summary": "One block of a `RichText`: a paragraph, a heading, a quote or a list item.",
      "tokens": 712,
      "hash": "sha256:f81ce580eec8e417110d3b6711c308bdfd299d63d9163935d5ff36c625b4f8d8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-rich-text",
        "type-rich-text-span",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rich-text-mark",
      "kind": "type",
      "title": "RichTextMark",
      "summary": "A mark on some text: `strong`, `emphasis`, `code`, `underline` or `strike_through`.",
      "tokens": 424,
      "hash": "sha256:6c00f4c251419f5d3beb3b6ab6a703d090dabd3ff85c8facee64e064d3423048",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-rich-text-span",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-rich-text-span",
      "kind": "type",
      "title": "RichTextSpan",
      "summary": "A run of text in a block, with its marks and any link.",
      "tokens": 599,
      "hash": "sha256:5054e7a9cd6db0933de0c54fa28b9c0ef7a7c4fce67c4ae42b14136a551b39ae",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-rich-text-block",
        "type-rich-text-mark",
        "types-text-formats"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-route-of-administration",
      "kind": "type",
      "title": "RouteOfAdministration",
      "summary": "How a medicine is taken: `oral`, `intravenous` and so on.",
      "tokens": 538,
      "hash": "sha256:f7910ba85106414446cc333e3b5d9245d990d9b7997efc25a786b52e2575fa5b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-dosage-instruction",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-secret-text",
      "kind": "type",
      "title": "SecretText",
      "summary": "Any other secret text, up to 8,192 characters.",
      "tokens": 378,
      "hash": "sha256:0b21ea236aa257b5ae2598fc7e94bd8d97a37a545c9fd61e619ad8466ee9158b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-api-key",
        "type-password",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-semantic-version",
      "kind": "type",
      "title": "SemanticVersion",
      "summary": "A software version: `1.2.3-alpha.1+build.5`.",
      "tokens": 772,
      "hash": "sha256:bd73cd8755badf3209b506179402279e0ac4385c56f4ca7f4dddd18c4109c53d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-version-range",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-serial-number",
      "kind": "type",
      "title": "SerialNumber",
      "summary": "One item's own serial number: up to 20 characters, such as `SN-0042a`.",
      "tokens": 458,
      "hash": "sha256:026adb56d4581a785634d89ff91d1ab1d95d65b5b21e1d7b7c153591ae05ec95",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-lot-number",
        "type-sku",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-shoe-size",
      "kind": "type",
      "title": "ShoeSize",
      "summary": "A shoe size in its system, as the box writes it: `UK 7.5`, `EU 42`.",
      "tokens": 471,
      "hash": "sha256:ea78ca4a6d8473ec52b279762d31e61d53f815d671834b4a8cdc893b3232934e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-clothing-size",
        "type-shoe-size-system",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-shoe-size-system",
      "kind": "type",
      "title": "ShoeSizeSystem",
      "summary": "Which system a shoe size is in: `UK`, `EU` or `US`.",
      "tokens": 397,
      "hash": "sha256:dbcac87d6876e46adf8c7fe3ae7c51f643f7f21f6a80dc5807bc83c9ff23ee62",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-shoe-size",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-sku",
      "kind": "type",
      "title": "Sku",
      "summary": "A seller's own stock code: up to 64 characters with no spaces, such as `AB-1234-XL`.",
      "tokens": 445,
      "hash": "sha256:8ae8ae7fca72a92cd76b49f790babcf7c8a619c0135787a7e5d5339c50bda717",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ean13",
        "type-isbn",
        "type-serial-number",
        "type-upc-a",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-slug",
      "kind": "type",
      "title": "Slug",
      "summary": "A URL-safe name: lower-case words joined by hyphens, `autumn-sale`.",
      "tokens": 463,
      "hash": "sha256:389d114d37b5a2595dae5d6508a657baa9ae40ccb39348c60a81ff9699ade67b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-username",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-snomed-concept",
      "kind": "type",
      "title": "SnomedConcept",
      "summary": "A SNOMED CT concept's number, the clinical term a health system records: `22298006`.",
      "tokens": 493,
      "hash": "sha256:ccb4f458996c060732b8ef6c57a8ad312cb3d30ad24bb4f5c3a20554bb025822",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-icd10-code",
        "types-health"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-sound-level",
      "kind": "type",
      "title": "SoundLevel",
      "summary": "How loud something is: `60dB`.",
      "tokens": 622,
      "hash": "sha256:f8d2981e4e2a2ee11d2c6b1fba77af0c8e39e57c00e489d034b1b9afa1ff1026",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-span-id",
      "kind": "type",
      "title": "SpanId",
      "summary": "One step's id in a trace: 16 lower-case hexadecimal digits, not all zero.",
      "tokens": 440,
      "hash": "sha256:5bc9d1901ebb4f9f98141f9b1b54ca728e7059e47e277ef396cb128e8b115a10",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-trace-id",
        "type-trace-parent",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-spdx-licence",
      "kind": "type",
      "title": "SpdxLicence",
      "summary": "A software licence as SPDX writes it: `MIT OR Apache-2.0`.",
      "tokens": 553,
      "hash": "sha256:87439b3d4eabf599dc8ac03f50daf1fb4efb7889bc4f131bb751d6ccd6f62ed0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-speed",
      "kind": "type",
      "title": "Speed",
      "summary": "A speed: `30mph` or `100kmh`.",
      "tokens": 646,
      "hash": "sha256:db427581b4bc22fc92f504ed894cfc1a2359501ae007aaff79876fef25ffa688",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bitrate",
        "type-duration",
        "type-length",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-sscc",
      "kind": "type",
      "title": "Sscc",
      "summary": "The 18-digit number on a pallet or shipping container's label.",
      "tokens": 468,
      "hash": "sha256:0aca72fc8e901e1a346d2a41fce0edd967857c46e4b65f4da9ab15a5c426a0c9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-container-number",
        "type-tracking-number",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-subtitle-cue",
      "kind": "type",
      "title": "SubtitleCue",
      "summary": "A timed caption: when it starts and ends, and its text.",
      "tokens": 743,
      "hash": "sha256:dc293c58de471f1e88bab8fff6c16400df56bc81ed26af422c935ac0b65e9eab",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-duration",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-tax-id",
      "kind": "type",
      "title": "TaxId",
      "summary": "A taxpayer's identification number, with the country that issued it.",
      "tokens": 546,
      "hash": "sha256:8f8ea4703164a3cd3fbf67f23edf2e21743765ef3ac677ef3bf598c79e85ae9a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-uk-national-insurance-number",
        "type-uk-utr",
        "type-us-ssn",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-tax-rate",
      "kind": "type",
      "title": "TaxRate",
      "summary": "A rate of tax, as a percentage that can't be below zero: `20%`.",
      "tokens": 394,
      "hash": "sha256:8280086946860cc9c1f3534c94490e014d38a2212eae273ad32dec4e24a7d9a9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-discount",
        "type-percentage",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-temperature",
      "kind": "type",
      "title": "Temperature",
      "summary": "A temperature: `21degC`, `70degF` or `300kelvin`.",
      "tokens": 706,
      "hash": "sha256:ad917adc880fa65f43021692d04a0713d709ab7e7fa5ff32f4c33bb715cb7e34",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-temperature-difference",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-temperature-difference",
      "kind": "type",
      "title": "TemperatureDifference",
      "summary": "The gap between two temperatures, so 5 °C warmer isn't the same as 5 °C.",
      "tokens": 687,
      "hash": "sha256:d32b35f4c8673a7f646a1c0f04f65ba92a339b224ed891030ee1e262a0a95c93",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-temperature",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-tenure",
      "kind": "type",
      "title": "Tenure",
      "summary": "How land in England and Wales is held: `freehold`, `leasehold` or `commonhold`.",
      "tokens": 401,
      "hash": "sha256:fc6edd08a4978122ba637e17a8d5cf0d764488765ab5be62abae833f12727d2e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-text-direction",
      "kind": "type",
      "title": "TextDirection",
      "summary": "Which way text runs: `ltr` or `rtl`.",
      "tokens": 483,
      "hash": "sha256:7aba780973676e2c581d76f8dbf5f0b200775bec9fa7c6f85aa9eaaae2d256b1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-locale",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-timecode",
      "kind": "type",
      "title": "Timecode",
      "summary": "An address of one frame in a video: hours, minutes, seconds and frames.",
      "tokens": 790,
      "hash": "sha256:f4ff0a13ac2badbe54851372cf33854a097e42af1841b5bf30566af8827d1a7e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-duration",
        "type-frame-rate",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-token-count",
      "kind": "type",
      "title": "TokenCount",
      "summary": "How many tokens a prompt or an answer holds, by its model's own count.",
      "tokens": 412,
      "hash": "sha256:2a5352a53152913aafca98466a937bd33f340fa645e104aee2047d22e052320a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-token-usage",
        "types-ai"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-token-usage",
      "kind": "type",
      "title": "TokenUsage",
      "summary": "The tokens one call to a model used: what it read, what it wrote and what its cache served.",
      "tokens": 602,
      "hash": "sha256:12af5e8a6ebf6bad12327c8c56392c8bf376a4aa880c90cffe6575c5b3f0d5b0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-token-count",
        "types-ai"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-totp-secret",
      "kind": "type",
      "title": "TotpSecret",
      "summary": "The shared secret behind an authenticator app.",
      "tokens": 408,
      "hash": "sha256:666e3aa690d7af2c7a4d2234bb4be3b69ac7c6d1884922dcd3579fb40f21ca16",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-one-time-code",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-trace-id",
      "kind": "type",
      "title": "TraceId",
      "summary": "A whole trace's id: 32 lower-case hexadecimal digits, not all zero.",
      "tokens": 511,
      "hash": "sha256:bed4602aed12a3c6e0969c311adb980feb3aea522be8591b83bf13e9a07a32c9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-span-id",
        "type-trace-parent",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-trace-parent",
      "kind": "type",
      "title": "TraceParent",
      "summary": "A `traceparent` header's value, which links a request to its trace.",
      "tokens": 555,
      "hash": "sha256:014183c338f6d1a8f3108de508a515ca499170acbbeffe80c842075553ff74b9",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-span-id",
        "type-trace-id",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-tracking-number",
      "kind": "type",
      "title": "TrackingNumber",
      "summary": "A parcel's tracking number, with its carrier: `UPSN 1Z999AA10123456784`.",
      "tokens": 558,
      "hash": "sha256:43afae9cd489c337d8d516a5f3b676dc2eb5887a70423cb09c07e5bc065a9c9c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-carrier",
        "type-container-number",
        "type-sscc",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uk-account-number",
      "kind": "type",
      "title": "UkAccountNumber",
      "summary": "A UK bank account number: eight digits, with any leading zeros kept.",
      "tokens": 460,
      "hash": "sha256:fb327bc3b997cd57472deadeed5c77d32fae36b99914319b7d37327a381d58a1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bank-account",
        "type-uk-sort-code",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uk-company-number",
      "kind": "type",
      "title": "UkCompanyNumber",
      "summary": "A UK company's number at Companies House: `00445790` or `SC123456`.",
      "tokens": 456,
      "hash": "sha256:7a94641909ba57c3758af413be6a076e39e3a33ddea9136a189c36bc6ecb0a22",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uk-utr",
        "type-vat-number",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uk-national-insurance-number",
      "kind": "type",
      "title": "UkNationalInsuranceNumber",
      "summary": "A UK National Insurance number: `AB123456C`.",
      "tokens": 489,
      "hash": "sha256:fecee6e46706f1348d2a966f5d9740b82eba187520e472a72c6d99bcb645d5b4",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-tax-id",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uk-sort-code",
      "kind": "type",
      "title": "UkSortCode",
      "summary": "A UK bank's sort code, as six digits: `089999`.",
      "tokens": 422,
      "hash": "sha256:0a94ea912e447bd375be4884893cce306c45fcbd3324c8486a4db0a030803948",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-bank-account",
        "type-uk-account-number",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uk-utr",
      "kind": "type",
      "title": "UkUtr",
      "summary": "A UK Unique Taxpayer Reference: ten digits.",
      "tokens": 467,
      "hash": "sha256:b9a0b596d6a26b0f954717f77609551afef20fb857954143bf7c910c4ef5095c",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uk-company-number",
        "type-uk-national-insurance-number",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-ulid",
      "kind": "type",
      "title": "Ulid",
      "summary": "A sortable unique identifier: 26 capital letters and digits.",
      "tokens": 484,
      "hash": "sha256:ff34f16f9b852ced7e4fa56b3df87c4544fdaa7ded09334aa5b828047e851de7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-uuid",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-unit-price",
      "kind": "type",
      "title": "UnitPrice",
      "summary": "A price per amount of something, such as £2.50 per kilo.",
      "tokens": 749,
      "hash": "sha256:db5498aa0ed3b352258bbb9f3d94993389fa9777b059f111e92c8397666a7bda",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-area",
        "type-length",
        "type-mass",
        "type-money",
        "type-price",
        "type-volume",
        "types-money-and-banking"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-unit-quantity",
      "kind": "type",
      "title": "UnitQuantity",
      "summary": "How much of something: a count of items, or an amount by mass, volume, length or area.",
      "tokens": 649,
      "hash": "sha256:a7fa6e560b0da4e5a89b440ae85305f8bd7b9a1a844ee24f588fd3996605fd2f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-area",
        "type-length",
        "type-mass",
        "type-volume",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-un-locode",
      "kind": "type",
      "title": "UnLocode",
      "summary": "A place in trade and transport: a country's code and three letters or digits, `GBLON`.",
      "tokens": 461,
      "hash": "sha256:3da1ab85d78359e79f0552a56cd87143cc68c4a4168621f600ab04de88c7c213",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-iata-airport",
        "type-postal-address",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-un-number",
      "kind": "type",
      "title": "UnNumber",
      "summary": "A dangerous good's UN number: `UN1203`.",
      "tokens": 400,
      "hash": "sha256:c511469a2b45ba877dfbc76ec48eb40140186d70bed50683dd0ccd2478539961",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-other-with-a-published-standard"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-upc-a",
      "kind": "type",
      "title": "UpcA",
      "summary": "The 12-digit barcode number on products in the US and Canada.",
      "tokens": 434,
      "hash": "sha256:37815187b94332d723f5bf4aeba756b6f4d029504a9f8f5ec5255af8aae132f3",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ean13",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uprn",
      "kind": "type",
      "title": "Uprn",
      "summary": "A Unique Property Reference Number, the identifier for a property in Great Britain.",
      "tokens": 474,
      "hash": "sha256:3cc7ceee70f1a9f6316fcaebff1d02dbde5cb02a2eb760b1de27863e4b40b031",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-postal-address",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-url",
      "kind": "type",
      "title": "Url",
      "summary": "An `http://` or `https://` address with a host.",
      "tokens": 618,
      "hash": "sha256:b66521ee17447227ebe7edfc0fe0ef5053529aa1e39a8723f47b3c9bf749f5f3",
      "area": 2,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-relative-url",
        "type-url-path",
        "type-web-origin",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-url-path",
      "kind": "type",
      "title": "UrlPath",
      "summary": "A URL's path, starting with `/`: `/products/42`.",
      "tokens": 461,
      "hash": "sha256:69735b1010642e6e2781af90721f1da9a52166bf882e4a55ecbb2ce0b612c439",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-relative-url",
        "type-url",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-us-ein",
      "kind": "type",
      "title": "UsEin",
      "summary": "A US Employer Identification Number, for a business: nine digits.",
      "tokens": 422,
      "hash": "sha256:570dcabb2a8908f8c731e38ec363bd5c9d8845d4f02211b56843a3373594c1a3",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-us-ssn",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-user-agent",
      "kind": "type",
      "title": "UserAgent",
      "summary": "What an HTTP client says it is: `curl/8.7.1`.",
      "tokens": 661,
      "hash": "sha256:47f24f908683fcd6dc49bef4bc55f62baff1f921f50de8749d97a4eb7f813991",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-username",
      "kind": "type",
      "title": "Username",
      "summary": "A login handle: lower-case letters, digits, `_`, `.` and `-`, up to 64 of them.",
      "tokens": 511,
      "hash": "sha256:4914f66b1e57b631dc70a0fe3891720b0364c023f49a46df33f2d44c8ff5726a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-email",
        "type-person-name",
        "types-people-and-contact"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-us-ssn",
      "kind": "type",
      "title": "UsSsn",
      "summary": "A US Social Security number: nine digits.",
      "tokens": 483,
      "hash": "sha256:1a54ffef6cd2e16a670fec810be7147ca9c045c71450e843a8e946fcdbbf55e0",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-tax-id",
        "type-us-ein",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-utc-offset",
      "kind": "type",
      "title": "UtcOffset",
      "summary": "A fixed gap from UTC, in minutes: `+05:30`.",
      "tokens": 420,
      "hash": "sha256:56705ef2f1ad465128f8a9b1eaec5d432d77bb333ca790cf12ee316b72b8fe59",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-zone",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-utm-parameters",
      "kind": "type",
      "title": "UtmParameters",
      "summary": "Where a visit came from, as marketing links carry it: source, medium and campaign.",
      "tokens": 749,
      "hash": "sha256:7a665f1f2248b41b0a9a5548b5bc70e03f163872b7a2febb5dede63dbfbe1e0a",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-url",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-uuid",
      "kind": "type",
      "title": "Uuid",
      "summary": "A universally unique identifier, in lower case with hyphens.",
      "tokens": 449,
      "hash": "sha256:8279186017604b06fd5318e5e2d1db4a60fdac8104319e849acb26f031208192",
      "area": 2,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-ulid",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-vat-number",
      "kind": "type",
      "title": "VatNumber",
      "summary": "A VAT registration number, with its country's code at the front: `GB980780684`.",
      "tokens": 597,
      "hash": "sha256:757bedd22eecc320184cead94871b3be5892663e91ca1a667cd06b90bb3c8b67",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-tax-id",
        "types-tax-and-identity-numbers"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-vector",
      "kind": "type",
      "title": "Vector",
      "summary": "A list of numbers, as an AI model's embedding holds them.",
      "tokens": 452,
      "hash": "sha256:b37cdbe5b32d65a05da3605a72e08b16fe9b8d3d64570269013e86ba3e630180",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-embedding",
        "types-maths-and-data"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-vehicle-registration",
      "kind": "type",
      "title": "VehicleRegistration",
      "summary": "A vehicle's registration mark with its country: `GB AB12 CDE`.",
      "tokens": 507,
      "hash": "sha256:12de49b0b713966da2a6797bdbe65e8ddceff15c2598db281c9f4f3c124e01b8",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-country",
        "type-vin",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-version-range",
      "kind": "type",
      "title": "VersionRange",
      "summary": "A range of versions: `^1.2.3`, `>=1.0.0 <2.0.0`.",
      "tokens": 557,
      "hash": "sha256:1ff93f237fc9f68e6d411f0db83d285a926eca20e217d048309553f7824d7f4d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-semantic-version",
        "types-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-video-codec",
      "kind": "type",
      "title": "VideoCodec",
      "summary": "A video format as browsers name it: `avc1.42001E`, `vp09.00.10.08`.",
      "tokens": 473,
      "hash": "sha256:329fb180c1d446fd3362550cf88919cbdab353c6e966970af4cb84880cac433d",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-audio-codec",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-video-resolution",
      "kind": "type",
      "title": "VideoResolution",
      "summary": "A video's frame size in pixels: `1920x1080`.",
      "tokens": 482,
      "hash": "sha256:90c687ad28d08c355b00a351105b78b2dcd41db5c4db6f991fe424e3dd93a75b",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-image-dimensions",
        "types-media-and-visual"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-vin",
      "kind": "type",
      "title": "Vin",
      "summary": "A vehicle identification number: 17 characters with no `I`, `O` or `Q`.",
      "tokens": 488,
      "hash": "sha256:0710b197bdce1f89db3ee7ef34fe01e584cfa48563faacc0be8152f9a7f0edaa",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-vehicle-registration",
        "types-commerce-and-logistics"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-voltage",
      "kind": "type",
      "title": "Voltage",
      "summary": "An electrical voltage: `230V`.",
      "tokens": 614,
      "hash": "sha256:3e01eb1aaf64461d9f3a7d6e23655a3858ef4d86e48d4dbc271dcd6910eeb016",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-current",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-volume",
      "kind": "type",
      "title": "Volume",
      "summary": "A volume: `500ml` or `2litre`.",
      "tokens": 648,
      "hash": "sha256:c152185f1ecc0a50df16036bf7f65cf20442c76f3474c8e60b03f6864fd21b15",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-area",
        "type-length",
        "types-physical-quantities"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-web-authn-credential",
      "kind": "type",
      "title": "WebAuthnCredential",
      "summary": "A passkey a person registered.",
      "tokens": 1123,
      "hash": "sha256:e04501d541071e57e53d221ec9183300dedc9bc2bef166e204c3011b6c5fb47e",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-instant",
        "types-security"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-web-origin",
      "kind": "type",
      "title": "WebOrigin",
      "summary": "A web origin: the scheme, the host and any port, `https://example.com`.",
      "tokens": 528,
      "hash": "sha256:f180d29fd1cd4c5757f76eb6d76e335c0a0a65eeed46068d96399fa8d58182a7",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-url",
        "types-web-and-network"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-weekday",
      "kind": "type",
      "title": "Weekday",
      "summary": "A day of the week: `monday` to `sunday`.",
      "tokens": 474,
      "hash": "sha256:99e8138989e344ff6cc8c2719c019bf0e0084411e2e6d6467b94dfb79f32dd17",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-opening-hours",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-writing-script",
      "kind": "type",
      "title": "WritingScript",
      "summary": "A writing system, written as its four-letter code: `Latn`, `Jpan`.",
      "tokens": 1406,
      "hash": "sha256:eb1cb461ae767150b4c2f295906c5eb756badba4b2b7e2ca73eb5ccddc69472f",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-language",
        "type-locale",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-year",
      "kind": "type",
      "title": "Year",
      "summary": "A calendar year: `2026`.",
      "tokens": 381,
      "hash": "sha256:39782f05108781448635c4ec6ff577500156aee99352cb177867839291a0c8c1",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-calendar-period",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-year-month",
      "kind": "type",
      "title": "YearMonth",
      "summary": "One month of one year: `2026-10`.",
      "tokens": 438,
      "hash": "sha256:ac523aa0e87822a0c04d8079ee077634b1a84f1aee2e9024b84e65d4a4f40c37",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-card-expiry",
        "type-month",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-zone",
      "kind": "type",
      "title": "Zone",
      "summary": "A time zone, written as its name: `Europe/London`.",
      "tokens": 4970,
      "hash": "sha256:9d17bc136d3a014208879f1c92be262e35a7d0bc64cabb4592c6b6a5a0940b7b",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-utc-offset",
        "types-places"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "type-zoned-time",
      "kind": "type",
      "title": "ZonedTime",
      "summary": "A moment seen on the clock in one place: `2026-10-25T09:30:00+00:00[Europe/London]`.",
      "tokens": 1144,
      "hash": "sha256:02120629f851323256393454d50c850216fceed881f9b4186348a9372ea3ceeb",
      "area": 10,
      "links": [
        "every-standard-type-meets-one-contract",
        "type-instant",
        "types-time-and-calendar"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "acceptance.base_missing",
      "kind": "error",
      "title": "acceptance.base_missing",
      "summary": "Base commit the change is compared with isn't in this clone",
      "tokens": 246,
      "hash": "sha256:150f652c9b8d75b8bef90f6fbb523b15c9f5932c96c55717dc9141128204923a",
      "area": 14,
      "links": [
        "comparing-two-builds",
        "tooling"
      ]
    },
    {
      "id": "acceptance.edited",
      "kind": "error",
      "title": "acceptance.edited",
      "summary": "Acceptance already on the before side was edited",
      "tokens": 267,
      "hash": "sha256:d8b5b36594b526293d5e6d0aa6bad91927acf2829423815074491ebad9b4be85",
      "area": 14,
      "links": [
        "acceptances",
        "tooling"
      ]
    },
    {
      "id": "acceptance.invalid",
      "kind": "error",
      "title": "acceptance.invalid",
      "summary": "Acceptance file isn't written as an acceptance",
      "tokens": 310,
      "hash": "sha256:8f1daf7e836c23517823db06a7387c6c54269d917f13e88a84203b6552330c82",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "acceptance.missing",
      "kind": "error",
      "title": "acceptance.missing",
      "summary": "A change could break someone else or widen who can do what, and no acceptance this change adds says a person agreed to it",
      "tokens": 1397,
      "hash": "sha256:fee59c2aad6829f08312562372bcfdfcbea676037a6552b7145bbf2719a7ec74",
      "area": 14,
      "links": [
        "acceptance.no_reason",
        "acceptances",
        "commands-for-records-findings-and-review",
        "erasure-at-providers",
        "guide-get-a-sign-off",
        "migrations",
        "review-and-sign-off",
        "the-public-api-record",
        "tooling"
      ]
    },
    {
      "id": "acceptance.no_reason",
      "kind": "error",
      "title": "acceptance.no_reason",
      "summary": "An acceptance this change adds has no `///` line above `acceptance` saying why a person accepted the changes it lists",
      "tokens": 866,
      "hash": "sha256:fe8fde4a3b22b70d48d1fe4334cecd097e2c061cb791237c513164f903f89ec1",
      "area": 14,
      "links": [
        "acceptance.edited",
        "acceptance.missing",
        "acceptances",
        "commands-for-records-findings-and-review",
        "guide-get-a-sign-off",
        "review-and-sign-off",
        "tooling"
      ]
    },
    {
      "id": "acceptance.unmatched",
      "kind": "error",
      "title": "acceptance.unmatched",
      "summary": "Acceptance lists a change this change doesn't make",
      "tokens": 288,
      "hash": "sha256:610d85338428805580c3829bf05c0de30a37bd4650409ea710e29b288a17e165",
      "area": 14,
      "links": [
        "acceptances",
        "tooling"
      ]
    },
    {
      "id": "ai.connection_required",
      "kind": "error",
      "title": "ai.connection_required",
      "summary": "Action asks a model but the application names no `ai:` connection",
      "tokens": 444,
      "hash": "sha256:16c75ecf6d751d95cfac12b86eed1f2c6f1a182a5b306281e1b1ba2160f60dc5",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "ai.settings_invalid",
      "kind": "error",
      "title": "ai.settings_invalid",
      "summary": "Application's `ai:` holds something it doesn't take, or leaves out what it needs",
      "tokens": 430,
      "hash": "sha256:7590ac9e5c44eadf97db7b6e1eb06aae3cf0ec8f5629ef882e57f725a5f5416a",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "ai.usage_unavailable",
      "kind": "error",
      "title": "ai.usage_unavailable",
      "summary": "The app's AI usage couldn't be read from its database, because it can't be reached or has no table for it yet",
      "tokens": 905,
      "hash": "sha256:746a4e6be5758e5f57c048d39911a1729378cf6c12c2d020594fdde0745d1630",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "commands-for-the-database-settings-and-translations",
        "how-budgets-are-counted",
        "tooling"
      ]
    },
    {
      "id": "api.authentication_invalid",
      "kind": "error",
      "title": "api.authentication_invalid",
      "summary": "API authentication is not a list of declared sign-in methods",
      "tokens": 264,
      "hash": "sha256:eef726a9b74ec180c882a029454ae928bad4863efa18b43911a103bc7f0495d8",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "api.idempotency_invalid",
      "kind": "error",
      "title": "api.idempotency_invalid",
      "summary": "API idempotency is not an Idempotency",
      "tokens": 230,
      "hash": "sha256:197e48d0ce7bafa0a57e7e64d61488085dbb8f0d9381f8f95699d246bf9a852a",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "api.prefix_overlap",
      "kind": "error",
      "title": "api.prefix_overlap",
      "summary": "Two APIs share a prefix",
      "tokens": 192,
      "hash": "sha256:263523fd7f429a6c741c73057a30ec7917e1f09ca54aaf43f7799d27d6661fdd",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "api.prefix_required",
      "kind": "error",
      "title": "api.prefix_required",
      "summary": "Declared API has no prefix",
      "tokens": 184,
      "hash": "sha256:9ec8e8911e71f2662e864e16096dc762eb933258c9af6e092aeb67b0feb73452",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "api.route_needs_sign_in",
      "kind": "error",
      "title": "api.route_needs_sign_in",
      "summary": "A route needs a signed-in caller, but its API says `authentication: []`, which accepts no way to sign in",
      "tokens": 684,
      "hash": "sha256:ad3b002782579067b95cf49415dd651aa817b088e7bf2e8062bbb0dbdd115440",
      "area": 7,
      "links": [
        "http",
        "openapi",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "api.serve_openapi_invalid",
      "kind": "error",
      "title": "api.serve_openapi_invalid",
      "summary": "An API's `serve_openapi:` setting holds something other than `true` or `false`",
      "tokens": 492,
      "hash": "sha256:f9c8c321734410a77e453e122ecbfebcba26a4dd18fe2ad95ba85345eaaf9f70",
      "area": 7,
      "links": [
        "apis-and-versions",
        "http",
        "openapi"
      ]
    },
    {
      "id": "api.setting_unknown",
      "kind": "error",
      "title": "api.setting_unknown",
      "summary": "API setting is not one an API takes",
      "tokens": 172,
      "hash": "sha256:5a6df67be5ef3d5e5dc420ceefaf892b54bbcead3602202b91a50d27cb9a9d42",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "cli.acceptance_arguments",
      "kind": "error",
      "title": "cli.acceptance_arguments",
      "summary": "A `jadpo acceptance` command names no action, one it doesn't have, or no purpose for `new`",
      "tokens": 460,
      "hash": "sha256:0b088c715b5226265facbd03a1118efe65e23286d7ce0336d9cb7d844928332f",
      "area": 14,
      "links": [
        "acceptances",
        "commands-for-records-findings-and-review",
        "tooling"
      ]
    },
    {
      "id": "cli.ai_arguments",
      "kind": "error",
      "title": "cli.ai_arguments",
      "summary": "A `jadpo ai` command names no action, one it doesn't have, or a prompt the project doesn't declare",
      "tokens": 514,
      "hash": "sha256:e37b96c4c32ee359c8fd62e5821bcf79416635d2344fdbe8d54d739096b4a23e",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "prompts-as-files",
        "tooling"
      ]
    },
    {
      "id": "cli.api_arguments",
      "kind": "error",
      "title": "cli.api_arguments",
      "summary": "A `jadpo api` command names no action, one it doesn't have, or more than `update`",
      "tokens": 306,
      "hash": "sha256:a559378fb9ee05339a11ffa2f4765ed676b23746ae01587f2ec2b0aeea8521b4",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "tooling",
        "what-is-committed-and-why"
      ]
    },
    {
      "id": "cli.approval_arguments",
      "kind": "error",
      "title": "cli.approval_arguments",
      "summary": "A `jadpo approval` command is given an argument it doesn't take, names a `--before` git doesn't know, or has nothing to compare with",
      "tokens": 533,
      "hash": "sha256:de2170a90c7ada53e658d3115c0c3016d5ebdd7dff937b02f47235820b5f71a3",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "comparing-two-builds",
        "reviewing-a-change",
        "tooling"
      ]
    },
    {
      "id": "cli.build_arguments",
      "kind": "error",
      "title": "cli.build_arguments",
      "summary": "A `jadpo build` command names a deployable the app doesn't have, or more than one",
      "tokens": 376,
      "hash": "sha256:d815d7a75b1754608e23b42ad55ac815ede70e2789615016e9aed65ac3176e92",
      "area": 14,
      "links": [
        "declared-deployables",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.calls_arguments",
      "kind": "error",
      "title": "cli.calls_arguments",
      "summary": "A `jadpo calls` command names an action it doesn't have, a call the log doesn't hold, or an answer without its operation",
      "tokens": 439,
      "hash": "sha256:22e577d8a448f1b48e2b43da101c59de569f3166d566ba5e64e1b397d8da7533",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.check_arguments",
      "kind": "error",
      "title": "cli.check_arguments",
      "summary": "A `jadpo check` command names a path that isn't there or isn't a `.jadpo` file, or a `--before` git doesn't know",
      "tokens": 419,
      "hash": "sha256:9efa9a2220e3fd32482d9a059ff5e032e04186b7fcd0849fdfc5cb4688e80b32",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.completions_arguments",
      "kind": "error",
      "title": "cli.completions_arguments",
      "summary": "A `jadpo completions` command names no shell, or one Jadpo writes no completions for",
      "tokens": 394,
      "hash": "sha256:9db44970bcb7b70b0b612a2dce8e6b1abb808353c194bcf8349cddb17d262b24",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.config_arguments",
      "kind": "error",
      "title": "cli.config_arguments",
      "summary": "A `jadpo config` command names no action, an action it doesn't have, or a setting `config.jadpo` doesn't declare",
      "tokens": 569,
      "hash": "sha256:f70b33d9c97ad4dde51073ab26ad9c569e6130bf50fcca2fa295ce2a675d39df",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "settings-config-jadpo",
        "tooling"
      ]
    },
    {
      "id": "cli.config_generate_refused",
      "kind": "error",
      "title": "cli.config_generate_refused",
      "summary": "A new key would be written where a person could read it, by `jadpo config generate`, or `--generate` would replace a key already set",
      "tokens": 781,
      "hash": "sha256:8dc7b96a80c1eaddc977250e57aed00955342048873338152e15621da4696c5c",
      "area": 14,
      "links": [
        "encrypted-fields",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "cli.config_prompt_failed",
      "kind": "error",
      "title": "cli.config_prompt_failed",
      "summary": "Nothing was typed at the prompt of `jadpo config set`, or the terminal couldn't hide what you type there",
      "tokens": 619,
      "hash": "sha256:6845d0143b6da00bc8aff106401d1fdeca80fd5c6330176d32833efd47a2eac7",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "cli.config_rotation_unavailable",
      "kind": "error",
      "title": "cli.config_rotation_unavailable",
      "summary": "The sealed rows `jadpo config rotation` counts couldn't be counted, because their database can't be reached or has no table for them yet",
      "tokens": 562,
      "hash": "sha256:847c8916ca19f3102fdefbea0f20742ca2e64e896c6115f51454d889e25fd09a",
      "area": 14,
      "links": [
        "encrypted-fields",
        "migrations",
        "tooling"
      ]
    },
    {
      "id": "cli.config_tty_required",
      "kind": "error",
      "title": "cli.config_tty_required",
      "summary": "You ran `jadpo config set` where there is no terminal to type the value at, such as from a coding agent or a script",
      "tokens": 649,
      "hash": "sha256:2531cef449e8b550006fa7234721bbb2d0246e3237a2840c90bf91f8141bfe9a",
      "area": 14,
      "links": [
        "secrets",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "cli.declines_arguments",
      "kind": "error",
      "title": "cli.declines_arguments",
      "summary": "A `jadpo declines` command names no action, one it doesn't have, or a rule or path that isn't the project's",
      "tokens": 441,
      "hash": "sha256:4c1fab2048826b129936cb921109f2d8461cc4b5534e90ca1c5610926b05a3e1",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "declining-a-judgement-call",
        "tooling"
      ]
    },
    {
      "id": "cli.deliveries_arguments",
      "kind": "error",
      "title": "cli.deliveries_arguments",
      "summary": "A `jadpo deliveries` command names an action it doesn't have, no id for one that needs it, or a state or page it doesn't list",
      "tokens": 462,
      "hash": "sha256:c7e13f71c7a966928a0e84ed4bb1f05a5059ed9f7cc04dcf04ad34b35f6cd918",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_arguments",
      "kind": "error",
      "title": "cli.dev_arguments",
      "summary": "A `jadpo dev` command names an action it doesn't have, `token` without a user's id, or a `--url` the project's several stores can't share",
      "tokens": 466,
      "hash": "sha256:b3b8989281d7f5d491357e96b236cbe33181b09bc47a5ce71c2ac9e645abfcc9",
      "area": 14,
      "links": [
        "in-development-and-tests",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_port_invalid",
      "kind": "error",
      "title": "cli.dev_port_invalid",
      "summary": "A `jadpo dev --port` flag holds something other than a whole number from 0 to 65535",
      "tokens": 464,
      "hash": "sha256:fb1972331aa63a434e1120b3fe5b95f9e79a813701cb287beaf31cf69b213573",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_start_failed",
      "kind": "error",
      "title": "cli.dev_start_failed",
      "summary": "The app couldn't start under `jadpo dev`, usually because another program is using its port, it has no database to run on, or a connection would call a provider's live API",
      "tokens": 1079,
      "hash": "sha256:f0165c77c53225865a8ceefa6a1e356e795f65a35d0d83dffd037edb44adad09",
      "area": 14,
      "links": [
        "provider-calls-in-development",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.email_arguments",
      "kind": "error",
      "title": "cli.email_arguments",
      "summary": "A `jadpo email` command names an action it doesn't have, or a mail or link the dev inbox doesn't hold",
      "tokens": 430,
      "hash": "sha256:d2d71bd796521a3eb2220c07e1a40b2dda12cd50a1f64d86878f75b4a7937a32",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.fix_arguments",
      "kind": "error",
      "title": "cli.fix_arguments",
      "summary": "A `jadpo fix` command names a declaration with nothing to fix, or a fix it doesn't have",
      "tokens": 358,
      "hash": "sha256:4be6cf523a04f9fd6880760d83981448867f5449a8231d715e4b9bc857801c61",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "the-standard-types",
        "tooling"
      ]
    },
    {
      "id": "cli.flags_arguments",
      "kind": "error",
      "title": "cli.flags_arguments",
      "summary": "A `jadpo flags` command names an action it doesn't have, a flag the project doesn't declare, or a value, user or share the flag can't take",
      "tokens": 608,
      "hash": "sha256:cb88a4431b9673e5b0866e14332e24b31f7096ec1a8af92bbeee6b6f3e998a09",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "flags-changed-listed-and-removed",
        "tooling"
      ]
    },
    {
      "id": "cli.fmt_arguments",
      "kind": "error",
      "title": "cli.fmt_arguments",
      "summary": "A `jadpo fmt` command names a path that isn't there or isn't a `.jadpo` file",
      "tokens": 264,
      "hash": "sha256:cb1c628e6e69f487f95db5ea96e5ba418543bc4d1b114e2b3488f6cd348fc843",
      "area": 14,
      "links": [
        "formatting",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.help_arguments",
      "kind": "error",
      "title": "cli.help_arguments",
      "summary": "A `jadpo help` command names more than one command or rule",
      "tokens": 268,
      "hash": "sha256:14e3ca8fa8f5ddd96e5d20ae4405a31f090485d83f94a5657367dd2f379431b4",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.lsp_arguments",
      "kind": "error",
      "title": "cli.lsp_arguments",
      "summary": "A `jadpo lsp` command is given an argument, which it doesn't take",
      "tokens": 261,
      "hash": "sha256:5315b4deed76ce1034799b91d5d6e99e3073ebb7678579e965669bf37c237e54",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "editor-support",
        "tooling"
      ]
    },
    {
      "id": "cli.migrate_arguments",
      "kind": "error",
      "title": "cli.migrate_arguments",
      "summary": "A `jadpo migrate` command names no action, one it doesn't have, a purpose for an action that takes none, or a `--drop` of what isn't retired",
      "tokens": 474,
      "hash": "sha256:197808a7fc51765ff7b171b01418268ceb787dd1e3a0db313169d67edaf0c4fb",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "migrations",
        "tooling"
      ]
    },
    {
      "id": "cli.new_arguments",
      "kind": "error",
      "title": "cli.new_arguments",
      "summary": "A `jadpo new` command names no project, or more than one",
      "tokens": 262,
      "hash": "sha256:110c321138a40c7f1fac001c4cb2541b19fae7da1f2dfdf4b2d22447b872fb59",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.package_arguments",
      "kind": "error",
      "title": "cli.package_arguments",
      "summary": "A `jadpo package` command names no action, one it doesn't have, or a package the project doesn't hold",
      "tokens": 497,
      "hash": "sha256:1be01a06c644687baa7b676db2e96a34077a77af43d785ffa51fac1ea742893f",
      "area": 14,
      "links": [
        "commands-for-packages",
        "tooling"
      ]
    },
    {
      "id": "cli.package_not_openapi",
      "kind": "error",
      "title": "cli.package_not_openapi",
      "summary": "A file given to `jadpo package import` is JSON but not an OpenAPI 3.0 or 3.1 document",
      "tokens": 517,
      "hash": "sha256:33b4d0d971fbaeab999d67d174c7aabc8f33426e821f710525ceed8447de81a1",
      "area": 14,
      "links": [
        "commands-for-packages",
        "tooling"
      ]
    },
    {
      "id": "cli.package_unreadable",
      "kind": "error",
      "title": "cli.package_unreadable",
      "summary": "A file given to `jadpo package import` isn't there, can't be read, or isn't JSON",
      "tokens": 578,
      "hash": "sha256:2be994b562576ab4ecad639f758d508551c0216e36e2552217f3d907c5d5df0c",
      "area": 14,
      "links": [
        "commands-for-packages",
        "tooling"
      ]
    },
    {
      "id": "cli.presentation_arguments",
      "kind": "error",
      "title": "cli.presentation_arguments",
      "summary": "A `--color` flag holds something other than `auto`, `always` or `never`, or nothing",
      "tokens": 295,
      "hash": "sha256:bf45286244be1689a3048b1a0456d7f435fee08367473bbd2d26d6f3e830ac6c",
      "area": 14,
      "links": [
        "error-messages",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.records_arguments",
      "kind": "error",
      "title": "cli.records_arguments",
      "summary": "A `jadpo records` command names an action other than `update`",
      "tokens": 311,
      "hash": "sha256:81b4e9a64ca87fd2dc87d03330444a9f0584c57c122e50db3270300dcc2d565e",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "tooling",
        "what-is-committed-and-why"
      ]
    },
    {
      "id": "cli.routes_arguments",
      "kind": "error",
      "title": "cli.routes_arguments",
      "summary": "A `jadpo routes` command is given an argument, which it doesn't take",
      "tokens": 242,
      "hash": "sha256:af64fb95e15b5c57d3d91fb3d845410adc5eacced9345f7e2faed43ea67058bb",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "tooling"
      ]
    },
    {
      "id": "cli.runs_arguments",
      "kind": "error",
      "title": "cli.runs_arguments",
      "summary": "A `jadpo runs` command names an action other than `unfinished`, or leaves out its `--build`",
      "tokens": 303,
      "hash": "sha256:e638c875f20792a540b74b3bfe77b260e55318ee4c49eda54df4cfe6614e0981",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "tooling"
      ]
    },
    {
      "id": "cli.schedules_arguments",
      "kind": "error",
      "title": "cli.schedules_arguments",
      "summary": "A `jadpo schedules` command names an action it doesn't have, or a schedule the project doesn't declare",
      "tokens": 439,
      "hash": "sha256:367d95a2d2ea30b94c634a6be73a75d5b161442155ff4eb61e91b484231ec267",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "cli.seed_arguments",
      "kind": "error",
      "title": "cli.seed_arguments",
      "summary": "A `jadpo seed` command names no seed, one the project doesn't have, or more than one",
      "tokens": 281,
      "hash": "sha256:4589634a541d6113a0df35f71d7f94c81d6cc469d86d2c7fd3fde515ca84e8a9",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "seeds",
        "tooling"
      ]
    },
    {
      "id": "cli.sql_arguments",
      "kind": "error",
      "title": "cli.sql_arguments",
      "summary": "A `jadpo sql` command names no query or action, one the project doesn't declare, or an action that writes nothing",
      "tokens": 424,
      "hash": "sha256:90a297e5d8511bd3e1a1d9fee6d086a5154cbcc95215b489f8cd49bb8875eb42",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "tooling"
      ]
    },
    {
      "id": "cli.suggest_arguments",
      "kind": "error",
      "title": "cli.suggest_arguments",
      "summary": "A `jadpo suggest` command names an action it doesn't have, or a suggestion the last scan didn't find",
      "tokens": 428,
      "hash": "sha256:1acbf69f25e4bc69e7c3fc8166e7d82aa4cbe8885445933516fc0890b08d2e1c",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "ignoring-a-suggestion",
        "tooling"
      ]
    },
    {
      "id": "cli.test_arguments",
      "kind": "error",
      "title": "cli.test_arguments",
      "summary": "A `jadpo test` command names a path that isn't there, or a seed, a kind or a `--name` it can't use",
      "tokens": 402,
      "hash": "sha256:fc2bae974b992880ca031317d3aa48ab684f646f6fcfa5ed72d3a87faaedbd6e",
      "area": 14,
      "links": [
        "running-tests",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.toolchain_arguments",
      "kind": "error",
      "title": "cli.toolchain_arguments",
      "summary": "A `jadpo toolchain` command names an action it doesn't have, or a release that isn't kept",
      "tokens": 440,
      "hash": "sha256:5aef72d483ff44606d68033d9623763cb287fa8f37a5336acddfa0e9257c0bde",
      "area": 14,
      "links": [
        "tooling",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "cli.translations_arguments",
      "kind": "error",
      "title": "cli.translations_arguments",
      "summary": "A `jadpo translations` command names no action, one it doesn't have, or a locale the project doesn't translate into",
      "tokens": 481,
      "hash": "sha256:3067fac378ffdfe2462ba96e1b7e52260234e545692a8d0aa8e73ecb218bd5d7",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "locales",
        "tooling"
      ]
    },
    {
      "id": "cli.unknown_command",
      "kind": "error",
      "title": "cli.unknown_command",
      "summary": "A `jadpo` command line starts with a command Jadpo doesn't have, or asks `jadpo help` about a command or rule it doesn't have",
      "tokens": 431,
      "hash": "sha256:cc6fc773c5474acb750cf298eca4f6bd19899cbbe047175dcaa65eb238a1544a",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.unknown_flag",
      "kind": "error",
      "title": "cli.unknown_flag",
      "summary": "A `jadpo` command line has a flag the command doesn't take",
      "tokens": 391,
      "hash": "sha256:5539b8094b1ad70a6ddf53ace74b660b2027ddf4f875244d05454d516946d0aa",
      "area": 14,
      "links": [
        "error-messages",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "cli.verifier_start_failed",
      "kind": "error",
      "title": "cli.verifier_start_failed",
      "summary": "The verifier won't start, for want of its credential or a sandbox to run packages in, or because it can't listen",
      "tokens": 662,
      "hash": "sha256:0ca3a08a6947a07c33449a1ab2fe1ad490a35c24f0b66f47b3112388351a9463",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-verifier",
        "tooling"
      ]
    },
    {
      "id": "cli.version_arguments",
      "kind": "error",
      "title": "cli.version_arguments",
      "summary": "A `jadpo version` command is given an argument, which it doesn't take",
      "tokens": 266,
      "hash": "sha256:caefb67d6ca8540e526f53f099097d86a0624c462175e3d4dbd279c3a523d941",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "tooling",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "cli.why_arguments",
      "kind": "error",
      "title": "cli.why_arguments",
      "summary": "A `jadpo why` command names no schedule, one the project doesn't declare, or more than one",
      "tokens": 302,
      "hash": "sha256:24b4e049959b1a8ce9952fd70721e00c046cf13f576d53187ff4d33b350e9e50",
      "area": 14,
      "links": [
        "commands-for-debugging-editors-and-help",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "configuration.binding_empty",
      "kind": "error",
      "title": "configuration.binding_empty",
      "summary": "Setting names an empty environment variable",
      "tokens": 182,
      "hash": "sha256:4280aff23c7af72a134f8cec30ad64123dd2b4c0c961646ccc88eb9b25616f21",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.binding_invalid",
      "kind": "error",
      "title": "configuration.binding_invalid",
      "summary": "Setting names a variable that is not in capitals",
      "tokens": 188,
      "hash": "sha256:104b9b89792c195b5e00288a3c4a7faa1029f7cd59043b02ddef9136e4ae6a2f",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.client_address_duplicate",
      "kind": "error",
      "title": "configuration.client_address_duplicate",
      "summary": "Client address is declared twice",
      "tokens": 247,
      "hash": "sha256:32411106f35701b010bcad616b5a5934faadc0a0a5e065ddf4760ddc75228f0a",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.client_address_hops_invalid",
      "kind": "error",
      "title": "configuration.client_address_hops_invalid",
      "summary": "Client address counts proxies with something that is not a count from 1",
      "tokens": 257,
      "hash": "sha256:6cc7b41c0cd774a8ae1a79f22b062ca86cfe882fce3de959a3cce44d6c637946",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.client_address_hops_unused",
      "kind": "error",
      "title": "configuration.client_address_hops_unused",
      "summary": "Client address gives a count of proxies to a source that counts none",
      "tokens": 229,
      "hash": "sha256:af2f92508383a14a6b1b7af9b9afcb619e7af9ceeb34adc7830265fe029364cd",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.client_address_invalid",
      "kind": "error",
      "title": "configuration.client_address_invalid",
      "summary": "Client address is not a block of a source and a count of proxies",
      "tokens": 223,
      "hash": "sha256:1872d821e60ef4c5c76fb5ffbef760ffa93b2dd244ab4a0984541826d2fd6eb4",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.client_address_source_unknown",
      "kind": "error",
      "title": "configuration.client_address_source_unknown",
      "summary": "Client address names a source that is not one of the four",
      "tokens": 262,
      "hash": "sha256:74f26851d00855846ebd08cb9813399c47a6882bb0b49faa16ca34cba5a333aa",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.default_invalid",
      "kind": "error",
      "title": "configuration.default_invalid",
      "summary": "Setting value breaks its type's rules",
      "tokens": 245,
      "hash": "sha256:fe633075308489f83b3d0a434642b79741245d4cdf6493c9d141b41b48b77a1e",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.default_literal_required",
      "kind": "error",
      "title": "configuration.default_literal_required",
      "summary": "Setting value is not a literal",
      "tokens": 538,
      "hash": "sha256:01be34577e6ed61cc1e41bbb68503487723db95918e4abe79deb2e4804af451b",
      "area": 10,
      "links": [
        "configuration",
        "settings-config-jadpo"
      ]
    },
    {
      "id": "configuration.default_type",
      "kind": "error",
      "title": "configuration.default_type",
      "summary": "Setting value is the wrong kind of value for its type",
      "tokens": 189,
      "hash": "sha256:c677f35d48028b27154ef8c365494c7c49ca33fea919773ddb2021f7db5b1f1d",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.duplicate_binding",
      "kind": "error",
      "title": "configuration.duplicate_binding",
      "summary": "Two settings read the same environment variable",
      "tokens": 240,
      "hash": "sha256:ab88ded9b45e2e71770b15d4bd2285e1a5e78b2baf5515f77e100d4a74b75b02",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.duplicate_option",
      "kind": "error",
      "title": "configuration.duplicate_option",
      "summary": "Setting option is given twice",
      "tokens": 201,
      "hash": "sha256:45eab53615b9f3de0970de8a290c353b75698b3d4ba842a9b19dc8ff712805cb",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.expected_field",
      "kind": "error",
      "title": "configuration.expected_field",
      "summary": "Configuration holds something that is not a setting",
      "tokens": 182,
      "hash": "sha256:e09b33aaee5d897ae5cbfccb0671b472783ea367908d200eaac63d847e883972",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.field_unknown",
      "kind": "error",
      "title": "configuration.field_unknown",
      "summary": "Configuration has no setting with this name",
      "tokens": 404,
      "hash": "sha256:4c1344625bad9c18736c4f4844f5de4320867c4edb1e75c171dacaa4cfe405f0",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.local_changed",
      "kind": "error",
      "title": "configuration.local_changed",
      "summary": "Something else saved `.env.local` while `jadpo config set` was saving a value in it",
      "tokens": 590,
      "hash": "sha256:ca15c08ca379a5c0aba585f3206651e8169b77a369dac8958d00d130dab07063",
      "area": 14,
      "links": [
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.local_invalid_encoding",
      "kind": "error",
      "title": "configuration.local_invalid_encoding",
      "summary": "The `.env.local` file holds bytes that aren't UTF-8 text",
      "tokens": 615,
      "hash": "sha256:3034be08f0c6d11214bcdf6b925b8df7d7d562489bea202dca6a69656f39a046",
      "area": 14,
      "links": [
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.local_read_failed",
      "kind": "error",
      "title": "configuration.local_read_failed",
      "summary": "The `.env.local` file is there, but it couldn't be read: it is a folder, or you aren't allowed to read it",
      "tokens": 574,
      "hash": "sha256:16d01868f64f0d4532e1419ae37b0c6b858184f03fe19404a3268681cd379042",
      "area": 14,
      "links": [
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.local_syntax",
      "kind": "error",
      "title": "configuration.local_syntax",
      "summary": "A line of `.env.local` isn't blank, a `#` comment or `NAME=value`, or it sets a variable a line above it already sets",
      "tokens": 831,
      "hash": "sha256:40f6f57429acecb01d260b16cd24164884350f1534564a4a6a1b8f9a7eeac5ae",
      "area": 14,
      "links": [
        "secrets",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.local_unsafe_target",
      "kind": "error",
      "title": "configuration.local_unsafe_target",
      "summary": "The `.env.local` file that `jadpo config set` would save a value in is a link, not an ordinary file",
      "tokens": 606,
      "hash": "sha256:e637f7569af0c3b6219410b26f89e7b1ce22e096f00160a1ed59775ee31e7b1e",
      "area": 14,
      "links": [
        "secrets",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.local_write_failed",
      "kind": "error",
      "title": "configuration.local_write_failed",
      "summary": "Saving a value in `.env.local` failed, usually because the project's folder can't be written",
      "tokens": 520,
      "hash": "sha256:b9f7468e42366d99971559cf8183f43425447b58787ae50ef118fa11f78f7d59",
      "area": 14,
      "links": [
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.move_name_taken",
      "kind": "error",
      "title": "configuration.move_name_taken",
      "summary": "A constant `jadpo config move` was asked to make a setting has the name of a setting `config { }` already declares",
      "tokens": 711,
      "hash": "sha256:8c2b1608a499f490cc00c22f89d45601904df2fb31813da899ae360d6936cd82",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "settings-config-jadpo",
        "tooling"
      ]
    },
    {
      "id": "configuration.move_read_unsupported",
      "kind": "error",
      "title": "configuration.move_read_unsupported",
      "summary": "A constant `jadpo config move` was asked to make a setting is read where a setting can't be: in a query, an update by `id`, a backfill or another constant's value",
      "tokens": 805,
      "hash": "sha256:f4bf4d9f7d4abad3b093401775c99a482fe1c494fb163acb3494b6c19ce5c750",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "settings-config-jadpo",
        "tooling"
      ]
    },
    {
      "id": "configuration.move_type_unsupported",
      "kind": "error",
      "title": "configuration.move_type_unsupported",
      "summary": "A constant `jadpo config move` was asked to make a setting has a type one environment variable can't hold, such as a list or an object",
      "tokens": 720,
      "hash": "sha256:cf53e91b97b277f37a1782406bbc60c171323a4de847bac58a46cafd4bb7dea8",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "settings-config-jadpo",
        "tooling"
      ]
    },
    {
      "id": "configuration.multiple_declarations",
      "kind": "error",
      "title": "configuration.multiple_declarations",
      "summary": "Configuration is declared more than once",
      "tokens": 227,
      "hash": "sha256:d5738984b0b95ae89310f4ca55b7072b42fc06ef7661c8e430fff60f81993499",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.secret_default",
      "kind": "error",
      "title": "configuration.secret_default",
      "summary": "Secret setting has a value in source",
      "tokens": 241,
      "hash": "sha256:803b4974a2424f36a160f77350d79f22279e316819f15f350893d229b07bc35a",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.secret_flow",
      "kind": "error",
      "title": "configuration.secret_flow",
      "summary": "Your code reads a secret setting somewhere other than the few places where Jadpo keeps it on the server",
      "tokens": 744,
      "hash": "sha256:accf44c0014f09bd8e46f77449f54f1ee6d5508a7e3356ba8b87523600e40dc8",
      "area": 10,
      "links": [
        "configuration",
        "connecting-in-app-jadpo",
        "hashing-and-cryptography",
        "secrets"
      ]
    },
    {
      "id": "configuration.secret_invalid",
      "kind": "error",
      "title": "configuration.secret_invalid",
      "summary": "Secret option is not true or false",
      "tokens": 179,
      "hash": "sha256:bea5f1d4f71504a180cbe4e18966a6a4da9cdc94e7b4f79a73968b2134057c67",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.test_value_missing",
      "kind": "error",
      "title": "configuration.test_value_missing",
      "summary": "A test reaches code that reads a setting, and the setting has no value for tests to use",
      "tokens": 659,
      "hash": "sha256:14fd1b5fcf32be439f330b2234e96b92f950a85847ab535c5f66e613288e347b",
      "area": 10,
      "links": [
        "configuration",
        "configuration-in-tests",
        "secrets",
        "settings-config-jadpo"
      ]
    },
    {
      "id": "configuration.type_unsupported",
      "kind": "error",
      "title": "configuration.type_unsupported",
      "summary": "Setting type cannot be read from one variable",
      "tokens": 253,
      "hash": "sha256:af5dc44dd1230e25f75e94fab7fbac494c2273cd4b34436138fb5b02a3937331",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.unknown_option",
      "kind": "error",
      "title": "configuration.unknown_option",
      "summary": "Setting option is not one a setting takes",
      "tokens": 207,
      "hash": "sha256:56167675fa7b5347c151913910f6f9a441cc9a58156af9090d3fa547bbe09d06",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.url_type",
      "kind": "error",
      "title": "configuration.url_type",
      "summary": "Connection address is not a setting of the type its driver needs",
      "tokens": 249,
      "hash": "sha256:5ccb8f8b69617ba159a9aeafd37a24c911b32ac0965b2b98fc945b7ffb2edfa4",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "configuration.value_invalid",
      "kind": "error",
      "title": "configuration.value_invalid",
      "summary": "A setting's value on this machine, from the environment or `.env.local`, doesn't fit the type `config.jadpo` gives it",
      "tokens": 877,
      "hash": "sha256:58924fb4bdc893b2e645d60da40c718f312531865b0448b02cf1dcc85c38a550",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "learn-settings",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "configuration.value_missing",
      "kind": "error",
      "title": "configuration.value_missing",
      "summary": "A setting `config.jadpo` declares without a `default:` has no value on this machine, in the environment or `.env.local`",
      "tokens": 785,
      "hash": "sha256:8901967a2da5625b68a913d9460f473231e02717150e703b107014e2463c4780",
      "area": 14,
      "links": [
        "learn-settings",
        "settings-config-jadpo",
        "tooling",
        "values-on-your-machine-and-in-production"
      ]
    },
    {
      "id": "conform.failed",
      "kind": "error",
      "title": "conform.failed",
      "summary": "A package's answers to `jadpo package conform` don't fit the capability it fills, or the suite couldn't run",
      "tokens": 1003,
      "hash": "sha256:fc84037ed22bbe6578640cbf13d68c2b079d382b68c418db6079383f7efbb813",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-conformance-suite",
        "tooling"
      ]
    },
    {
      "id": "conform.refused",
      "kind": "error",
      "title": "conform.refused",
      "summary": "The conformance suite wasn't sent to the provider's live API, because the app has no connection to the package, nothing sets the connection's credential or address, or `ai:` doesn't ask its models through it",
      "tokens": 881,
      "hash": "sha256:24fa1cbe1c489ee1c78a28ef4a65caae52c54d128ed25dab0e19cff6b67ab3f1",
      "area": 14,
      "links": [
        "commands-for-packages",
        "commands-for-the-database-settings-and-translations",
        "the-conformance-suite",
        "tooling"
      ]
    },
    {
      "id": "connection.disk_path_invalid",
      "kind": "error",
      "title": "connection.disk_path_invalid",
      "summary": "A disk store's `path:` isn't an absolute folder outside the project",
      "tokens": 871,
      "hash": "sha256:33a7d2f73885774a24b099946740d820c5685533704b31aa6b563054161c8db8",
      "area": 16,
      "links": [
        "a-native-deployable",
        "built-in-services",
        "deployable.target_unsupported",
        "files"
      ]
    },
    {
      "id": "connection.domain_not_listed",
      "kind": "error",
      "title": "connection.domain_not_listed",
      "summary": "An action calls an outside service through a connection whose `domains:` list doesn't include the action's domain",
      "tokens": 885,
      "hash": "sha256:ac053cbfa33ae38b124dfbf81b69316441446d218def16b9d15e5b2739288ad4",
      "area": 11,
      "links": [
        "calling",
        "connecting-in-app-jadpo",
        "external-services",
        "ownership-and-calls-replace-modules"
      ]
    },
    {
      "id": "connection.key_invalid",
      "kind": "error",
      "title": "connection.key_invalid",
      "summary": "Connection gives a key its package doesn't take",
      "tokens": 288,
      "hash": "sha256:6212ce86cfe1e6c8f21f9d89ee6cbb45834c92ec65b66b560632f4239615dc09",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "connection.key_missing",
      "kind": "error",
      "title": "connection.key_missing",
      "summary": "Connection leaves out a key its package needs",
      "tokens": 260,
      "hash": "sha256:b5f41808a3c57fcea827c7b1ee047c66a1504b02b7840cac2914371b9eaa2a00",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "connection.package_unknown",
      "kind": "error",
      "title": "connection.package_unknown",
      "summary": "Connection names no provider package the app holds",
      "tokens": 279,
      "hash": "sha256:3b5707905caf154239817849cc58a8199da7f23e77dca12039cde252c22a0787",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "connection.value_invalid",
      "kind": "error",
      "title": "connection.value_invalid",
      "summary": "Connection's key holds a value it can't",
      "tokens": 615,
      "hash": "sha256:9a624cf643f548713cf097673bac4dfe8caae9c26124748379424d0d170988a1",
      "area": 11,
      "links": [
        "erasure-at-providers",
        "external-services"
      ]
    },
    {
      "id": "constant.cycle",
      "kind": "error",
      "title": "constant.cycle",
      "summary": "Constant's value depends on itself",
      "tokens": 204,
      "hash": "sha256:d347115c29cf0ac9685335ebc452092efcff4396d27ddf1a9ed2458770ae2edf",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "constant.similar_exists",
      "kind": "error",
      "title": "constant.similar_exists",
      "summary": "Another constant of the same type holds the same value",
      "tokens": 368,
      "hash": "sha256:48f595b519f8649b0d4680198da12c6865d49553472a4b380a613c108b30925c",
      "area": 3,
      "links": [
        "declining-a-judgement-call",
        "logic"
      ]
    },
    {
      "id": "constant.value_not_fixed",
      "kind": "error",
      "title": "constant.value_not_fixed",
      "summary": "Constant's value is only known while the app runs",
      "tokens": 312,
      "hash": "sha256:9e86be630fd274cf65aa5ce288eb04297f90cfd435ed8a944916940cd33f1950",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "data.cleared_required_reference",
      "kind": "error",
      "title": "data.cleared_required_reference",
      "summary": "A reference that can never be `none` is cleared on delete",
      "tokens": 232,
      "hash": "sha256:1f6c895562048a95464be2cf5620d82beab5376045cf1ce9d5e2712f60e4907f",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.conflict_cannot_break",
      "kind": "error",
      "title": "data.conflict_cannot_break",
      "summary": "A write's `conflict:` block maps a rule that the write can never break",
      "tokens": 662,
      "hash": "sha256:70a23633c654538018dbd3e2b8999743764f2cbdae7faf9a5827384813e5573e",
      "area": 6,
      "links": [
        "data.conflict_unmapped",
        "failure.duplicate_mapping",
        "failure.mapping_kind",
        "reads-and-writes",
        "turning-one-failure-into-another",
        "when-a-write-is-refused"
      ]
    },
    {
      "id": "data.conflict_unknown",
      "kind": "error",
      "title": "data.conflict_unknown",
      "summary": "Conflict mapping names no unique rule or reference",
      "tokens": 319,
      "hash": "sha256:20fa6c3a486d2abb75923f166a2b24f7ce8944fdff343d1308db427fe3a1a3af",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.conflict_unmapped",
      "kind": "error",
      "title": "data.conflict_unmapped",
      "summary": "A write could be refused by a unique rule or a reference, and its `conflict:` block doesn't say which failure the caller gets then",
      "tokens": 698,
      "hash": "sha256:853009151fcc5db31d39d592c22b8eba54660efe2c7594e6931de049c4411ac8",
      "area": 6,
      "links": [
        "data.conflict_cannot_break",
        "failure-kinds",
        "reads-and-writes",
        "turning-one-failure-into-another",
        "when-a-write-is-refused"
      ]
    },
    {
      "id": "data.duplicate_rule",
      "kind": "error",
      "title": "data.duplicate_rule",
      "summary": "Unique rule or index repeats another",
      "tokens": 241,
      "hash": "sha256:90a387779bf5eb514ba596955fabfe2816d89b4539bad8b15db75da8b684827d",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.encrypted_field_invalid",
      "kind": "error",
      "title": "data.encrypted_field_invalid",
      "summary": "A field that can't be stored sealed, or that says it isn't sealed when its type always is",
      "tokens": 796,
      "hash": "sha256:1f2e9a7dfaec9134ad2cd360d37dbdd292095aa925e4332af616957149b88232",
      "area": 15,
      "links": [
        "encrypted-fields",
        "personal-data",
        "secret-values"
      ]
    },
    {
      "id": "data.encrypted_field_used",
      "kind": "error",
      "title": "data.encrypted_field_used",
      "summary": "An encrypted field is used somewhere the database or a log would have to read it",
      "tokens": 728,
      "hash": "sha256:6891acd55a240fb465e89be3a4362b9db4eaab35e5f018eba597ec77049a899f",
      "area": 15,
      "links": [
        "encrypted-fields",
        "logging",
        "personal-data"
      ]
    },
    {
      "id": "data.entity_in_field",
      "kind": "error",
      "title": "data.entity_in_field",
      "summary": "Field holds an entity instead of a reference to one",
      "tokens": 190,
      "hash": "sha256:c9b83569359508e809b9e56a1fdf5eae88637e5f2d3198f2b70f1dbc35ecbff4",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.erase_field_required",
      "kind": "error",
      "title": "data.erase_field_required",
      "summary": "Erasing a person would clear a field that can't be `none`: a reference whose record erasure keeps, a marked field of a record it anonymises, or a marked field of the person's own record it keeps",
      "tokens": 1306,
      "hash": "sha256:86896f6562c679e5f8dfd214bf86c5b5e4e97eaf2d5f9e4c785c1f5f5f7f61a1",
      "area": 15,
      "links": [
        "absent-values",
        "erasure",
        "marking-personal-fields",
        "personal-data"
      ]
    },
    {
      "id": "data.erase_own_field",
      "kind": "error",
      "title": "data.erase_own_field",
      "summary": "A person's own record says something about erasure it can't: `erase:` on a field with anything but `Erasure.retained` or with no `personal:`, a reference that deletes a record that must stay, or a field named as the column erasure keeps",
      "tokens": 854,
      "hash": "sha256:9cafa4669b553146aab9a845f6b3d67ee09e8f03bc248e506d8d40cff7f93fe9",
      "area": 15,
      "links": [
        "erasure",
        "marking-personal-fields",
        "personal-data",
        "retention"
      ]
    },
    {
      "id": "data.erase_required",
      "kind": "error",
      "title": "data.erase_required",
      "summary": "A `restricted` reference into records that erasing a person deletes doesn't say what erasure does to the record holding it",
      "tokens": 1031,
      "hash": "sha256:96032df53c4e20d99ee68fd986c821cba539c3aef03bc6599649a1072661c9c5",
      "area": 15,
      "links": [
        "erasure",
        "personal-data",
        "references-and-on-delete"
      ]
    },
    {
      "id": "data.erase_retention_required",
      "kind": "error",
      "title": "data.erase_retention_required",
      "summary": "Erasing a person keeps records with `Erasure.retained`, their own or others', but their entity has no `retention:` saying when they go",
      "tokens": 871,
      "hash": "sha256:90dc2137b03590dda4b283e6124568c0c9f11413c5b1a67a1d6bfe6b901d0462",
      "area": 15,
      "links": [
        "erasure",
        "personal-data",
        "retention"
      ]
    },
    {
      "id": "data.erase_unreached",
      "kind": "error",
      "title": "data.erase_unreached",
      "summary": "A field's `erase:` is on a field erasing a person never reaches: one that isn't a reference, or a reference to records erasure never deletes",
      "tokens": 742,
      "hash": "sha256:b7dd65c5d92a13afdf60fb75958c95b8101f8858b4b840dc09f3fefea6f2956c",
      "area": 15,
      "links": [
        "data.erase_own_field",
        "erasure",
        "person-entities",
        "personal-data",
        "references-and-on-delete"
      ]
    },
    {
      "id": "data.field_encryption_key_invalid",
      "kind": "error",
      "title": "data.field_encryption_key_invalid",
      "summary": "The application's `field_encryption_key:` reads something other than an `EncryptionKey` setting",
      "tokens": 524,
      "hash": "sha256:59ed7146694ab6a7d2bf9b50f73ce4fd7435a48afffdad21daaf1657d18b4cd2",
      "area": 15,
      "links": [
        "encrypted-fields",
        "hashing-and-cryptography",
        "personal-data"
      ]
    },
    {
      "id": "data.field_encryption_key_required",
      "kind": "error",
      "title": "data.field_encryption_key_required",
      "summary": "A field is kept sealed, but the application names no key to seal it with",
      "tokens": 692,
      "hash": "sha256:d019debdfef9687d0be952df6e9c0e0769cd2ce9d830fe7cd232bac3f87e8390",
      "area": 15,
      "links": [
        "encrypted-fields",
        "personal-data"
      ]
    },
    {
      "id": "data.field_list_required",
      "kind": "error",
      "title": "data.field_list_required",
      "summary": "Unique rule or index is not a list of fields",
      "tokens": 200,
      "hash": "sha256:5c668bd6f27b51d992f93293f9c260c1d54b88a84e34edb6ac9a59e758cdf461",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.field_without_json",
      "kind": "error",
      "title": "data.field_without_json",
      "summary": "Structured field holds a type with no stored JSON form",
      "tokens": 345,
      "hash": "sha256:131d7b08242eaf6550fb1edf656a68aa52383a72e2c51b0c532a90acd210a2f0",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.file_field_invalid",
      "kind": "error",
      "title": "data.file_field_invalid",
      "summary": "A `File` field's store, size or types are missing or wrong",
      "tokens": 305,
      "hash": "sha256:9be1a7c893573326e7aed542baf8e8d6afe999617c721a3353d20fe10a04c0a2",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "data.generated_type",
      "kind": "error",
      "title": "data.generated_type",
      "summary": "Generated field is not a required `Instant`",
      "tokens": 199,
      "hash": "sha256:13c4888cba2675d78fa541ce40ca871151e7bcb4deae101682fd2d81147bcab6",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.identity_missing",
      "kind": "error",
      "title": "data.identity_missing",
      "summary": "Entity has no `id` field",
      "tokens": 173,
      "hash": "sha256:2dc3b76e63fc9685a80e055b445bc01f9f9d84387459050d6d7b9465d2aa2acd",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.identity_type",
      "kind": "error",
      "title": "data.identity_type",
      "summary": "Entity's `id` is not a required `Uuid`",
      "tokens": 152,
      "hash": "sha256:00e4fad4d4b3b0418f9f700ed53799b9f98ffe936b7c2f0160010bdfd0692b61",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_condition",
      "kind": "error",
      "title": "data.lifecycle_condition",
      "summary": "A lifecycle's `visible:` or `when:` condition isn't a plain test of the record's own fields against fixed values",
      "tokens": 917,
      "hash": "sha256:3704cf3c03eadd845dff114760188350cc12deead4de72c8fc85fd566027c1fd",
      "area": 5,
      "links": [
        "a-user-field-on-the-record",
        "data",
        "grants",
        "lifecycle"
      ]
    },
    {
      "id": "data.lifecycle_hard_delete",
      "kind": "error",
      "title": "data.lifecycle_hard_delete",
      "summary": "Code would remove a record that has a lifecycle for good, which only the lifecycle's own purge may do",
      "tokens": 1322,
      "hash": "sha256:8db906d1c4a82475332b06f1407f6996800d665436eff00dfdfc523212c45d45",
      "area": 6,
      "links": [
        "lifecycle",
        "reads-and-writes",
        "references-and-on-delete",
        "schedules",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "data.lifecycle_initial_required",
      "kind": "error",
      "title": "data.lifecycle_initial_required",
      "summary": "Required field a transition sets has no starting value",
      "tokens": 310,
      "hash": "sha256:ef56f99633ea89c2bed2e4638a8620ba43860a0dad76ea2f934710bb4cb45e32",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_owned_field",
      "kind": "error",
      "title": "data.lifecycle_owned_field",
      "summary": "A create, update or patch sets a field that only the entity's lifecycle may change",
      "tokens": 1039,
      "hash": "sha256:fc4875054fc04af76afec29357615755fb6b255a8a5dd216df9956f2eed001e4",
      "area": 6,
      "links": [
        "lifecycle",
        "reads-and-writes",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "data.lifecycle_purge_after",
      "kind": "error",
      "title": "data.lifecycle_purge_after",
      "summary": "Purge's `after:` isn't a positive duration",
      "tokens": 254,
      "hash": "sha256:8034cb5a4b19ce845abe4b97a9359e54348f9513e7790cc6fe2beb413c1481d9",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_purge_since",
      "kind": "error",
      "title": "data.lifecycle_purge_since",
      "summary": "Purge's `since:` isn't a time field of the record",
      "tokens": 245,
      "hash": "sha256:0ed236c7f89a83ca98f69dc3dc9c576461d0139483625b3ae36508c7dddaea41",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_purge_visible",
      "kind": "error",
      "title": "data.lifecycle_purge_visible",
      "summary": "Lifecycle purges records but hides none",
      "tokens": 283,
      "hash": "sha256:59e31121970be1000d6cdaabaff95de0fb3ee7ba04ce1e66c7087034316064b0",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_section",
      "kind": "error",
      "title": "data.lifecycle_section",
      "summary": "Lifecycle has a section it doesn't take, or lacks one it needs",
      "tokens": 237,
      "hash": "sha256:eb2d353d082812ac1656257a7bbc97d005808f8581852aaf2e393e3f36cc09eb",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_transition_name",
      "kind": "error",
      "title": "data.lifecycle_transition_name",
      "summary": "Transition is named like another operation or a field",
      "tokens": 268,
      "hash": "sha256:a091933a50cef571fccfe77c472b3164403a6fba271f1bf64f86778de221bdd8",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_unknown_field",
      "kind": "error",
      "title": "data.lifecycle_unknown_field",
      "summary": "Lifecycle names a field the entity doesn't have",
      "tokens": 221,
      "hash": "sha256:777d90c8ad61b9f73e3bc63f27f59385784409ff3b08681515f2c6d6241b17a0",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_value",
      "kind": "error",
      "title": "data.lifecycle_value",
      "summary": "Lifecycle sets a value that isn't fixed",
      "tokens": 284,
      "hash": "sha256:a736fdaa9e687b53e02ffd681a9f4efdbb6b7b12efd376ca2638c389e45585ca",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.name_too_long",
      "kind": "error",
      "title": "data.name_too_long",
      "summary": "Name is too long for a table or column",
      "tokens": 251,
      "hash": "sha256:09c6a74de54f694d644c9d2f5954bce5333526e3b9ed8a3f20504e0561d4a145",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.on_delete_not_reference",
      "kind": "error",
      "title": "data.on_delete_not_reference",
      "summary": "Field that is not a reference sets `on_delete`",
      "tokens": 190,
      "hash": "sha256:d80272f8ed1ca408376cbb5ca3c7497847212643d04fd6fd8f78ae4256e656a9",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.on_delete_required",
      "kind": "error",
      "title": "data.on_delete_required",
      "summary": "A field refers to a record of another entity but doesn't say what happens to it when that record is deleted",
      "tokens": 680,
      "hash": "sha256:31945be93aca3d13954b244e57efa049436ffc932de8cffa6682f18bba7251f4",
      "area": 5,
      "links": [
        "data",
        "references-and-on-delete"
      ]
    },
    {
      "id": "data.patch_field_required",
      "kind": "error",
      "title": "data.patch_field_required",
      "summary": "Patch input has a field that isn't optional",
      "tokens": 272,
      "hash": "sha256:a1b67354edd305114dadade22585a8a2ea4a6abe80996a1ba2a8a951151f4279",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.patch_field_unknown",
      "kind": "error",
      "title": "data.patch_field_unknown",
      "summary": "Patch names a field the entity or its input doesn't have",
      "tokens": 278,
      "hash": "sha256:032d0532e0a9e0e198f8443643731e0b7f4d97b932484b2f747a16d993a0ebea",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.patch_not_input",
      "kind": "error",
      "title": "data.patch_not_input",
      "summary": "Patch given something other than an `Input`",
      "tokens": 245,
      "hash": "sha256:d4a1d292fd699359fbbce0dc18bac5571216a1cc71d1133f9da9ac73f7b6fb30",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.patch_overlap",
      "kind": "error",
      "title": "data.patch_overlap",
      "summary": "Supplied-field block sets a field the patch already sets",
      "tokens": 278,
      "hash": "sha256:73c127f572b3fee471decdbad786292c4651f062934f21f3ff60105396de8a92",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.personal_unreachable",
      "kind": "error",
      "title": "data.personal_unreachable",
      "summary": "A field marked as personal data is on an entity erasing a person never reaches, so it could never be found",
      "tokens": 842,
      "hash": "sha256:a29e28c8827fd07a003c848e7ad4fc6468180ec93672fde03c2da36927933bfa",
      "area": 15,
      "links": [
        "marking-personal-fields",
        "person-entities",
        "personal-data",
        "personal-data-checks",
        "references-and-on-delete"
      ]
    },
    {
      "id": "data.read_in_loop",
      "kind": "error",
      "title": "data.read_in_loop",
      "summary": "Query or `get` inside a `for` loop",
      "tokens": 319,
      "hash": "sha256:c1086a2459f364154e302446aae4d768bcdc7b224964f03151487d05fd240884",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.reference_across_stores",
      "kind": "error",
      "title": "data.reference_across_stores",
      "summary": "A field refers to a record of an entity that is kept in a different database",
      "tokens": 707,
      "hash": "sha256:fc1a8fa2f40e96a2b5666746a22e4c436b7c0c2e3e7903ab33ae2c96cfaafa03",
      "area": 5,
      "links": [
        "data",
        "one-store-per-action",
        "references-and-on-delete",
        "stores"
      ]
    },
    {
      "id": "data.reference_cycle",
      "kind": "error",
      "title": "data.reference_cycle",
      "summary": "Two or more entities refer to each other through required fields, so none of their records could ever be created first",
      "tokens": 626,
      "hash": "sha256:8e156d91d59968baca8d5a2d7c2a8620980a7c07196f9ab31dd98fb036ae5092",
      "area": 5,
      "links": [
        "data",
        "references-and-on-delete"
      ]
    },
    {
      "id": "data.repeated_field",
      "kind": "error",
      "title": "data.repeated_field",
      "summary": "Unique rule or index lists a field twice",
      "tokens": 173,
      "hash": "sha256:527830127f0774c6bf4e1e2e77f287bc0c9dc33dc7d425240988acd1f1bf53b1",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.reserved_table_name",
      "kind": "error",
      "title": "data.reserved_table_name",
      "summary": "Entity's table name starts with `jadpo_`",
      "tokens": 183,
      "hash": "sha256:71847f2d64db84aaf285ba40d3d0f4bbc8491d646fc1c57b870c3d3552945844",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.retention_field_required",
      "kind": "error",
      "title": "data.retention_field_required",
      "summary": "A field's `retention:` is on a field that can't be `none`, so its value could never be cleared",
      "tokens": 576,
      "hash": "sha256:390cd9e67b1f290e1962810e73acbd7920a5033348953eaa739f0b3d8fbfcd56",
      "area": 15,
      "links": [
        "absent-values",
        "personal-data",
        "retention"
      ]
    },
    {
      "id": "data.retention_held",
      "kind": "error",
      "title": "data.retention_held",
      "summary": "An entity's `retention:` would delete records that a `restricted` reference keeps from being deleted",
      "tokens": 840,
      "hash": "sha256:f6acfacbc74394d9e57354304f8b9e9368c9191c7a8a1c54f5350198f918341e",
      "area": 15,
      "links": [
        "personal-data",
        "references-and-on-delete",
        "retention"
      ]
    },
    {
      "id": "data.retention_lifecycle_field",
      "kind": "error",
      "title": "data.retention_lifecycle_field",
      "summary": "A field's `retention:` would clear a field the entity's lifecycle owns or reads, changing which records are hidden or undoing what a transition set",
      "tokens": 880,
      "hash": "sha256:f5c50b0dbe2501916f4b4f034427fe82f5ff951d707b17df9cac17e3f3f69e8e",
      "area": 15,
      "links": [
        "lifecycle",
        "personal-data",
        "retention",
        "schedules"
      ]
    },
    {
      "id": "data.retention_period",
      "kind": "error",
      "title": "data.retention_period",
      "summary": "A retention's `after:` isn't a `Duration` setting in `config.jadpo`",
      "tokens": 846,
      "hash": "sha256:ed1fd6326e0eccbcc722edd42ca7a859aa230c37700cc8f75cc2d241bac21a1f",
      "area": 15,
      "links": [
        "data.retention_since",
        "personal-data",
        "retention",
        "retention-periods"
      ]
    },
    {
      "id": "data.retention_since",
      "kind": "error",
      "title": "data.retention_since",
      "summary": "A retention's `since:` isn't one of the record's `Instant` fields",
      "tokens": 722,
      "hash": "sha256:6f19659df22c33498374f7d7f73ff9cef95fa6312b5a28e5ca0dd0145ce8b530",
      "area": 15,
      "links": [
        "data.retention_period",
        "personal-data",
        "retention"
      ]
    },
    {
      "id": "data.set_generated_field",
      "kind": "error",
      "title": "data.set_generated_field",
      "summary": "Write sets a field the store generates",
      "tokens": 245,
      "hash": "sha256:eab8563d3f60ec1d426299d9036d918fa1645382626e81cf5a9bb8b47ab6cbe0",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.store_required",
      "kind": "error",
      "title": "data.store_required",
      "summary": "An entity names no database to live in, and the app declares databases but none called `main`",
      "tokens": 501,
      "hash": "sha256:c2e9a031ab52bda0f77c6865349a767e8cbefb12521767954044e97a050821ab",
      "area": 5,
      "links": [
        "data",
        "stores"
      ]
    },
    {
      "id": "data.store_unknown",
      "kind": "error",
      "title": "data.store_unknown",
      "summary": "Entity's store is not a database connection",
      "tokens": 200,
      "hash": "sha256:e3767731b945e05f86b75de2108855f7ee5ad9bf0a505c1df9ab5ae7e59c6756",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.stored_decimal_scale",
      "kind": "error",
      "title": "data.stored_decimal_scale",
      "summary": "Update by `id` adds a decimal with more places than its field keeps",
      "tokens": 342,
      "hash": "sha256:9c2e5c35987947c60e5e91bb285c536108e6c0b634d1f1bf555f83d0f9846d0c",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.stored_value_outside_update",
      "kind": "error",
      "title": "data.stored_value_outside_update",
      "summary": "Stored field read outside an update by `id`",
      "tokens": 304,
      "hash": "sha256:8c8d874a81c24da9a596ce416b380accc73f261f27efdcab6f4164e629a6d31f",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.stored_value_unproven",
      "kind": "error",
      "title": "data.stored_value_unproven",
      "summary": "An update by `id` works out a new value from a stored field, and the value could break its type's rules",
      "tokens": 960,
      "hash": "sha256:c7e8c790bbf7754398f78e7caef8c5a690f49d2a826852655ebeee13ab84bfb9",
      "area": 6,
      "links": [
        "counters-and-other-one-step-updates",
        "passing-a-failure-on-attempt",
        "reads-and-writes"
      ]
    },
    {
      "id": "data.unique_nullable_field",
      "kind": "error",
      "title": "data.unique_nullable_field",
      "summary": "Unique rule includes a field that can be `none`",
      "tokens": 212,
      "hash": "sha256:02bb8d413fef2b495aa7a2b82d8a675e81bdeacbbacf1126872693683930416d",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.unique_single_field",
      "kind": "error",
      "title": "data.unique_single_field",
      "summary": "Unique rule has only one field",
      "tokens": 196,
      "hash": "sha256:dbf0bd93fe66546be5587c99a13192fe4ea36c46d38806d8eba0da4b326f854c",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.unknown_field",
      "kind": "error",
      "title": "data.unknown_field",
      "summary": "Unique rule or index names a field the entity does not have",
      "tokens": 183,
      "hash": "sha256:f4b2f821f76e2f53981056c9b4a4c1cc92cb45175fbcd7bc378d13a7c997c1de",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.unknown_section",
      "kind": "error",
      "title": "data.unknown_section",
      "summary": "Entity has a section Jadpo does not know",
      "tokens": 238,
      "hash": "sha256:37c3a5e370d18431d8245ded68e290e6dd81020d887aff1ff87476488d9853a5",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.update_by_id_value",
      "kind": "error",
      "title": "data.update_by_id_value",
      "summary": "An update by `id` sets a value that the database can't work out on its own, such as one read earlier in the action",
      "tokens": 805,
      "hash": "sha256:4109a2de17c2b0727962268fe1f59352ef86af4f561a8db52683b2718128db04",
      "area": 6,
      "links": [
        "counters-and-other-one-step-updates",
        "reads-and-writes",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "data.vector_store_unsupported",
      "kind": "error",
      "title": "data.vector_store_unsupported",
      "summary": "Vector field on a store that isn't PostgreSQL",
      "tokens": 385,
      "hash": "sha256:f7458111ac27057d5c44e26718e7451f861d122f937996968d1e8e583865c171",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "data.write_before_call",
      "kind": "error",
      "title": "data.write_before_call",
      "summary": "Write comes before a later outside call",
      "tokens": 487,
      "hash": "sha256:9ef162c1692416c7906d38bab521ca3af073e66aae74c60b6a5d00e789c74dbf",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.write_not_entity",
      "kind": "error",
      "title": "data.write_not_entity",
      "summary": "Write names a type that isn't an entity",
      "tokens": 257,
      "hash": "sha256:aef8f271955a51009d95737017b8e01daaff3d057ae3f4744631bb0c23a019be",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.write_section_required",
      "kind": "error",
      "title": "data.write_section_required",
      "summary": "Write doesn't say what it changes",
      "tokens": 205,
      "hash": "sha256:fbcad6c2b803129770630774466d15cc9603895ab10349ba7101f67c530bfdce",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.write_section_unexpected",
      "kind": "error",
      "title": "data.write_section_unexpected",
      "summary": "Write has a section it doesn't take",
      "tokens": 305,
      "hash": "sha256:2c572fd072334bff423e154321d47299051fdfa83d0039e0ed345cb9b0918c63",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "decline.no_reason",
      "kind": "error",
      "title": "decline.no_reason",
      "summary": "Decline gives no reason",
      "tokens": 299,
      "hash": "sha256:bfe6cc10584133a0fe532e8475fcb7d72f5ff57b9563680065e9eeee70467fc6",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "decline.not_declinable",
      "kind": "error",
      "title": "decline.not_declinable",
      "summary": "Decline names a rule that can't be declined",
      "tokens": 363,
      "hash": "sha256:0f235bb5e491b24a241c02642c7b34da799841cff595411f3209ee31c626839e",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "decline.unused",
      "kind": "error",
      "title": "decline.unused",
      "summary": "Decline's rule no longer fires on its declaration",
      "tokens": 319,
      "hash": "sha256:0df5b43e1dd3481c6b015e38f14e651f7ce7ae102f2b6864762e22b3fb290ccf",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "deliveries.not_found",
      "kind": "error",
      "title": "deliveries.not_found",
      "summary": "The id given to `jadpo deliveries` matches no delivery or schedule run in the database",
      "tokens": 695,
      "hash": "sha256:d871f1c60fde30f78cdc6ca45468338dba5fb51d028b0ca216a1561c48eeed8f",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "deliveries.wrong_state",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "deliveries.unavailable",
      "kind": "error",
      "title": "deliveries.unavailable",
      "summary": "The app's deliveries couldn't be read from their database, because it can't be reached or has no table for them yet",
      "tokens": 887,
      "hash": "sha256:cf009cd118d18e8afe60b7da7fde44f53b23d5f5f405c20ba86f799ea73f2a6c",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "commands-for-the-database-settings-and-translations",
        "database-and-other-connection-urls",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "deliveries.wrong_state",
      "kind": "error",
      "title": "deliveries.wrong_state",
      "summary": "A delivery or schedule run was asked to do something its state rules out, such as cancelling one that has already failed",
      "tokens": 852,
      "hash": "sha256:fb0b3f6bfc7dcc61395fec5ea0bafbd68087410da79f2f71826292598751a301",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "deliveries.not_found",
        "retries-and-giving-up",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "deployable.api_unknown",
      "kind": "error",
      "title": "deployable.api_unknown",
      "summary": "Deployable serves an API the app doesn't have",
      "tokens": 207,
      "hash": "sha256:0fbe17526f08e359b622541ad90963da0b5dbd7f5e5799c99938dbff5d8a3d03",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.empty",
      "kind": "error",
      "title": "deployable.empty",
      "summary": "Deployable serves nothing and runs nothing",
      "tokens": 215,
      "hash": "sha256:caafc24d8e5b28fcefbcfe5ff98a7bbe12657fe8662226bb7101ff8f0eb6bc70",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.invalid",
      "kind": "error",
      "title": "deployable.invalid",
      "summary": "Deployable is written in a form `deployables:` doesn't take",
      "tokens": 212,
      "hash": "sha256:fd1886701e4396d7e9783e91447ebe11510a630844a54fa554dca96fb94ecab4",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.settle_unrun",
      "kind": "error",
      "title": "deployable.settle_unrun",
      "summary": "Route waits for follow-on work its deployable doesn't run",
      "tokens": 427,
      "hash": "sha256:581e9767e1f41770089cbaffcfb2b462cd4c4a485fc9ca1b8601b23b0f63dc16",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.target_unknown",
      "kind": "error",
      "title": "deployable.target_unknown",
      "summary": "Deployable's target isn't one Jadpo builds for",
      "tokens": 225,
      "hash": "sha256:641a14910173a1613eab4af9e6e946a2accc1aac1dd800286bf51590ac13c673",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.target_unsupported",
      "kind": "error",
      "title": "deployable.target_unsupported",
      "summary": "Deployable reaches a connection its target can't run",
      "tokens": 1314,
      "hash": "sha256:96b67b55b0cf5121149bd0a69923146538deff69dbf6ae269b0fc5d8e9e75ab6",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.trigger_unknown",
      "kind": "error",
      "title": "deployable.trigger_unknown",
      "summary": "Deployable runs something that isn't a trigger",
      "tokens": 235,
      "hash": "sha256:ec9ae03136aa5f07f5d105944f20cd89dc1981cd4c9b43d5d3de5a2cd3f9e08c",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.unserved",
      "kind": "error",
      "title": "deployable.unserved",
      "summary": "No deployable serves an API, or runs the background work, the app has",
      "tokens": 387,
      "hash": "sha256:d2c83f97cab5b04dd223d77a3513ddb887b11ff6f3eaf8174123b61cecfc805c",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "effect.call_in_loop",
      "kind": "error",
      "title": "effect.call_in_loop",
      "summary": "Outside call inside a `for` loop",
      "tokens": 378,
      "hash": "sha256:29e4b5026c5b88e9038924e82ff4eef096b64a0bec3e384e96a8476e6f954e13",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "effect.function_calls_action",
      "kind": "error",
      "title": "effect.function_calls_action",
      "summary": "Function calls an action or query",
      "tokens": 219,
      "hash": "sha256:f8c8f063a53deccf610622140aafc3c043e5c98d5d7277fd8b202af7d7b48d56",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "effect.function_persistence",
      "kind": "error",
      "title": "effect.function_persistence",
      "summary": "Function reads or writes stored data",
      "tokens": 209,
      "hash": "sha256:7833a20db17afed63fa5e74886814242e53b1f0312f4b20f17df4ec4859f6f26",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "effect.recursive_action",
      "kind": "error",
      "title": "effect.recursive_action",
      "summary": "An action calls itself, or calls other actions that end up calling it again",
      "tokens": 775,
      "hash": "sha256:2283e98bc0cdd2186c95645a2177c1263ff9b1401cd4e3931e5e36fbfb21febe",
      "area": 3,
      "links": [
        "functions-and-actions",
        "logic",
        "loops",
        "recursion"
      ]
    },
    {
      "id": "email.attachment_limit",
      "kind": "error",
      "title": "email.attachment_limit",
      "summary": "Email's attachments may exceed what its mail package accepts",
      "tokens": 453,
      "hash": "sha256:1d2ab88247eabaa5c7437673ba86586d3852da94f91ca27cca8c1edf18601231",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.browser_failed",
      "kind": "error",
      "title": "email.browser_failed",
      "summary": "A `jadpo email open` command couldn't start the browser to open a mail's link",
      "tokens": 557,
      "hash": "sha256:e82ca71731b38596c4232bded59129e326e9798498907f4a7f835da9d8acabd7",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "email",
        "tooling"
      ]
    },
    {
      "id": "email.connection_required",
      "kind": "error",
      "title": "email.connection_required",
      "summary": "Action emits an email but the application names no email connection",
      "tokens": 338,
      "hash": "sha256:64edd97d6d017bc08460ac36a91971198e844640bcb77017dd573abef0ef1c51",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.field_unused",
      "kind": "error",
      "title": "email.field_unused",
      "summary": "Email's field is written by no template and no subject",
      "tokens": 330,
      "hash": "sha256:652b7bb9356a10b575b4cd488f23aaa52ab19cda328ff4cf645c123cba5b9c5c",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.health_problem",
      "kind": "error",
      "title": "email.health_problem",
      "summary": "Email's template fails a check of the mail health score",
      "tokens": 392,
      "hash": "sha256:bc1398d699e49424627b98fcdb49d300f7623a88ca1c9945c06a9509a3dc3a2f",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.partial_invalid",
      "kind": "error",
      "title": "email.partial_invalid",
      "summary": "An email template includes a partial that doesn't exist, can't be reached from it, or is given the wrong fields",
      "tokens": 674,
      "hash": "sha256:41c36e55fe5038ebdbe80f4ac00878c6d75387ec5251675afe9c460ecdacfb17",
      "area": 16,
      "links": [
        "built-in-services",
        "email",
        "mail-packages-partials-and-email-sent"
      ]
    },
    {
      "id": "email.sent_context",
      "kind": "error",
      "title": "email.sent_context",
      "summary": "Reads `email.sent` outside a test",
      "tokens": 279,
      "hash": "sha256:ffeae135dd6b119ab14229f406196aedbef09dafe5feba4e7aa83d65d45999e8",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.settings_invalid",
      "kind": "error",
      "title": "email.settings_invalid",
      "summary": "Application's `email:` or `display_name:` is invalid",
      "tokens": 292,
      "hash": "sha256:e0475ba33981068f74c8967b96e1827e7082778b1694b33962151d06c3267719",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.template_missing",
      "kind": "error",
      "title": "email.template_missing",
      "summary": "Email has no template, or a template no email",
      "tokens": 284,
      "hash": "sha256:36c9406954d7d177bbdd8d661206434c78f2f11dee08d1e0e652ff58c1a4b239",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.template_not_allowed",
      "kind": "error",
      "title": "email.template_not_allowed",
      "summary": "An email template calls a function, does arithmetic or builds a value, when it may only read its fields, translate and format",
      "tokens": 684,
      "hash": "sha256:9f57a44fa05ef89df2ff5322e5d654901ed62c9dd8a2a7a2cd2d957d08c014fa",
      "area": 16,
      "links": [
        "built-in-services",
        "email",
        "email-templates-and-sending"
      ]
    },
    {
      "id": "email.template_value_invalid",
      "kind": "error",
      "title": "email.template_value_invalid",
      "summary": "An email template writes out a value that isn't text, a number or an enum with wording, such as a date",
      "tokens": 728,
      "hash": "sha256:2ab5030cbea975042daf70d75c7de18287bc7567290b49aea9a9d16b08e038e5",
      "area": 16,
      "links": [
        "built-in-services",
        "email",
        "enums-with-wording",
        "showing-dates-and-times-to-people"
      ]
    },
    {
      "id": "event.emit_invalid",
      "kind": "error",
      "title": "event.emit_invalid",
      "summary": "Emit is given something that isn't an event, or is used outside an action",
      "tokens": 264,
      "hash": "sha256:a19705302c2f609be85b372b069111ca17e66d27c0090ae931783675c4880458",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "event.settings_invalid",
      "kind": "error",
      "title": "event.settings_invalid",
      "summary": "Events settings in `app.jadpo` hold something other than a database's `store:`",
      "tokens": 193,
      "hash": "sha256:34a73c53f78fa63222e7afc74eb85d79726a3a8082201e8572e427dbb77fb1d3",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "event.store_required",
      "kind": "error",
      "title": "event.store_required",
      "summary": "An action emits an event but writes no database, and the app names no database to keep its events in",
      "tokens": 661,
      "hash": "sha256:c0ec6a3ea4ee8fadcb99c23258f50971449175ecb6239e6524e948dcfec2572f",
      "area": 12,
      "links": [
        "emitting-an-event",
        "jobs-and-events",
        "stores"
      ]
    },
    {
      "id": "failure.attempt_infallible",
      "kind": "error",
      "title": "failure.attempt_infallible",
      "summary": "Attempt is used on something that cannot fail",
      "tokens": 233,
      "hash": "sha256:d1b205d8373092d2efe2ec1365e67b048c23165e352710065a2b14cf2b44a289",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.attempt_required",
      "kind": "error",
      "title": "failure.attempt_required",
      "summary": "A call that can fail is made as if it can't, with nothing passing its failure on or handling it",
      "tokens": 1039,
      "hash": "sha256:0237d38de7740261dcd243c7ffb94adef1467d9b355800a4e608fee368f6ea78",
      "area": 3,
      "links": [
        "attempt",
        "creating-values",
        "handling-a-failure-in-match",
        "logic",
        "passing-a-failure-on-attempt"
      ]
    },
    {
      "id": "failure.code_format",
      "kind": "error",
      "title": "failure.code_format",
      "summary": "Failure code is not lower_snake_case",
      "tokens": 178,
      "hash": "sha256:cc57949aa795a66d2a951b1eeb30bd32f9935b89b4ceee8e7932e1c1f029e0c5",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.context_field_overlap",
      "kind": "error",
      "title": "failure.context_field_overlap",
      "summary": "Field is declared for both the client and the log",
      "tokens": 244,
      "hash": "sha256:1073f800c767f0c2cc0a090af5994a15d4b1cc953ddc860332b0434dcb97da52",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.duplicate_code",
      "kind": "error",
      "title": "failure.duplicate_code",
      "summary": "Two failures have the same code, or a failure has a code the runtime already answers with itself",
      "tokens": 1146,
      "hash": "sha256:7e7d8ee20573ff753585f6db19ddc17c54fe3e16f00b52c3e94136751471cef7",
      "area": 4,
      "links": [
        "declaring-a-failure",
        "failures",
        "what-the-client-sees"
      ]
    },
    {
      "id": "failure.duplicate_context_field",
      "kind": "error",
      "title": "failure.duplicate_context_field",
      "summary": "Failure field is given twice",
      "tokens": 231,
      "hash": "sha256:5dc5d0a32675499d5117cc02eac1b96673104976cabefbaab375d9112c22e6de",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.duplicate_declaration",
      "kind": "error",
      "title": "failure.duplicate_declaration",
      "summary": "Failure is listed twice after `fails`",
      "tokens": 217,
      "hash": "sha256:2dd77dfe539ebc889b823ec3cf28f1ff606de2cce7f4ebaaab7cd31153e8f68d",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.duplicate_mapping",
      "kind": "error",
      "title": "failure.duplicate_mapping",
      "summary": "Condition is mapped twice",
      "tokens": 246,
      "hash": "sha256:d10ee8f7176483752ae610e4731e3615636805d28392a405b46c13a6fe635ac0",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.invalid_covers_nothing",
      "kind": "error",
      "title": "failure.invalid_covers_nothing",
      "summary": "Catch-all covers no rule, because every rule that can break has an arm",
      "tokens": 274,
      "hash": "sha256:e2e1bdf17e9b34459cb07a47374450d493e7a89614a071c10c2b558ba53fa738",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.invalid_outside_construction",
      "kind": "error",
      "title": "failure.invalid_outside_construction",
      "summary": "Catch-all for rules is used on something that is not a construction",
      "tokens": 353,
      "hash": "sha256:083b856676149ea09ec178b78861765af48423d2048b18d66b05150820232fdf",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.kind_required",
      "kind": "error",
      "title": "failure.kind_required",
      "summary": "A failure is declared without a `kind:` saying what sort of failure it is",
      "tokens": 510,
      "hash": "sha256:15564056bb9ad02e077a7b237e5a87b63a4b74809f721bdeb862d00b8ad9419f",
      "area": 4,
      "links": [
        "declaring-a-failure",
        "failure-kinds",
        "failures"
      ]
    },
    {
      "id": "failure.kind_runtime_only",
      "kind": "error",
      "title": "failure.kind_runtime_only",
      "summary": "Failure kind is raised only by the runtime",
      "tokens": 222,
      "hash": "sha256:cae94700b62c59b9df4cc4f7ed91bb31b2993be4878750c52c337edf3c5370eb",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.mapping_kind",
      "kind": "error",
      "title": "failure.mapping_kind",
      "summary": "Mapped failure's kind does not fit its condition",
      "tokens": 277,
      "hash": "sha256:21bb5621de806c41e6a2b26c212436ad6939ecef3afd7b30a436cd5a0bbbbc30",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.missing_context_field",
      "kind": "error",
      "title": "failure.missing_context_field",
      "summary": "Rejected failure is missing a field",
      "tokens": 217,
      "hash": "sha256:ed48194f436de3a058146a0f1d8b06f3f2e8ad088195bebb92cac253fdfdbe27",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.outcome_duplicate_arm",
      "kind": "error",
      "title": "failure.outcome_duplicate_arm",
      "summary": "Outcome match handles a failure twice",
      "tokens": 243,
      "hash": "sha256:a2b7b3dbc0d8cb88d867945c6a63f95ad1496847f73730dd05cb834bb867f7ad",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_infallible",
      "kind": "error",
      "title": "failure.outcome_infallible",
      "summary": "Outcome match is on a call that cannot fail",
      "tokens": 232,
      "hash": "sha256:52497d5e0c412522f5696436058330d29b3032e380c5d4d1cf731bad2d2c1be2",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_missing_arm",
      "kind": "error",
      "title": "failure.outcome_missing_arm",
      "summary": "Outcome match does not handle every failure",
      "tokens": 218,
      "hash": "sha256:9daa5503d82d1bcf276bec6cda9090770b80e7fc2656448275be234e19118b76",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_pattern_invalid",
      "kind": "error",
      "title": "failure.outcome_pattern_invalid",
      "summary": "Outcome match arm has a pattern for values",
      "tokens": 257,
      "hash": "sha256:e4a2a66b8268fe2027871eb7257b999150d369e2a82cd4b88ccf8cfd8cb0f193",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_subject_required",
      "kind": "error",
      "title": "failure.outcome_subject_required",
      "summary": "Outcome match is not on a call",
      "tokens": 210,
      "hash": "sha256:ef8ecbfbe85344e544c36712d5822a4a97d16889c2506508f808b17874f35629",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_success_duplicate",
      "kind": "error",
      "title": "failure.outcome_success_duplicate",
      "summary": "Outcome match repeats its success arm",
      "tokens": 243,
      "hash": "sha256:20513cf3e208606a6e688e6b11ae690332b29bb15a247134e89393e2eba3cc1d",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_success_missing",
      "kind": "error",
      "title": "failure.outcome_success_missing",
      "summary": "Outcome match has no success arm",
      "tokens": 213,
      "hash": "sha256:9272b63653ac66fd80da886175c965394dcbb381f640c91281b26a618f7f70dd",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_success_value_required",
      "kind": "error",
      "title": "failure.outcome_success_value_required",
      "summary": "Success arm passes on a failure",
      "tokens": 235,
      "hash": "sha256:46e161654544ce258e073299dc440edd7695bf236c5533cacdc85e10d8594698",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_unknown_arm",
      "kind": "error",
      "title": "failure.outcome_unknown_arm",
      "summary": "Outcome arm names a failure the call cannot produce",
      "tokens": 240,
      "hash": "sha256:632ecc254048de752d240ab54cb414c10fbbf1d8f4abef73702e301caf6e0f50",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.outcome_wildcard",
      "kind": "error",
      "title": "failure.outcome_wildcard",
      "summary": "Outcome match uses a wildcard",
      "tokens": 204,
      "hash": "sha256:6c9ccff1f2401228db14281af2c438d7a9becfd1b2e61962b5661fd18e2eaace",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.propagate_placement",
      "kind": "error",
      "title": "failure.propagate_placement",
      "summary": "Propagate is used outside a failure arm",
      "tokens": 261,
      "hash": "sha256:e5988bd318081a995dd13c39282dfb4a6660dea09ac0bcbab1692e97a842c32e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.reject_placement",
      "kind": "error",
      "title": "failure.reject_placement",
      "summary": "Reject is used inside an expression",
      "tokens": 267,
      "hash": "sha256:a24062cbf00c2d58b1d6e7b5034768ee154eb883d50bb196bf18fcc50857c347",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "failure.rule_cannot_break",
      "kind": "error",
      "title": "failure.rule_cannot_break",
      "summary": "An `attempt` block maps a rule to a failure, but the value being built can never break that rule",
      "tokens": 1040,
      "hash": "sha256:47ae8d79fda01a6fc793b7101b294af50197aa21ad4bf3f2b403454a49091c20",
      "area": 4,
      "links": [
        "creating-values",
        "failures",
        "passing-a-failure-on-attempt"
      ]
    },
    {
      "id": "failure.rule_unmapped",
      "kind": "error",
      "title": "failure.rule_unmapped",
      "summary": "An `attempt` block builds a value that can break one of its type's rules, and no arm says which failure that gives",
      "tokens": 835,
      "hash": "sha256:8401f604e56ff708ddc02c448578129d1c0b0c088bc0dda11190dafff54ab06a",
      "area": 4,
      "links": [
        "creating-values",
        "failures",
        "turning-one-failure-into-another"
      ]
    },
    {
      "id": "failure.stale_declaration",
      "kind": "error",
      "title": "failure.stale_declaration",
      "summary": "A function or action lists a failure after `fails` that nothing in it can ever raise or pass on",
      "tokens": 609,
      "hash": "sha256:ac55c07cee9e5d4a4ffcae9b2571dae7c153aacd10194fe08b12bda782c54d29",
      "area": 4,
      "links": [
        "failure.outcome_infallible",
        "failure.undeclared_propagation",
        "failures",
        "raising-a-failure-reject",
        "saying-what-can-fail-fails"
      ]
    },
    {
      "id": "failure.undeclared_propagation",
      "kind": "error",
      "title": "failure.undeclared_propagation",
      "summary": "A function or action can end with a failure that its `fails` list doesn't name",
      "tokens": 820,
      "hash": "sha256:1477c20567c87864030353ba5828def18a7592faf1833d89726a6b37a68777f4",
      "area": 4,
      "links": [
        "failure.stale_declaration",
        "failures",
        "handling-a-failure-in-match",
        "passing-a-failure-on-attempt",
        "saying-what-can-fail-fails"
      ]
    },
    {
      "id": "failure.unknown_context_field",
      "kind": "error",
      "title": "failure.unknown_context_field",
      "summary": "Rejected failure has no such field",
      "tokens": 232,
      "hash": "sha256:a512f21fa5d117279e2d8346aa129ed64515348fd3ef354e3c6fa98ca1b029e2",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.unknown_mapping",
      "kind": "error",
      "title": "failure.unknown_mapping",
      "summary": "Mapping names a condition the operation does not have",
      "tokens": 281,
      "hash": "sha256:6eb1ae4240e7cadbfae6cabb90d1170e0a56c3c21ed2506e760a42c3c2f30ca3",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "flag.declaration_invalid",
      "kind": "error",
      "title": "flag.declaration_invalid",
      "summary": "A flag in `flags { }` isn't a `Bool` or an enum of plain variants, or its `default:`, `owner:` or `expires:` is missing or isn't valid",
      "tokens": 807,
      "hash": "sha256:a1b15a61398708c155344abc7c05ee1da9c4dfce0a734aa5a6adaaed1b45a721",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags"
      ]
    },
    {
      "id": "flag.expired",
      "kind": "error",
      "title": "flag.expired",
      "summary": "A flag's `expires:` date has passed while the flag is still declared",
      "tokens": 817,
      "hash": "sha256:e93fed0b5c32d16fef9b98a2973a3d212dd0dfe05ababd4a58e22faab3bd4f76",
      "area": 16,
      "links": [
        "built-in-services",
        "declining-a-judgement-call",
        "feature-flags"
      ]
    },
    {
      "id": "flag.read_context",
      "kind": "error",
      "title": "flag.read_context",
      "summary": "A function, a constant or other pure code reads a flag, which only an action, a test or a route's `run:` can",
      "tokens": 529,
      "hash": "sha256:284dbcd7550f8d0867220a43fb4d782c02981a7279606bc86af5ef64b817d195",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags",
        "functions-and-actions"
      ]
    },
    {
      "id": "flag.store_invalid",
      "kind": "error",
      "title": "flag.store_invalid",
      "summary": "Flags' settings in `app.jadpo` hold something other than a database's `store:`",
      "tokens": 402,
      "hash": "sha256:35cfdd6d52e1663257ee1ac9ac0eeabb7976dd2a40c169acfdad97388bad933a",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags",
        "stores"
      ]
    },
    {
      "id": "flag.store_required",
      "kind": "error",
      "title": "flag.store_required",
      "summary": "An app declares flags but no database named to keep their state in, because it has several databases or none",
      "tokens": 580,
      "hash": "sha256:61dd6cc948325e7c2b432aafc468602f8dfaf6e67899e7637d3f48529ceb9640",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags",
        "stores"
      ]
    },
    {
      "id": "flag.unknown",
      "kind": "error",
      "title": "flag.unknown",
      "summary": "Code or a test's `flags:` names a flag that `flags { }` doesn't declare",
      "tokens": 782,
      "hash": "sha256:fd594c4cbcb886a72a07b46affa687e06fa0587f912fbce60a2c054c784ccc54",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags",
        "test-settings"
      ]
    },
    {
      "id": "flag.value_untested",
      "kind": "error",
      "title": "flag.value_untested",
      "summary": "A flag is read where no test that reaches the read gives it one of its values",
      "tokens": 647,
      "hash": "sha256:ec95883af8330fb6f8f8d596f01dfaaf901b7b7430288ef37a1f7043ab0d0eb0",
      "area": 16,
      "links": [
        "built-in-services",
        "feature-flags",
        "flags-changed-listed-and-removed",
        "test-settings"
      ]
    },
    {
      "id": "flags.unavailable",
      "kind": "error",
      "title": "flags.unavailable",
      "summary": "The flags' state couldn't be read or changed in their database, because it can't be reached, has no table for them yet, or changed while the command ran",
      "tokens": 925,
      "hash": "sha256:d10d2bcddbd9220499670b30121061337c5c8f2e9224c1a8a749543c644272d3",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "commands-for-the-database-settings-and-translations",
        "feature-flags",
        "tooling"
      ]
    },
    {
      "id": "format.changes_required",
      "kind": "error",
      "title": "format.changes_required",
      "summary": "A file `jadpo fmt --check` read isn't laid out as `jadpo fmt` would write it",
      "tokens": 432,
      "hash": "sha256:509d9bef0f28425719cda7ff7a66fb3a86017ad67ff76241933130947f8f5f13",
      "area": 14,
      "links": [
        "formatting",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "format.unsafe",
      "kind": "error",
      "title": "format.unsafe",
      "summary": "A file was left as it was, because what the formatter made of it didn't read back as the same code, which is a mistake in Jadpo's formatter",
      "tokens": 762,
      "hash": "sha256:5ca1aea451914dba476efd01af72c6db0dfe3daff243c216e075a55160bafc30",
      "area": 14,
      "links": [
        "formatting",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "format.write_failed",
      "kind": "error",
      "title": "format.write_failed",
      "summary": "A file `jadpo fmt` formatted couldn't be written, usually because it is read-only",
      "tokens": 475,
      "hash": "sha256:400e105acd7831d0fbc80419037f44bb414fd684afb806ac4047505da52cdf4a",
      "area": 14,
      "links": [
        "formatting",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "import.duplicate",
      "kind": "error",
      "title": "import.duplicate",
      "summary": "Name or folder imported twice",
      "tokens": 220,
      "hash": "sha256:5eea884c731f8d4b297609b54d8809fc70878c8101015c04b2d762d35984baa4",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "import.missing",
      "kind": "error",
      "title": "import.missing",
      "summary": "A file uses a name declared elsewhere in the project without bringing it in on a `use` line",
      "tokens": 552,
      "hash": "sha256:a3cd16ebf7d5ba915869ef836de92ba4a19addb315bf54648792caecb5f7cfa0",
      "area": 1,
      "links": [
        "imports",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "import.unknown",
      "kind": "error",
      "title": "import.unknown",
      "summary": "Import names nothing in its folder",
      "tokens": 246,
      "hash": "sha256:3a6018efb4e8a778d6afd957e4ae37f68e3986c6f2866efe4d1bc3a426f1a687",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "import.unneeded",
      "kind": "error",
      "title": "import.unneeded",
      "summary": "A file imports a name it already sees without a `use` line, such as a built-in or something its test subject declares",
      "tokens": 553,
      "hash": "sha256:e81f51bb36d7f82ac33f6ef9f1ae5a7d68b3f5e54f9babe8cd1752de18f81dc1",
      "area": 1,
      "links": [
        "imports",
        "project-layout-and-modules",
        "where-tests-live"
      ]
    },
    {
      "id": "import.unused",
      "kind": "error",
      "title": "import.unused",
      "summary": "Imported name the file does not use",
      "tokens": 192,
      "hash": "sha256:8bd67f782450cb5f4264dbb387e5fa0f29f7fb145f67e3df4d5f95778e440224",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "install.fetch_failed",
      "kind": "error",
      "title": "install.fetch_failed",
      "summary": "Installing a package couldn't read its git repository, or found no release there at the tag you gave",
      "tokens": 694,
      "hash": "sha256:0ceb2a12d8468aaf38cccebc55f10762d006b6b9b84219ac518c8a9fa4b18300",
      "area": 14,
      "links": [
        "commands-for-packages",
        "how-packages-are-installed-and-linked",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "id": "install.in_use",
      "kind": "error",
      "title": "install.in_use",
      "summary": "Package to remove is still used by the app",
      "tokens": 169,
      "hash": "sha256:d6af741025230e79d2cf3565289f454807bfcae5060204c3cecf4bda7564b9df",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "install.link_refused",
      "kind": "error",
      "title": "install.link_refused",
      "summary": "Linked package in a CI or production build",
      "tokens": 204,
      "hash": "sha256:4d848b886952fe70a1adf140555da7473d1dd989376b3e11d76d757e6d75750c",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "install.not_in_registry",
      "kind": "error",
      "title": "install.not_in_registry",
      "summary": "The registry has no package of the name you gave, or no such release of it",
      "tokens": 541,
      "hash": "sha256:b38cdf2ec0bcb3d25004e7237cebd3c2779d1a8ac760e514c85465645196c7c1",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "install.not_proved",
      "kind": "error",
      "title": "install.not_proved",
      "summary": "The registry's answers don't prove the release is the one in its public log",
      "tokens": 650,
      "hash": "sha256:7c9e981406bc0e02af2d8caf8d1316e9aa8be8d4e6462b7f0fd95fec6735014f",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "install.surface_mismatch",
      "kind": "error",
      "title": "install.surface_mismatch",
      "summary": "The package you are installing has code that offers something different from its committed `surface.jadpo_record`",
      "tokens": 905,
      "hash": "sha256:e64efabaeef4de160f4d87f5c62ee6000cf2a019e2b498d3b609d887a8e0d5c4",
      "area": 14,
      "links": [
        "commands-for-packages",
        "how-packages-are-installed-and-linked",
        "the-surface",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "id": "install.yanked",
      "kind": "error",
      "title": "install.yanked",
      "summary": "The release you asked for has been yanked, so it can't be newly installed",
      "tokens": 413,
      "hash": "sha256:ea4378937d960f39785a6e52bb5a371bc9c47e333afdc82214671f9137b99587",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "layout.call_direction",
      "kind": "error",
      "title": "layout.call_direction",
      "summary": "Code in `shared/` uses a declaration that belongs to one domain",
      "tokens": 678,
      "hash": "sha256:91b576bf2f28d746b656ce23a64b0fd84b890d6f86ca89d9b8f89539d9b2bf94",
      "area": 1,
      "links": [
        "domains",
        "imports",
        "project-layout-and-modules",
        "sharing-and-promotion"
      ]
    },
    {
      "id": "layout.file_name_mismatch",
      "kind": "error",
      "title": "layout.file_name_mismatch",
      "summary": "File name does not match its declaration",
      "tokens": 180,
      "hash": "sha256:e5db71d7261ad376014106f0e4edd246a9499d937601a8a24327a7d2cb181018",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.promotion_required",
      "kind": "error",
      "title": "layout.promotion_required",
      "summary": "Declaration is used beyond the file that holds it",
      "tokens": 902,
      "hash": "sha256:524fd4743674b48a744ae835e3c3cfc548b34a9adda82f11876c6e7cc0bb2819",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.route_prefix_mismatch",
      "kind": "error",
      "title": "layout.route_prefix_mismatch",
      "summary": "Route group prefix does not match its file name",
      "tokens": 212,
      "hash": "sha256:6e79a633425740ec0d62d9d0c39a1314f1a70d7e72275a6471ffbf00df06a214",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.test_without_subject",
      "kind": "error",
      "title": "layout.test_without_subject",
      "summary": "Test file has no subject beside it",
      "tokens": 192,
      "hash": "sha256:dbaad78a7b4682149b87fd1d4153d2afbef9395346fe7b426e39a2501c94a4c4",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.unknown_location",
      "kind": "error",
      "title": "layout.unknown_location",
      "summary": "Jadpo file is outside the fixed layout",
      "tokens": 226,
      "hash": "sha256:34e8c9746b514175ca4a7a2b736058a5131d54c52ec41938022a0a2dca8877fe",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.unused_declaration",
      "kind": "error",
      "title": "layout.unused_declaration",
      "summary": "Shared declaration is not used",
      "tokens": 596,
      "hash": "sha256:d51cff6a9c4e692faf3e47bc1fe7e996bf07ea0b9b9f69c240a0d6f45e142dc2",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "layout.wrong_folder",
      "kind": "error",
      "title": "layout.wrong_folder",
      "summary": "Declaration is in the wrong folder",
      "tokens": 191,
      "hash": "sha256:b48190717b5c7de1541ceaf7f4064a52b4e3d70bd97fda3207e4e28974b9fd66",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "library.similar_exists",
      "kind": "error",
      "title": "library.similar_exists",
      "summary": "A library function already does the same",
      "tokens": 424,
      "hash": "sha256:1a082d3839c848badc1bd8de3d09323d2796a3465317e0cc5c7e08e4c70284eb",
      "area": 1,
      "links": [
        "declining-a-judgement-call",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "migration.apply_failed",
      "kind": "error",
      "title": "migration.apply_failed",
      "summary": "Applying the project's migrations to a database stopped at a step that failed",
      "tokens": 744,
      "hash": "sha256:2dfb5d35c3e68dbd2987afdb5f4346141b8e88fba19bf49c87fba91f7bc1d05e",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "computed-backfills",
        "database-and-other-connection-urls",
        "migrations",
        "tooling"
      ]
    },
    {
      "id": "migration.backfill_can_fail",
      "kind": "error",
      "title": "migration.backfill_can_fail",
      "summary": "Computed backfill can fail",
      "tokens": 311,
      "hash": "sha256:4a69a8cec234d5d7fb4797d9c61f34e4ff95a923b7d7ad14cf68c73c60c04a42",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.backfill_outside_row",
      "kind": "error",
      "title": "migration.backfill_outside_row",
      "summary": "Computed backfill reads more than its row",
      "tokens": 767,
      "hash": "sha256:b5247e7d9a350ab64d0aa0ab0f4055b6b6b6db9017757044025f301935098272",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.decision_invalid",
      "kind": "error",
      "title": "migration.decision_invalid",
      "summary": "Migration decision does not fit its change",
      "tokens": 191,
      "hash": "sha256:3629e23a2b0a4c3824fe2b29a9ce387b63f04430188a5782740d3b4cec51dc2f",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.decision_required",
      "kind": "error",
      "title": "migration.decision_required",
      "summary": "A migration needs your decision, such as a value for records already stored, and its `changes.jadpo` doesn't give one yet",
      "tokens": 763,
      "hash": "sha256:185f369703cb52ee39b0ed6a2833b33d98b02563319f39bd664962af82ec7a6c",
      "area": 5,
      "links": [
        "computed-backfills",
        "data",
        "migrations"
      ]
    },
    {
      "id": "migration.decision_unknown",
      "kind": "error",
      "title": "migration.decision_unknown",
      "summary": "Migration decides about something that is not changing",
      "tokens": 255,
      "hash": "sha256:168f1546bc3d81f37113fd148475583c600d0e1bb761d0a89830d3f6eb7cc8a0",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.drop_not_accepted",
      "kind": "error",
      "title": "migration.drop_not_accepted",
      "summary": "A migration removes data, and no acceptance in the project says a person agreed to it",
      "tokens": 802,
      "hash": "sha256:fb95261835c9667e31144d3a3b82a03f86d92a90038b4064561b12543798e216",
      "area": 14,
      "links": [
        "acceptance.missing",
        "acceptances",
        "migrations",
        "tooling"
      ]
    },
    {
      "id": "migration.extension_missing",
      "kind": "error",
      "title": "migration.extension_missing",
      "summary": "The project's migrations need a PostgreSQL extension, such as pgvector, that the database server doesn't offer or that the role applying them can't create",
      "tokens": 1158,
      "hash": "sha256:7be70b09801af0272834bb030695933da72479d9790577ecfc72b6ab781a3e62",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "migration.extension_outdated",
        "migrations",
        "tooling",
        "without-pgvector"
      ]
    },
    {
      "id": "migration.extension_outdated",
      "kind": "error",
      "title": "migration.extension_outdated",
      "summary": "The database server's PostgreSQL extension, such as pgvector, is older than the project's migrations and queries need",
      "tokens": 977,
      "hash": "sha256:e7486a65e823827ffafa990ee13fdbde951e152d1b479b3a9a9cc0ab8c073390",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "embeddings-and-search",
        "migration.extension_missing",
        "tooling",
        "without-pgvector"
      ]
    },
    {
      "id": "migration.out_of_date",
      "kind": "error",
      "title": "migration.out_of_date",
      "summary": "The entities ask for a database schema that no migration has written yet, because they are new or have changed since the latest migration",
      "tokens": 1076,
      "hash": "sha256:eea738bc02d609ca0945ad0fcec7292456b27858cdc0ab2729c0e390e8a97823",
      "area": 5,
      "links": [
        "data",
        "migration.decision_required",
        "migrations"
      ]
    },
    {
      "id": "migration.record_invalid",
      "kind": "error",
      "title": "migration.record_invalid",
      "summary": "A file in a migration's folder is missing, can't be read, or was changed by hand, so Jadpo can't use the migration",
      "tokens": 562,
      "hash": "sha256:4482e530fcedaed28202d9dd55140b1439cacc47683074141a9de697e45b6102",
      "area": 5,
      "links": [
        "data",
        "migrations",
        "what-is-committed-and-why"
      ]
    },
    {
      "id": "migration.store_diverged",
      "kind": "error",
      "title": "migration.store_diverged",
      "summary": "The migrations a database has applied don't match the project's: one has changed since it ran, the project doesn't have one, or one comes out of order",
      "tokens": 995,
      "hash": "sha256:f9c6f3b831965df0b3e809cc1d9aaa8878aeb406de928d6b5e460b5effb7d1a8",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "migration.record_invalid",
        "migrations",
        "tooling"
      ]
    },
    {
      "id": "migration.unfinished",
      "kind": "error",
      "title": "migration.unfinished",
      "summary": "Latest migration is not finished",
      "tokens": 216,
      "hash": "sha256:c8135e5b738fd3dfbdb9254c49061f671120be32adf431d15250c76cac8a3c5a",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "naming.folded_collision",
      "kind": "error",
      "title": "naming.folded_collision",
      "summary": "Two names fold to the same file name",
      "tokens": 243,
      "hash": "sha256:70ee83670880ac0984d7faef795f216b6cdd484b49e7f989caf9eefa6b4dac1b",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "naming.generic_name",
      "kind": "error",
      "title": "naming.generic_name",
      "summary": "A domain or library is called something generic, such as `helpers` or `utils`, that says nothing about what it holds",
      "tokens": 869,
      "hash": "sha256:debc7ec5d6767e1f8d2277e18a936b9aeec2971aa9f2df4a7a0377505cee2179",
      "area": 1,
      "links": [
        "acceptances",
        "domains",
        "naming",
        "ownership-and-calls-replace-modules",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "naming.round_trip",
      "kind": "error",
      "title": "naming.round_trip",
      "summary": "Name does not survive conversion to its file name",
      "tokens": 183,
      "hash": "sha256:01df93056743b4d3f57f97bd0ef7bf0bd5144980f961eb6f85b304109d95e89e",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "package.action_invalid",
      "kind": "error",
      "title": "package.action_invalid",
      "summary": "Package action does what package code may not",
      "tokens": 389,
      "hash": "sha256:404b771c4a39ba291728190c71b09c6a520da321fcd365316cbfd4945cf633ab",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.advisory",
      "kind": "error",
      "title": "package.advisory",
      "summary": "An advisory is against a declaration of an installed package that the app reaches",
      "tokens": 583,
      "hash": "sha256:b7bafc62b67c347f70f78ac786cd52c071acdc78a603850ac300e34db6865cdb",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "package.digest_mismatch",
      "kind": "error",
      "title": "package.digest_mismatch",
      "summary": "The files of an installed package in `packages/` have been changed, added or removed since it was installed",
      "tokens": 930,
      "hash": "sha256:646163ad365b251a054b00ed2c8231f57851bcacb65e6b310fc33d1815b2ca0e",
      "area": 11,
      "links": [
        "external-services",
        "how-packages-are-installed-and-linked",
        "where-packages-come-from",
        "where-packages-live"
      ]
    },
    {
      "id": "package.emails_folder",
      "kind": "error",
      "title": "package.emails_folder",
      "summary": "Package holds email templates",
      "tokens": 195,
      "hash": "sha256:9ccf9c203f238889ecae65a3ef20e08c22fc7c207b1e6ed878d7816f4da1428e",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.index_invalid",
      "kind": "error",
      "title": "package.index_invalid",
      "summary": "Package's index is missing, or holds what an index can't",
      "tokens": 267,
      "hash": "sha256:9f838518f0dbb8c3fd27da2f703781ae6a1b79ee5565959cd68b8e602d10acc2",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.licence_not_allowed",
      "kind": "error",
      "title": "package.licence_not_allowed",
      "summary": "An installed package says its licence is proprietary, but it wasn't installed from a git repository",
      "tokens": 921,
      "hash": "sha256:6e31e5ce064e081df446cffcfeffb864e92aa80a9b7a67f981be60e846cb79f3",
      "area": 11,
      "links": [
        "developing-and-publishing-a-package",
        "external-services",
        "the-package-format",
        "where-packages-come-from",
        "where-packages-live"
      ]
    },
    {
      "id": "package.name_mismatch",
      "kind": "error",
      "title": "package.name_mismatch",
      "summary": "Package's index names another package than its folder",
      "tokens": 262,
      "hash": "sha256:1fe74422918ba6b48ebfa571dfdb480a0924138a104cf518a407cc88150f9f54",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.name_taken",
      "kind": "error",
      "title": "package.name_taken",
      "summary": "A package has the same name as one of the app's domains, libraries, declarations or other packages",
      "tokens": 643,
      "hash": "sha256:9f5712336b859a30d92bdaea116716bcc6f83e7a835afc476fc6af3c1ec88669",
      "area": 11,
      "links": [
        "external-services",
        "naming",
        "where-packages-live"
      ]
    },
    {
      "id": "package.not_installed",
      "kind": "error",
      "title": "package.not_installed",
      "summary": "The app's lock file, `jadpo.lock`, lists a package whose folder in `packages/` isn't there",
      "tokens": 694,
      "hash": "sha256:3faf2960ccb094b1dcdcb24df94289a7481f42b40021d9a86d86b047e9bd370d",
      "area": 11,
      "links": [
        "external-services",
        "how-packages-are-installed-and-linked",
        "where-packages-come-from",
        "where-packages-live"
      ]
    },
    {
      "id": "package.not_locked",
      "kind": "error",
      "title": "package.not_locked",
      "summary": "A package sits in `packages/`, but `jadpo.lock` has no line for it, so it was copied in rather than installed",
      "tokens": 704,
      "hash": "sha256:07c01a843c0de27a8611b3b413a0bb2e97ff2dbd9b185fe0d5d04bb5bf4492c3",
      "area": 11,
      "links": [
        "external-services",
        "how-packages-are-installed-and-linked",
        "where-packages-come-from",
        "where-packages-live"
      ]
    },
    {
      "id": "package.not_public",
      "kind": "error",
      "title": "package.not_public",
      "summary": "Code uses a package's declaration that isn't public",
      "tokens": 258,
      "hash": "sha256:7a3e9753054938175d1407b13748da0f8555b31cf091db825fe77138a5afddc8",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.operation_invalid",
      "kind": "error",
      "title": "package.operation_invalid",
      "summary": "Provider operation holds what it can't, or lacks what it needs",
      "tokens": 397,
      "hash": "sha256:5bf25a36cac013f79348e2e03da1f6e1ab7e8bc2c54e84048d676620aa13ccfa",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.own_source_invalid",
      "kind": "error",
      "title": "package.own_source_invalid",
      "summary": "Application's `packages:` lists your company's git locations wrongly",
      "tokens": 1083,
      "hash": "sha256:c842b03fdcea5620675503df047dbf18106f51f1ddb3e0963522902908c46af0",
      "area": 11,
      "links": [
        "acceptances",
        "external-services",
        "where-packages-come-from"
      ]
    },
    {
      "id": "package.provider_invalid",
      "kind": "error",
      "title": "package.provider_invalid",
      "summary": "Provider file holds what it can't, or lacks `protocol:`",
      "tokens": 659,
      "hash": "sha256:64ab51bc58ef151a7a74782103459b2133f63e785215d72d652cae98e17f5f70",
      "area": 11,
      "links": [
        "erasure-at-providers",
        "external-services"
      ]
    },
    {
      "id": "package.provider_missing",
      "kind": "error",
      "title": "package.provider_missing",
      "summary": "Package has resources but no `provider.jadpo`",
      "tokens": 240,
      "hash": "sha256:0c481a29504f86ec5a18a00bcb5624b9a600ffa7050df4e5f258fa34a2c218c1",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.provider_translations",
      "kind": "error",
      "title": "package.provider_translations",
      "summary": "Provider package carries translations",
      "tokens": 238,
      "hash": "sha256:d5da2c72a511a1d1ac0a92c24ae0646dd6dc61f92e5563e9aab1507d9e404ed4",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.reserved_name",
      "kind": "error",
      "title": "package.reserved_name",
      "summary": "App's own integration takes a provider's reserved name",
      "tokens": 262,
      "hash": "sha256:38d3cb04ff896ec4ae22ae87d2b1e4b3eb763302e1694c0d5c3863c77348a71b",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.standard_candidate",
      "kind": "error",
      "title": "package.standard_candidate",
      "summary": "Provider field looks like a standard type the package doesn't use",
      "tokens": 636,
      "hash": "sha256:2787823d9749b503f8c98ddc3454833ef389dfd42142c8f4d633fb8f5538d081",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.version_needed",
      "kind": "error",
      "title": "package.version_needed",
      "summary": "Your code names something through a package that the app holds in two versions, without saying which version it means",
      "tokens": 692,
      "hash": "sha256:9f96967548a923cda9c9f9bcd6fee6a40db1af1043eb86cbc424dec856dd0142",
      "area": 11,
      "links": [
        "external-services",
        "package.version_unneeded",
        "where-packages-live"
      ]
    },
    {
      "id": "package.version_unneeded",
      "kind": "error",
      "title": "package.version_unneeded",
      "summary": "Name written through a package held in one version carries a version",
      "tokens": 303,
      "hash": "sha256:a8b9224b3eafc4dc9587c2d97818d42afd3afeeb74eaa3002d72434abeefe1f8",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.wire_invalid",
      "kind": "error",
      "title": "package.wire_invalid",
      "summary": "Field says how it is sent in a way it can't",
      "tokens": 418,
      "hash": "sha256:ba056aba1302fa4c803accb2b5c3ba2ab5c6e38bf17ef4d125e50b5b4ae57269",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.wire_name_invalid",
      "kind": "error",
      "title": "package.wire_name_invalid",
      "summary": "Wire name outside a provider package, or one the type already uses",
      "tokens": 547,
      "hash": "sha256:f077fa47eee130297b9fe29b2d81113069a67c51d15727a7c9079384b9b88569",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "policy.binding_invalid",
      "kind": "error",
      "title": "policy.binding_invalid",
      "summary": "Policy names something that can't say who",
      "tokens": 532,
      "hash": "sha256:587fdbd4c7316e848418d40138ad083adee4ebd5dea9c0b0c17514efba0d0a15",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.call_ungranted",
      "kind": "error",
      "title": "policy.call_ungranted",
      "summary": "An action listed under `actions:` calls another action that refuses some of the people the listed action's line lets in",
      "tokens": 1487,
      "hash": "sha256:d3b0706596d512d38e68f0897033ed830fd31c9bd54eb6442db32ebac216930e",
      "area": 9,
      "links": [
        "acceptances",
        "action-permissions",
        "declining-a-judgement-call",
        "policy",
        "protecting-policy"
      ]
    },
    {
      "id": "policy.declaration_duplicate",
      "kind": "error",
      "title": "policy.declaration_duplicate",
      "summary": "Policy is declared twice",
      "tokens": 265,
      "hash": "sha256:8b19b43cdc8b7082002ac255d3d64bb08d27150870b550e7ccca443aa52b9414",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.effect_duplicate",
      "kind": "error",
      "title": "policy.effect_duplicate",
      "summary": "Policy gives the same list twice",
      "tokens": 266,
      "hash": "sha256:2e71d48f7eb3a8d556b91e6db3748d2d0698bafa968acc1e1a30800395296fe6",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.effect_ungranted",
      "kind": "error",
      "title": "policy.effect_ungranted",
      "summary": "A route runs an action that nobody is allowed to call, because nothing in the app says who may",
      "tokens": 1296,
      "hash": "sha256:bae776da8325fbf42ca6574355353da8cce115ea4d19dc51be4f1f8e479a7a44",
      "area": 9,
      "links": [
        "a-membership-role",
        "action-permissions",
        "anyone-signed-in-or-anyone",
        "policy",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "policy.effect_unknown",
      "kind": "error",
      "title": "policy.effect_unknown",
      "summary": "Policy holds something that isn't a grant or a setting",
      "tokens": 304,
      "hash": "sha256:0d97d5c98f3625059c4dd5e2cd526399ce846c3492dab41b5fa42d2e8e52e43d",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.event_tenant_unproved",
      "kind": "error",
      "title": "policy.event_tenant_unproved",
      "summary": "An event or a batch names a tenant its action never reached under its caller's policy",
      "tokens": 2292,
      "hash": "sha256:ebf52f18e44aa408d3cc134a7460df94b92e2795165f64f629f922412f17565b",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.field_widens_entity",
      "kind": "error",
      "title": "policy.field_widens_entity",
      "summary": "A field's own `policy:` lets in someone its record's grants don't",
      "tokens": 765,
      "hash": "sha256:70a289845c4f22c807b799501a82bba1203580c69e7bfe6f064b45d20214addb",
      "area": 9,
      "links": [
        "anyone-signed-in-or-anyone",
        "field-restrictions",
        "grants",
        "policy",
        "policy.output_field_unproved"
      ]
    },
    {
      "id": "policy.membership_duplicate",
      "kind": "error",
      "title": "policy.membership_duplicate",
      "summary": "Entity declares a membership twice, or gives one of its parts twice",
      "tokens": 345,
      "hash": "sha256:3a92d57b2764af7c3fb32ce7da02fcbe2b206214e57a3e89584eb1cbaa26eda4",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.membership_member_required",
      "kind": "error",
      "title": "policy.membership_member_required",
      "summary": "Membership doesn't say who holds it",
      "tokens": 286,
      "hash": "sha256:c5e091b5f21b7f832c8e97e44bafbd500a5be751e65b535f806948c99c99c3aa",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.membership_role_required",
      "kind": "error",
      "title": "policy.membership_role_required",
      "summary": "Membership doesn't say which field holds the role",
      "tokens": 292,
      "hash": "sha256:d18c9e620b21a503f0e9454022953bd567a6b212eb1dbc61df593294cf2242bd",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.membership_scope_required",
      "kind": "error",
      "title": "policy.membership_scope_required",
      "summary": "Membership doesn't say what it is held in",
      "tokens": 325,
      "hash": "sha256:1ab10fd23991f5c01596bf3d8cc3af2b5dcb9e7fa2e64997fde8a20032aae439",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.output_field_unproved",
      "kind": "error",
      "title": "policy.output_field_unproved",
      "summary": "A query or action lets a caller see a field's value, directly or through what it decides, though not every caller may read that field",
      "tokens": 6753,
      "hash": "sha256:0274a83e5809202740f62766aff0139651827e02e02d40b961997913d051b699",
      "area": 9,
      "links": [
        "action-permissions",
        "field-restrictions",
        "policy",
        "protecting-policy",
        "subscribers"
      ]
    },
    {
      "id": "policy.public_grant_missing",
      "kind": "error",
      "title": "policy.public_grant_missing",
      "summary": "A route that anyone may call, with no sign-in, reads or changes a record that only signed-in people are allowed to see",
      "tokens": 970,
      "hash": "sha256:7fc2a9f4b811389fd43dcf941443576ec75a84362cde865448127f58198e7cd7",
      "area": 9,
      "links": [
        "anyone-signed-in-or-anyone",
        "grants",
        "policy",
        "protecting-policy",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "policy.requirement_invalid",
      "kind": "error",
      "title": "policy.requirement_invalid",
      "summary": "A role's line in `requires:` holds something a requirement can't",
      "tokens": 967,
      "hash": "sha256:f8b485bf2ef5f4d6bf3f43381c4c3236ede0d617e25fa1391660c7ab4497889f",
      "area": 9,
      "links": [
        "a-membership-role",
        "checking-the-person-sign-in",
        "policy",
        "starting-and-ending-a-session"
      ]
    },
    {
      "id": "policy.requirement_unsatisfiable",
      "kind": "error",
      "title": "policy.requirement_unsatisfiable",
      "summary": "A role's requirement asks for a sign-in that no way in the app can give",
      "tokens": 1022,
      "hash": "sha256:9938a0b65707d086d0fb3ac70e4db8e36535aae05e030356a89259eaf7890d7f",
      "area": 9,
      "links": [
        "a-membership-role",
        "checking-the-person-sign-in",
        "policy",
        "ways-to-sign-in"
      ]
    },
    {
      "id": "policy.requirements_incomplete",
      "kind": "error",
      "title": "policy.requirements_incomplete",
      "summary": "A membership's `requires:` leaves out one of its roles",
      "tokens": 1037,
      "hash": "sha256:edb866e1a4a0a8efc1510919f75da92dbc7462faa4c16c9c9bf217fb06a0cf7b",
      "area": 9,
      "links": [
        "a-membership-role",
        "acceptances",
        "checking-the-person-sign-in",
        "policy"
      ]
    },
    {
      "id": "policy.role_field_create_forbidden",
      "kind": "error",
      "title": "policy.role_field_create_forbidden",
      "summary": "Create sets the user field its grant needs from the request, not the caller",
      "tokens": 480,
      "hash": "sha256:9d06768e7be0e4eb9f99d1dc4ab3d18ed2bc36994da11a9d4143325e638fbc5c",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.role_unbound",
      "kind": "error",
      "title": "policy.role_unbound",
      "summary": "Grant names a role no membership holds",
      "tokens": 238,
      "hash": "sha256:eb70af9939ea8b9546faaf40cefeadcab9cbd66db3c9825be81019244fa85e49",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.scope_ambiguous",
      "kind": "error",
      "title": "policy.scope_ambiguous",
      "summary": "Grant doesn't say which reference a role or the tenant applies through",
      "tokens": 438,
      "hash": "sha256:238db6fc1198f4d1de71512965ad362a9d1bfecf69c5455cd9e3f7c1bba59edb",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.scope_duplicate",
      "kind": "error",
      "title": "policy.scope_duplicate",
      "summary": "A scope or tenant is given twice",
      "tokens": 302,
      "hash": "sha256:ee66e0505a6567ed98a8a4ef7cdd1bb37e2b9209563f9373ce553d39ea9080d4",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.scope_missing",
      "kind": "error",
      "title": "policy.scope_missing",
      "summary": "An entity names a role held in another record, or belongs to the app's tenant, but has no reference to that record",
      "tokens": 1295,
      "hash": "sha256:89092930c58450d7a92b7e6f575e89810180505fb09136149994215e8599dc60",
      "area": 9,
      "links": [
        "a-membership-role",
        "policy",
        "tenancy"
      ]
    },
    {
      "id": "policy.subject_duplicate",
      "kind": "error",
      "title": "policy.subject_duplicate",
      "summary": "Grant names the same caller twice",
      "tokens": 257,
      "hash": "sha256:a2fe6b98d6a6db5e7daab39f02fde5c524762937a76b441e96060f33a7998eaf",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.system_grant_missing",
      "kind": "error",
      "title": "policy.system_grant_missing",
      "summary": "A schedule or subscriber reaches something whose list doesn't name `Access.system`, the one way an entity lets background work in",
      "tokens": 2821,
      "hash": "sha256:8c6cc4c36423521827a5e0032d8982534c07716ac9bfa58ff939dae5369a9868",
      "area": 9,
      "links": [
        "policy",
        "policy-and-background-work",
        "subscribers"
      ]
    },
    {
      "id": "prompt.free_text_in_instructions",
      "kind": "error",
      "title": "prompt.free_text_in_instructions",
      "summary": "A prompt writes a free-text value, such as text a user typed, in its instructions rather than in its request",
      "tokens": 733,
      "hash": "sha256:89372c535152b331ea1ca9b5baa8260166d603a7e2c82c085d73d22d42d21155",
      "area": 21,
      "links": [
        "ai",
        "prompts-as-files",
        "safety-and-privacy"
      ]
    },
    {
      "id": "prompt.placeholder_type",
      "kind": "error",
      "title": "prompt.placeholder_type",
      "summary": "A prompt's field is of a type a prompt can't send",
      "tokens": 293,
      "hash": "sha256:8e80a124dfa64d9744cce09cb4750faed4bd7fbcbda22d77aeee6ba16b4c0c2e",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "prompt.placeholder_unknown",
      "kind": "error",
      "title": "prompt.placeholder_unknown",
      "summary": "A prompt's text writes a field its type does not have",
      "tokens": 251,
      "hash": "sha256:5d80d81c3d9de85f792ba3755ffb75793115f6c12f13db324e342dcbf0e77a8d",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "prompt.placeholder_unused",
      "kind": "error",
      "title": "prompt.placeholder_unused",
      "summary": "A prompt's type has a field that its prompt file never writes",
      "tokens": 674,
      "hash": "sha256:adc94265aa4e2045808a38a1bc19f8561e047bf71995ead7b7b78e6caaa3daca",
      "area": 21,
      "links": [
        "ai",
        "prompt.free_text_in_instructions",
        "prompts-as-files"
      ]
    },
    {
      "id": "prompt.section_missing",
      "kind": "error",
      "title": "prompt.section_missing",
      "summary": "A prompt and its file don't make its two sections, each once and in order",
      "tokens": 275,
      "hash": "sha256:067f452934b7bc27a06939f0512ad61c3e154cbb0920ee73ea49b0932aa2943d",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "protocol.mismatch",
      "kind": "error",
      "title": "protocol.mismatch",
      "summary": "A registry's OpenAPI document differs from the registry protocol",
      "tokens": 439,
      "hash": "sha256:2396770b9dac8b4cf468a0d450aa94c0ff6761ca08ebd7fda844760bf704200e",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "protocol.unreadable",
      "kind": "error",
      "title": "protocol.unreadable",
      "summary": "The document given to `jadpo package protocol` couldn't be read as OpenAPI's JSON",
      "tokens": 461,
      "hash": "sha256:bd00679ceb10c614c578397736d90a92d933273c6b370cc2c76b99e2b77d1775",
      "area": 14,
      "links": [
        "api.route_needs_sign_in",
        "commands-for-packages",
        "openapi",
        "tooling"
      ]
    },
    {
      "id": "publish.behaviour_changed",
      "kind": "error",
      "title": "publish.behaviour_changed",
      "summary": "An example or test of a package's last release fails against its new version, and the change isn't marked a fix",
      "tokens": 970,
      "hash": "sha256:d3c018b7a3355d9eec4a0ab617871fa1109ff8dd8e157c688e5ea404f2386b4a",
      "area": 14,
      "links": [
        "commands-for-packages",
        "developing-and-publishing-a-package",
        "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.breaking_change",
      "kind": "error",
      "title": "publish.breaking_change",
      "summary": "A package's new version changes or removes something its last release offered, within the same major version",
      "tokens": 871,
      "hash": "sha256:4b9b52f4137a66ec823984239d72a68c8ae8bd41cda2f41fc299b976cdfaa41e",
      "area": 14,
      "links": [
        "commands-for-packages",
        "developing-and-publishing-a-package",
        "how-the-surface-and-the-publishing-bar-work",
        "the-surface",
        "tooling",
        "where-packages-live"
      ]
    },
    {
      "id": "publish.changelog_missing",
      "kind": "error",
      "title": "publish.changelog_missing",
      "summary": "Package's changelog doesn't say why its new version is released",
      "tokens": 213,
      "hash": "sha256:18536d542ad85465222f897bcad323198227a105c9f372e594350a51b1f4ffdd",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.description_missing",
      "kind": "error",
      "title": "publish.description_missing",
      "summary": "Package's public declaration has no description",
      "tokens": 424,
      "hash": "sha256:8d5d89ede3168b2b09ba75886bb137ed2af6cd2335d0d36b0c849ea3618ec391",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.example_failed",
      "kind": "error",
      "title": "publish.example_failed",
      "summary": "Example in a package's description doesn't compile or doesn't hold",
      "tokens": 212,
      "hash": "sha256:90600c7cd36db8f1b78f7518e443fd4898840cbb15214564e6a8ddbf3d390709",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.example_missing",
      "kind": "error",
      "title": "publish.example_missing",
      "summary": "Package's function has no example, or a failure it raises is shown by none",
      "tokens": 296,
      "hash": "sha256:24c0f64b502d4e7a678f57eaaa9e2ac5d35e867436cde1f8c603b14d87e16207",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.failed",
      "kind": "error",
      "title": "publish.failed",
      "summary": "The registry's verifier refused the release",
      "tokens": 517,
      "hash": "sha256:96a5b65d2fe0dac2cddfdc43f1748375474aecac699732d8b5156fd7596c1087",
      "area": 14,
      "links": [
        "developing-and-publishing-a-package",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.file_not_allowed",
      "kind": "error",
      "title": "publish.file_not_allowed",
      "summary": "A commit holds a file a release can't: anything but Jadpo source and the package's text files",
      "tokens": 635,
      "hash": "sha256:89e565bb78eddd434fb16a088b1eef44add5fe17065dceaf6208a4c5088c80a7",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-public-registry",
        "the-verifier",
        "tooling"
      ]
    },
    {
      "id": "publish.licence_proprietary",
      "kind": "error",
      "title": "publish.licence_proprietary",
      "summary": "A package's licence is `Licence.proprietary`, which the public registry refuses",
      "tokens": 633,
      "hash": "sha256:5793021d65bfe5893e4943d37e55e9643020e47e49f55f3279394256aa7e5b52",
      "area": 14,
      "links": [
        "commands-for-packages",
        "developing-and-publishing-a-package",
        "the-package-format",
        "tooling"
      ]
    },
    {
      "id": "publish.not_at_tag",
      "kind": "error",
      "title": "publish.not_at_tag",
      "summary": "What `jadpo package publish` would ask for isn't a pushed `v<version>` tag whose commit is the one checked out",
      "tokens": 573,
      "hash": "sha256:1aacac1212606753a1df72bc0aaa02984d44360680dd08f7e328468c80277d26",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.publisher_mismatch",
      "kind": "error",
      "title": "publish.publisher_mismatch",
      "summary": "A release names another publisher than the one asked to publish it",
      "tokens": 688,
      "hash": "sha256:a8a7da0c1696f265b347174ffdf935e28185a2685165f776034c51d739ee6e86",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.publisher_missing",
      "kind": "error",
      "title": "publish.publisher_missing",
      "summary": "A package's index names no publisher, and it has to for the registry",
      "tokens": 559,
      "hash": "sha256:a3c4f39a01b025353b2b86b2e4e392db31c94a26be05b1e719dea0ba48d3dc2f",
      "area": 14,
      "links": [
        "developing-and-publishing-a-package",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.repository_refused",
      "kind": "error",
      "title": "publish.repository_refused",
      "summary": "The package's repository isn't one the registry can fetch: a public git repository reached over HTTPS",
      "tokens": 540,
      "hash": "sha256:b643e9c4ba9fae3208bd123759b364486c10c3da7c5e219da3b29e6bd69e5b2c",
      "area": 14,
      "links": [
        "developing-and-publishing-a-package",
        "the-public-registry",
        "tooling"
      ]
    },
    {
      "id": "publish.sample_missing",
      "kind": "error",
      "title": "publish.sample_missing",
      "summary": "Package's recipes have no sample app with one domain to compile in",
      "tokens": 414,
      "hash": "sha256:9f3ed4aa6d97fb1fcbc893ca65c2b591859d6240bdafebb273fea940c0626cf0",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.stale_files",
      "kind": "error",
      "title": "publish.stale_files",
      "summary": "A commit's `surface.jadpo_record` or changelog list isn't what the package's code gives",
      "tokens": 645,
      "hash": "sha256:0b9419dd8bd009ea0942deca94d30de1d959041dc960cb79c11d9914c9f5c4c0",
      "area": 14,
      "links": [
        "commands-for-packages",
        "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
        "the-surface",
        "the-verifier",
        "tooling"
      ]
    },
    {
      "id": "publish.too_large",
      "kind": "error",
      "title": "publish.too_large",
      "summary": "A commit's release is past the size limit",
      "tokens": 543,
      "hash": "sha256:e9f9800cd37f5fbcf19309adf90a2773c554249cf98b8b63a8dbf883b91a510c",
      "area": 14,
      "links": [
        "commands-for-packages",
        "the-public-registry",
        "the-verifier",
        "tooling"
      ]
    },
    {
      "id": "query.aggregate_argument",
      "kind": "error",
      "title": "query.aggregate_argument",
      "summary": "Aggregate is given the wrong arguments",
      "tokens": 258,
      "hash": "sha256:f602092dd530c54f5c416766763fb70fe85d61996abccaf9f2a9ae8d0e369980",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.aggregate_field",
      "kind": "error",
      "title": "query.aggregate_field",
      "summary": "Aggregate cannot be worked out over this field",
      "tokens": 241,
      "hash": "sha256:1c48d29982eb752ac4b0d88af5612feba1d7795d99f29c901f83ff9011ed0d18",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.aggregate_unknown",
      "kind": "error",
      "title": "query.aggregate_unknown",
      "summary": "Aggregate entry is not count, sum, min, max or average",
      "tokens": 256,
      "hash": "sha256:afa02d34c5861be6c707649053928874f38e8509040ec1f143ec082c539e53f8",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.condition_unsupported",
      "kind": "error",
      "title": "query.condition_unsupported",
      "summary": "Query condition is not one an index can serve",
      "tokens": 522,
      "hash": "sha256:32216b4a0aef450f9a557573d058d72955d0fab4652bee082659952d4913953c",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.from_not_entity",
      "kind": "error",
      "title": "query.from_not_entity",
      "summary": "Query reads something that is not an entity",
      "tokens": 221,
      "hash": "sha256:a22d16cf14a17be141c1603b32a6e6814678a601af57cea9e3b3b7cb8cac7228",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.geometry_field",
      "kind": "error",
      "title": "query.geometry_field",
      "summary": "A map-layer query's `geometry:` names a field whose type isn't the shape the layer's result type says each feature holds",
      "tokens": 623,
      "hash": "sha256:fe8418a62d7f06ee18b2535290c76ca354c6a55b598d5e338d1ab09c994f4134",
      "area": 6,
      "links": [
        "a-query-giving-a-map-layer",
        "geospatial-storage",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.group_key",
      "kind": "error",
      "title": "query.group_key",
      "summary": "Records cannot be grouped by this",
      "tokens": 309,
      "hash": "sha256:52a23d2f1702330c4f893a78813409bc1612f8d47e1e096fc30cd2ce5cc856eb",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.include_depth",
      "kind": "error",
      "title": "query.include_depth",
      "summary": "A query's includes nest more than two levels deep: records inside records inside records",
      "tokens": 939,
      "hash": "sha256:8c019df97cec7386d85ced9ae09b631bd4d3c4940a1bfba666762674b7bf5be4",
      "area": 6,
      "links": [
        "children-and-parents",
        "named-queries",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.include_erased_reads",
      "kind": "error",
      "title": "query.include_erased_reads",
      "summary": "A query that finds erased people reads more than their `id` and the fields erasure keeps of them",
      "tokens": 842,
      "hash": "sha256:8f505f6412c7a899e728206932006c40ff5bb0616f6cb86f1cb9b57836428e34",
      "area": 15,
      "links": [
        "erasure",
        "named-queries",
        "personal-data"
      ]
    },
    {
      "id": "query.include_erased_unused",
      "kind": "error",
      "title": "query.include_erased_unused",
      "summary": "A query says `include_erased: true` on an entity that keeps nothing of an erased person",
      "tokens": 610,
      "hash": "sha256:ae5ac2530be4dec93a16290421f4126521ff178ed5a62385fcc45a31c9df42a3",
      "area": 15,
      "links": [
        "erasure",
        "personal-data",
        "query.include_erased_reads"
      ]
    },
    {
      "id": "query.include_result",
      "kind": "error",
      "title": "query.include_result",
      "summary": "Result type has no field of the right shape for an include",
      "tokens": 298,
      "hash": "sha256:77c214b4a60412979f831850ca985e316cf618680585c705f5b0f846481fdddd",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.include_unknown",
      "kind": "error",
      "title": "query.include_unknown",
      "summary": "Include names no reference to or from the entity",
      "tokens": 282,
      "hash": "sha256:86743f4eb5d8920ecb291ff1c0d5f4acfaa6a99459f7b3bb62ea7abe3db6bd12",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.limit_range",
      "kind": "error",
      "title": "query.limit_range",
      "summary": "A query's `limit:` could be less than 1, either as written or because its value's type allows it",
      "tokens": 758,
      "hash": "sha256:74b8c9aca8ecd64feca58a2f613f96c797a6c12fe1543296a13639f43e62bb86",
      "area": 6,
      "links": [
        "named-queries",
        "order-and-pages",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.limit_unbounded",
      "kind": "error",
      "title": "query.limit_unbounded",
      "summary": "Query limit or page size comes from a value with no maximum",
      "tokens": 249,
      "hash": "sha256:3da56f3f2b5c44afc2ab3176c317f5c97dac8cea486221a60c1372f232669d3f",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.nearest_exact",
      "kind": "error",
      "title": "query.nearest_exact",
      "summary": "Nearest-neighbour order on a vector too long for an index reads every record",
      "tokens": 654,
      "hash": "sha256:349477909477a7dddd633a4f60246ea2be9ee76262cb50a221887c32e81a9233",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "query.nearest_page",
      "kind": "error",
      "title": "query.nearest_page",
      "summary": "Nearest-neighbour query returns a page",
      "tokens": 389,
      "hash": "sha256:c5e6d532fa3e8718ddfc1058d48dc590d0805e366ef88eaa9b5d44ccf47266b6",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "query.nearest_type",
      "kind": "error",
      "title": "query.nearest_type",
      "summary": "Nearest-neighbour order measures from something it can't",
      "tokens": 451,
      "hash": "sha256:e58cb3626ec5c1abbd64bd6576f1e7b1ce000e04d77d7a90262ad2c8b54b798d",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "query.nearest_unindexed",
      "kind": "error",
      "title": "query.nearest_unindexed",
      "summary": "Nearest-neighbour order on a vector with no fixed length",
      "tokens": 359,
      "hash": "sha256:ba049eea851f3231afa2b62b08aafde2ecc8875b028c16441cbac50be9bb7968",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "query.not_unique",
      "kind": "error",
      "title": "query.not_unique",
      "summary": "A query that returns one record, or none, picks it by a test that several records could match",
      "tokens": 554,
      "hash": "sha256:e1bf7050c23d65b4a8b89e31315213dfe0fc057420837b450c33fc1621e73186",
      "area": 6,
      "links": [
        "data.conflict_unmapped",
        "named-queries",
        "reads-and-writes",
        "unique-rules"
      ]
    },
    {
      "id": "query.optional_value",
      "kind": "error",
      "title": "query.optional_value",
      "summary": "Condition compares with a value that may be absent, or `where_present:` with one that is always there",
      "tokens": 295,
      "hash": "sha256:7e66ccd8446a743b1367194f4e60c8213086d0f7fc165cd6815f54ec3359b090",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.order_direction",
      "kind": "error",
      "title": "query.order_direction",
      "summary": "Order field has no `asc` or `desc`",
      "tokens": 212,
      "hash": "sha256:112b95f6bc2d438f4bbfe05d94bcdfeac46052584708b07ae71d61a1576b7d64",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.order_field",
      "kind": "error",
      "title": "query.order_field",
      "summary": "A query sorts records by a field, such as a `Bool` or an enum, that the database and Jadpo don't order the same way",
      "tokens": 596,
      "hash": "sha256:97cad309656431912778e38453a0be930480f1ef0804978908158d3917a453a6",
      "area": 6,
      "links": [
        "filters",
        "order-and-pages",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.other_domain",
      "kind": "error",
      "title": "query.other_domain",
      "summary": "A query in one domain reads the records of an entity that belongs to another domain",
      "tokens": 809,
      "hash": "sha256:0037b8cae27935b41d806c45d1bf43cb6348312230879cf83197991a84fafafb",
      "area": 6,
      "links": [
        "ownership-and-calls-replace-modules",
        "reads-across-domains",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.page_setting",
      "kind": "error",
      "title": "query.page_setting",
      "summary": "Page block is missing a setting or has a wrong one",
      "tokens": 211,
      "hash": "sha256:0231ba1dcf986e0b8b402eea745c0240c27439c9aab132782b5974e56a2deae3",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.repeated_section",
      "kind": "error",
      "title": "query.repeated_section",
      "summary": "Query section is given twice",
      "tokens": 227,
      "hash": "sha256:cd58c2aa7b76713a37df005d41468d70972ec35266e146afa0d68db62d12f0e8",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.result_field",
      "kind": "error",
      "title": "query.result_field",
      "summary": "Result type has a field the entity cannot fill",
      "tokens": 268,
      "hash": "sha256:1f7c5f1b748f451e7e3a4e6c4dc4f7e479b5a1fd1fd2b43285eb9cef24560412",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.result_rule",
      "kind": "error",
      "title": "query.result_rule",
      "summary": "Query result type has rules across its fields",
      "tokens": 340,
      "hash": "sha256:5a125e86443c9f57c5d929b471833e6169a1b6adeb1ed1a8e73ac3cac663aabc",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.result_type",
      "kind": "error",
      "title": "query.result_type",
      "summary": "Query result is not the entity or a type derived from it",
      "tokens": 285,
      "hash": "sha256:ae5285f48689de2d71a4c5f14a08070b86e70af1f4fb18e8a77666d310e51770",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.section_required",
      "kind": "error",
      "title": "query.section_required",
      "summary": "A query leaves out a section its result type needs, such as `from:`, or the `limit:` that bounds a list",
      "tokens": 894,
      "hash": "sha256:d4a6d885cdd8c35dc88351bc2075aa4a4884d3dd92d68ee7b163e2b17322a718",
      "area": 6,
      "links": [
        "named-queries",
        "order-and-pages",
        "reads-and-writes"
      ]
    },
    {
      "id": "query.section_unexpected",
      "kind": "error",
      "title": "query.section_unexpected",
      "summary": "Query has a section its result does not take",
      "tokens": 220,
      "hash": "sha256:b97712cc3db39b96a7cd8465cdf096551a468e64de3090a8dd06fa0c0f3bd706",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.unknown_field",
      "kind": "error",
      "title": "query.unknown_field",
      "summary": "Query names a field its entity does not have",
      "tokens": 220,
      "hash": "sha256:3e458d46a8716eb539ded5ed99687ca30f2f366864fd83d87cf13369547b60f4",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.unknown_section",
      "kind": "error",
      "title": "query.unknown_section",
      "summary": "Query has a section Jadpo does not know",
      "tokens": 244,
      "hash": "sha256:c2ecc38244fa22ea328c2777ba79a89433d0a3198dad85ceff2dc5d0674eb7c8",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.value_unsupported",
      "kind": "error",
      "title": "query.value_unsupported",
      "summary": "Query value is computed rather than a parameter, literal or enum value",
      "tokens": 444,
      "hash": "sha256:cd6589f4690e862c7596dea04c35246523d639b20a0f459aca3fab50796c3f7b",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "rate_limits.counted_in_memory",
      "kind": "error",
      "title": "rate_limits.counted_in_memory",
      "summary": "Deployable built for Workers would count its rate limits in each instance's memory",
      "tokens": 499,
      "hash": "sha256:3e00ceb7873779d3e498146a1a5ee1cb375a692898bfe59665073d064568bb56",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "rate_limits.store_invalid",
      "kind": "error",
      "title": "rate_limits.store_invalid",
      "summary": "Rate limits' store isn't a connection that can count them",
      "tokens": 310,
      "hash": "sha256:a0070ab268b5a31b82cfe6af989c7043157a589f27e1783a4acfbea56a5a236b",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "rate_limits.store_required",
      "kind": "error",
      "title": "rate_limits.store_required",
      "summary": "Deployable built for Workers has nowhere to count its rate limits",
      "tokens": 309,
      "hash": "sha256:96746482a1c6645d36d5df8bbf9e625e9724f1cf38d00539fd5a822ca0c75de0",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "rate_limits.window_unsupported",
      "kind": "error",
      "title": "rate_limits.window_unsupported",
      "summary": "A rate limit's window is one its store can't count",
      "tokens": 385,
      "hash": "sha256:17e3f2d197b75f72df69196c358daaa3311dead9bcf69eb35cf02e793d8041cf",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "receiving.invalid",
      "kind": "error",
      "title": "receiving.invalid",
      "summary": "A queue in `receiving:` doesn't say how its messages are read",
      "tokens": 377,
      "hash": "sha256:481f5add42cff2ae232419e4d8d80d5a3b7898bdf1746ff0f2734d1d81dd60cc",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "record.edited",
      "kind": "error",
      "title": "record.edited",
      "summary": "Generated record was edited by hand",
      "tokens": 322,
      "hash": "sha256:28aace5dcb21c84b74adc01b3fac922da26e9218d272b9d34f00ba2fe869f305",
      "area": 18,
      "links": [
        "records-and-manifest"
      ]
    },
    {
      "id": "record.format_newer",
      "kind": "error",
      "title": "record.format_newer",
      "summary": "A record file in the project was written by a newer Jadpo, in a format this one can't read",
      "tokens": 679,
      "hash": "sha256:c5455db956f2c282a1fd225c0108bb563e28977032f2c42093d6ad393c85d46a",
      "area": 18,
      "links": [
        "records-and-manifest",
        "what-is-committed-and-why",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "record.out_of_date",
      "kind": "error",
      "title": "record.out_of_date",
      "summary": "A record file that Jadpo writes from your code is missing, or no longer matches the code",
      "tokens": 702,
      "hash": "sha256:ef5d66e2f04d2b32389bb6e21fdc7e31cd087c98d7dd81a582650a24cd42027d",
      "area": 18,
      "links": [
        "record.edited",
        "records-and-manifest",
        "what-is-committed-and-why"
      ]
    },
    {
      "id": "recording.failed",
      "kind": "error",
      "title": "recording.failed",
      "summary": "A recording by `jadpo package record` or `jadpo ai record` got no answer worth keeping from the sandbox or the model, or its call couldn't be made",
      "tokens": 775,
      "hash": "sha256:ca6589bcd4de081850d9e6611060a3cd6336e0ea49263d5f7c15dade51403c6b",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "commands-for-packages",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "id": "recording.refused",
      "kind": "error",
      "title": "recording.refused",
      "summary": "A recording was refused before anything was sent, because its connection would call a live API or has nothing set for its sandbox, its package is installed, or there is nothing to ask its prompt with",
      "tokens": 912,
      "hash": "sha256:71f754b41b60ac060a610162216f0ab05d3935c7b4bfbfbd7688b6d8a945f025",
      "area": 14,
      "links": [
        "commands-for-looking-into-and-changing-code",
        "commands-for-packages",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "id": "registry.unreachable",
      "kind": "error",
      "title": "registry.unreachable",
      "summary": "The registry couldn't be reached, or answered in a way that can't be read",
      "tokens": 941,
      "hash": "sha256:5db49e24a2bf995ef68e3ad7182831579bd9c0d3a228bea414426f5539a7cde6",
      "area": 14,
      "links": [
        "the-public-registry",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "id": "route.api_unknown",
      "kind": "error",
      "title": "route.api_unknown",
      "summary": "Route group names an API the application doesn't declare",
      "tokens": 280,
      "hash": "sha256:4f261f588f453a86f229a4851d61c5801d0e0fe1587a96dcbec231612de6f572",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.argument_invalid",
      "kind": "error",
      "title": "route.argument_invalid",
      "summary": "Route passes something other than a placeholder, the input or their fields",
      "tokens": 332,
      "hash": "sha256:4c8cb5e43c72981b70cea1a024860c6652a6efebce4e4f57813e04ec84b41e19",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.authentication_invalid",
      "kind": "error",
      "title": "route.authentication_invalid",
      "summary": "A route's `authentication:` line holds something other than `RouteAuthentication.none` or `RouteAuthentication.fresh`",
      "tokens": 999,
      "hash": "sha256:6d505c6049d44863347496af7a5b045a2484f9bea6467f315854ac1d4c230966",
      "area": 7,
      "links": [
        "action-permissions",
        "http",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "route.binding_unused",
      "kind": "error",
      "title": "route.binding_unused",
      "summary": "Route reads a placeholder or input it never passes on",
      "tokens": 298,
      "hash": "sha256:a7e26b3a98e951979a8a13c5434adf19ae2d5401b7c523e5f3ddd4e8a38abc18",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.cache_invalid",
      "kind": "error",
      "title": "route.cache_invalid",
      "summary": "Route's `cache:` isn't `immutable`, or it keeps an answer a public cache may not hold",
      "tokens": 527,
      "hash": "sha256:a9f32fcbb4e64953a1cbd6469b6ab6f579f9a44e86fa6d68a1aeea81c90fb119",
      "area": 7,
      "links": [
        "http",
        "output-and-status",
        "personal-data-checks"
      ]
    },
    {
      "id": "route.calls_past_deadline",
      "kind": "error",
      "title": "route.calls_past_deadline",
      "summary": "The outside calls a route makes could, at their slowest, take longer than the route is allowed to run",
      "tokens": 1171,
      "hash": "sha256:dee5a49e785f3e932e37059080b9ff66ce79b6aa4401248ec7bde712df19e91b",
      "area": 11,
      "links": [
        "calling",
        "external-services",
        "subscribers",
        "time-limits"
      ]
    },
    {
      "id": "route.confirm_invalid",
      "kind": "error",
      "title": "route.confirm_invalid",
      "summary": "A route's `confirm:` holds something other than `Confirmation.passkey`, or no signed-in person could confirm the route",
      "tokens": 1377,
      "hash": "sha256:f811d849af094ee7ac605a90bb66aecfdc94b595f991bb02432fbcbc0ef84ae4",
      "area": 8,
      "links": [
        "identity",
        "in-development-and-tests",
        "passkeys",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "route.deadline_invalid",
      "kind": "error",
      "title": "route.deadline_invalid",
      "summary": "Route deadline is not a duration up to 60 seconds",
      "tokens": 293,
      "hash": "sha256:9197aa52db82b4cea761874291b6cbd92aa3505bdbd2471c9d6fe1c4267e941a",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.header_credential",
      "kind": "error",
      "title": "route.header_credential",
      "summary": "A route's input reads a header that sign-in or the runtime reads first, such as `Authorization`, a cookie or `Idempotency-Key`",
      "tokens": 1245,
      "hash": "sha256:1216a5988fdfe1922e868d190945d4736c3c246c2eb52fb62d98de962bf24e41",
      "area": 7,
      "links": [
        "http",
        "idempotent-writes",
        "one-input",
        "ways-to-sign-in",
        "who-is-calling-current-principal"
      ]
    },
    {
      "id": "route.header_duplicate",
      "kind": "error",
      "title": "route.header_duplicate",
      "summary": "Two input fields read the same header",
      "tokens": 396,
      "hash": "sha256:1dd763f3d761173d4f7c517a7b109b21a0d403d45d57b9009d2151d08c9d3b9b",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.header_name_invalid",
      "kind": "error",
      "title": "route.header_name_invalid",
      "summary": "Header name is not a valid HTTP header name",
      "tokens": 364,
      "hash": "sha256:98cc4048905873db78e95d7963f8f26fbf17a94685b4542505ca3f257a04ff01",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.header_not_scalar",
      "kind": "error",
      "title": "route.header_not_scalar",
      "summary": "Header field is not a single value",
      "tokens": 359,
      "hash": "sha256:d882f0e70c1b2f796ba195b8aa0fc0d6938f5ab96fa73aaa4fec80e1867f100e",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.input_not_input",
      "kind": "error",
      "title": "route.input_not_input",
      "summary": "Route input is not an `Input` type",
      "tokens": 276,
      "hash": "sha256:435882f5bf4ba49c2b76b501003464e6aa443a4a9693985bdeef3aec7196c12a",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.item_duplicate",
      "kind": "error",
      "title": "route.item_duplicate",
      "summary": "Route item is given twice",
      "tokens": 257,
      "hash": "sha256:6e12ad9b610b08a5b43b80433a21d863e378a9d3e8fd53950b1d191055701eea",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.item_unknown",
      "kind": "error",
      "title": "route.item_unknown",
      "summary": "Route or route group item is not one it takes",
      "tokens": 336,
      "hash": "sha256:ceabc44b895faee5bcc3fe10129fb313c796627f613777ed5c72fd8e8e486052",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.output_mismatch",
      "kind": "error",
      "title": "route.output_mismatch",
      "summary": "Route output is not exactly what it runs returns",
      "tokens": 293,
      "hash": "sha256:93a241d3b9eaf7707180ff876bf4490e80ab762fdf0488e5dcacab47282d23f6",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.output_not_output",
      "kind": "error",
      "title": "route.output_not_output",
      "summary": "Route output is not an `Output` type",
      "tokens": 388,
      "hash": "sha256:eca5e663ddbcd9d645d9aa158b8fef6655752bdd85c24f85b548c2371e9e3582",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.output_required",
      "kind": "error",
      "title": "route.output_required",
      "summary": "Route has no `output:`",
      "tokens": 477,
      "hash": "sha256:e26441939b896649fe6ac61a2db20651a6619cd784d9065f39a919ef9d265c49",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.output_unexpected",
      "kind": "error",
      "title": "route.output_unexpected",
      "summary": "A `no_content` route has an output",
      "tokens": 276,
      "hash": "sha256:5ee58abd29575f002670fab7dce1535bc0a5add71fd57bcc4928cc8fd3a6ac03",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.path_overlap",
      "kind": "error",
      "title": "route.path_overlap",
      "summary": "Two routes could answer the same request",
      "tokens": 455,
      "hash": "sha256:7634ffb99490a51ae6197a610e4e8a15e23aef39084a87f31361ca69174c56e0",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.placeholder_duplicate",
      "kind": "error",
      "title": "route.placeholder_duplicate",
      "summary": "Placeholder name is used twice in a route's path",
      "tokens": 337,
      "hash": "sha256:d6c1944cda92ced184448a77297557ddeb5d2664ae04a8e03abfb08d4d0532a9",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.placeholder_type",
      "kind": "error",
      "title": "route.placeholder_type",
      "summary": "Placeholder is not typed with a named scalar or an `X.id`",
      "tokens": 582,
      "hash": "sha256:7756cf5045ee8c5c6cf8c6b09c07897f9c9faf8793417e68231cd7a7b64d5e7a",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.prefix_api",
      "kind": "error",
      "title": "route.prefix_api",
      "summary": "Route group prefix does not start with its API's prefix",
      "tokens": 286,
      "hash": "sha256:8499ae424edac806d839216cf2c3cb52013f2a815dd5cf53a3529d841a612afb",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.prefix_required",
      "kind": "error",
      "title": "route.prefix_required",
      "summary": "Route group has no prefix",
      "tokens": 258,
      "hash": "sha256:4c0f234f1278cec3adda81a6bce2cbc69b5583ad49b42c5ae6f8daa0689330d9",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.query_field_unsupported",
      "kind": "error",
      "title": "route.query_field_unsupported",
      "summary": "Query-string input field is not a scalar, an enum or a list of them",
      "tokens": 389,
      "hash": "sha256:84ef72c2d4b24916042c7b45cb67d8caaa38e9ba8c8a8b1d1fd770559d11034f",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.rate_limit_invalid",
      "kind": "error",
      "title": "route.rate_limit_invalid",
      "summary": "A `rate_limit:` doesn't say how many requests over how long, or says it wrongly",
      "tokens": 346,
      "hash": "sha256:7a2856a04edcd61abf2649cb269268ab0950d156765926a28c4452b4799f086f",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "route.run_invalid",
      "kind": "error",
      "title": "route.run_invalid",
      "summary": "Route `run:` is not a call of a named action or query",
      "tokens": 289,
      "hash": "sha256:9c4e3511b11e84964a33c22b3fd9d9f99dea7524dd8ca898919a6901c21937df",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.run_kind",
      "kind": "error",
      "title": "route.run_kind",
      "summary": "A `GET` route runs an action that isn't read-only, or a route of another method runs a query",
      "tokens": 1059,
      "hash": "sha256:5d113d8c78d4f9829268f07048ba2b5c05630cd6301023c1531bd7605051136e",
      "area": 7,
      "links": [
        "http",
        "one-input",
        "routes-signed-in-by-default",
        "what-a-route-runs"
      ]
    },
    {
      "id": "route.run_required",
      "kind": "error",
      "title": "route.run_required",
      "summary": "Route does not say what it runs",
      "tokens": 261,
      "hash": "sha256:18f40d54dd8998a3093e547ab514abb4e1e58ac494707dcc8877d05b48f8d1f0",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.sends_invalid",
      "kind": "error",
      "title": "route.sends_invalid",
      "summary": "Route's `sends:` isn't a media type, or its `Output` isn't exactly one `Bytes` field",
      "tokens": 483,
      "hash": "sha256:c72389443b8eaca8cb142234270a9bcadbeda091a76fc271c94b1d7ea4cbc409",
      "area": 7,
      "links": [
        "http",
        "output-and-status"
      ]
    },
    {
      "id": "route.settle_invalid",
      "kind": "error",
      "title": "route.settle_invalid",
      "summary": "Route `settle:` is not an answer query and a wait inside its deadline",
      "tokens": 378,
      "hash": "sha256:66bf70e0cd66ecab5910b6d98c328eaa65d1e57b4b77521bbae6fa049bc1782e",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.status_invalid",
      "kind": "error",
      "title": "route.status_invalid",
      "summary": "Route status is not a `SuccessStatus`",
      "tokens": 289,
      "hash": "sha256:477ad462535539d6ff5287753d5ded4de3412ea08334cce88db896436037bd31",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.stream_invalid",
      "kind": "error",
      "title": "route.stream_invalid",
      "summary": "Streaming route answers with another status or waits with `settle:`",
      "tokens": 353,
      "hash": "sha256:2622eb35ec2cf33a55440b82f1466d159dbb92f0218a85edd103a6296d0c43ab",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "runs.unavailable",
      "kind": "error",
      "title": "runs.unavailable",
      "summary": "The app's unfinished runs couldn't be read from their database, because it can't be reached or has no table for them yet",
      "tokens": 1006,
      "hash": "sha256:60ca78791dca1bf3a12c2da37870419f05e5b578f2ffb1aee5b22ade6d7ba37f",
      "area": 14,
      "links": [
        "commands-for-services-calls-email-and-stored-data",
        "commands-for-the-database-settings-and-translations",
        "several-changing-calls-in-one-action",
        "tooling"
      ]
    },
    {
      "id": "schedule.every_invalid",
      "kind": "error",
      "title": "schedule.every_invalid",
      "summary": "A schedule's `every:` says how often it runs in something other than a whole number of seconds, minutes, hours or days",
      "tokens": 491,
      "hash": "sha256:8a58e04107fda4f804fcf64ec30f818ba7893ae7d9da01dcef06ff57f865d3c3",
      "area": 12,
      "links": [
        "jobs-and-events",
        "schedules"
      ]
    },
    {
      "id": "schedule.item_invalid",
      "kind": "error",
      "title": "schedule.item_invalid",
      "summary": "Schedule holds an item it doesn't take, gives one twice or leaves out `every:` or `run:`",
      "tokens": 261,
      "hash": "sha256:e3108496379d20508de0d227ddb5cac387eb5c1e899638bb6c7c12b5ebbb5496",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "schedule.run_invalid",
      "kind": "error",
      "title": "schedule.run_invalid",
      "summary": "Schedule's `run:` isn't a call of an action in its own domain with no arguments",
      "tokens": 281,
      "hash": "sha256:657ad2e32c4225c221c539f0b53f4ef2df9015869c82d7f8f2b868176904d2be",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "schedule.settings_invalid",
      "kind": "error",
      "title": "schedule.settings_invalid",
      "summary": "Schedules settings in `app.jadpo` hold something other than a database's `store:`",
      "tokens": 376,
      "hash": "sha256:90d0c2fea78d4a4a96eec7ec0bbe734367f67b67531881a74daf9f633f617b2f",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "schedule.store_required",
      "kind": "error",
      "title": "schedule.store_required",
      "summary": "An app has a schedule but no database named to keep its state in, because it has several databases or none",
      "tokens": 1049,
      "hash": "sha256:c95c55ea00c89584acf9df61d82f92a498ada2f77ddb9cce5fbd57741780e7a4",
      "area": 12,
      "links": [
        "jobs-and-events",
        "schedules",
        "stores"
      ]
    },
    {
      "id": "schedules.lease_held",
      "kind": "error",
      "title": "schedules.lease_held",
      "summary": "A schedule was run by hand while another run of it still holds its lease, so it wasn't run again",
      "tokens": 697,
      "hash": "sha256:44e5d835e14c927f57daba7436e5fdbf89ad3b540bfd84d435ced8d99b66a183",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "schedules",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "schedules.no_tick",
      "kind": "error",
      "title": "schedules.no_tick",
      "summary": "A schedule was run by hand against a deployment, and no tick of the app picked the run up in time, so nothing ran",
      "tokens": 714,
      "hash": "sha256:64bcbe1cb5537ad6255e52f44714e105b21ddbb476afb3d05bff81cd8be43c39",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "schedules",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "schedules.run_failed",
      "kind": "error",
      "title": "schedules.run_failed",
      "summary": "A schedule run by hand ended in a failure, or its run on the app never ended",
      "tokens": 761,
      "hash": "sha256:b831374314cd86c8b6edbd1dee32249036c472031c84041c7d085c5d0a840589",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "schedules",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "schedules.unavailable",
      "kind": "error",
      "title": "schedules.unavailable",
      "summary": "The app's schedules couldn't be read from their database, because it can't be reached or has no table for them yet",
      "tokens": 889,
      "hash": "sha256:46353452f45cdefa17ec6237282a18f5b6ae9bbe27cbfc77847950bf2fbbf8a5",
      "area": 14,
      "links": [
        "commands-for-background-work",
        "commands-for-the-database-settings-and-translations",
        "schedules",
        "tooling",
        "what-an-operator-sees"
      ]
    },
    {
      "id": "search.settings_invalid",
      "kind": "error",
      "title": "search.settings_invalid",
      "summary": "An entity's `search:` holds something it doesn't take, or leaves out what it needs",
      "tokens": 869,
      "hash": "sha256:91aca4233488d03b890fdc3e7e179960a0d08831188b44e071f9ac45dedfabce",
      "area": 16,
      "links": [
        "built-in-services",
        "search",
        "search.undeclared"
      ]
    },
    {
      "id": "search.undeclared",
      "kind": "error",
      "title": "search.undeclared",
      "summary": "A query searches an entity by words that has no `search:` section",
      "tokens": 547,
      "hash": "sha256:91925bf62d5d4c7f461dbc570ddd8afad4b395d7b30b2192013736ab56de07e7",
      "area": 16,
      "links": [
        "built-in-services",
        "search",
        "search.settings_invalid"
      ]
    },
    {
      "id": "seed.failed",
      "kind": "error",
      "title": "seed.failed",
      "summary": "A seed `jadpo seed` ran stopped at a call that failed or faulted, and the calls before it stay in the database",
      "tokens": 551,
      "hash": "sha256:f0cf71aa7156c64c7fa8eb89de91c3c37ea1c1ef1cab4bd202a1661419abcb98",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "seeds",
        "tooling"
      ]
    },
    {
      "id": "seed.production_refused",
      "kind": "error",
      "title": "seed.production_refused",
      "summary": "A seed was run against a database that isn't on this machine, which may be production",
      "tokens": 786,
      "hash": "sha256:d4d0eff05730653ca1a77affefa9a1ca36a020d37d4e1194d94e6c7678bae8c9",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "seeds",
        "stores",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "seed.unavailable",
      "kind": "error",
      "title": "seed.unavailable",
      "summary": "The database a seed runs against couldn't be reached, so nothing was run",
      "tokens": 591,
      "hash": "sha256:84c74669a474bf0129d9aa045c07756f25754c3a5706ff06978aad91055fb102",
      "area": 14,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "database-and-other-connection-urls",
        "seeds",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "semantic.ai_budget_missing",
      "kind": "error",
      "title": "semantic.ai_budget_missing",
      "summary": "Application's `ai:` sets no daily limit",
      "tokens": 316,
      "hash": "sha256:c8674bc0b27f4a1e7a809b9630426b0ad025e3adf3034fc2d03932d6136536a4",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.ai_dimensions_mismatch",
      "kind": "error",
      "title": "semantic.ai_dimensions_mismatch",
      "summary": "Vector type an embedding is asked for as has a length other than `embedding_dimensions:`",
      "tokens": 546,
      "hash": "sha256:f687008b7736b3351f39dd390e6d8e2d2897b5ebbb8d86c8cbd2fec83f9cfb54",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.ai_field_refused",
      "kind": "error",
      "title": "semantic.ai_field_refused",
      "summary": "A value from a field marked `to_models: false`, which must never be sent to a model, reaches a prompt or text sent for an embedding",
      "tokens": 1170,
      "hash": "sha256:762735b1bb869022c0aeb32691a08dffb82fcbbcfbc7edc7a07cfb922650f4e5",
      "area": 21,
      "links": [
        "ai",
        "following-personal-data",
        "marking-personal-fields",
        "safety-and-privacy",
        "semantic.ai_personal_data_not_allowed"
      ]
    },
    {
      "id": "semantic.ai_field_unmarked",
      "kind": "error",
      "title": "semantic.ai_field_unmarked",
      "summary": "Code stores a value from a field marked as personal data, or `to_models: false`, in a field that doesn't carry the same marks",
      "tokens": 1383,
      "hash": "sha256:855add1d1cd34e85ff2cf854d1dc31b8c03032e79cbffbc2b0d603489ce08440",
      "area": 21,
      "links": [
        "ai",
        "following-personal-data",
        "marking-personal-fields",
        "safety-and-privacy",
        "semantic.ai_personal_data_not_allowed"
      ]
    },
    {
      "id": "semantic.ai_model_literal",
      "kind": "error",
      "title": "semantic.ai_model_literal",
      "summary": "A `ModelId` is written out anywhere but a setting's `default:`",
      "tokens": 320,
      "hash": "sha256:0b519a01b17a86ed44a1ac63d98e415989bcc55636c90ff37651e711515bb715",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.ai_output_type",
      "kind": "error",
      "title": "semantic.ai_output_type",
      "summary": "Type a model is asked to answer as is one no model's answer can be",
      "tokens": 430,
      "hash": "sha256:aaa2e40ecbd24c5b97992c14e2363490da221d4e88653f054de2f065367bfac1",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.ai_personal_data_not_allowed",
      "kind": "error",
      "title": "semantic.ai_personal_data_not_allowed",
      "summary": "Your code sends a model personal data of a kind, such as health records, that the app's `ai:` settings don't allow it to send",
      "tokens": 1222,
      "hash": "sha256:83a966176adaf1fc0be1e88a6dcb100f3ebda5e1a8e655b3707c1ff56ba1eac0",
      "area": 21,
      "links": [
        "ai",
        "following-personal-data",
        "marking-personal-fields",
        "safety-and-privacy",
        "semantic.ai_field_refused"
      ]
    },
    {
      "id": "semantic.application_section_unknown",
      "kind": "error",
      "title": "semantic.application_section_unknown",
      "summary": "Application has a section Jadpo does not know",
      "tokens": 534,
      "hash": "sha256:a8f5d51c03f27becbbddbcc19915c8ddaf49cf33b7cf8f7fb4952f513a70500e",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.auth_method_duplicate",
      "kind": "error",
      "title": "semantic.auth_method_duplicate",
      "summary": "Sign-in method is declared twice",
      "tokens": 265,
      "hash": "sha256:29c8dc9bc6812731f4e3e1f97f115e1e4761cb09d468ff0d12bd2fee7091a651",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_method_unknown",
      "kind": "error",
      "title": "semantic.auth_method_unknown",
      "summary": "Sign-in method is not one the language has",
      "tokens": 222,
      "hash": "sha256:718196636c4ffc3d432299234bd74d18f0f4f6a7627fd5915bf2e093886e0a03",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_not_set_up",
      "kind": "error",
      "title": "semantic.auth_not_set_up",
      "summary": "A route needs a signed-in caller, but the app declares no way for anyone to sign in",
      "tokens": 920,
      "hash": "sha256:dd0450c50091b288d4bd9014e00c00fe4198a7eb33cc16bb34d0c26a3dcd6e7b",
      "area": 8,
      "links": [
        "action-permissions",
        "identity",
        "routes-signed-in-by-default",
        "the-principal",
        "ways-to-sign-in"
      ]
    },
    {
      "id": "semantic.auth_principal_required",
      "kind": "error",
      "title": "semantic.auth_principal_required",
      "summary": "Sign-in method has no principal variant to sign in",
      "tokens": 216,
      "hash": "sha256:41965056423c023b93eeabce24435b20e9c12d0224e455f5adc8f8c71ad407a5",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_setting_invalid",
      "kind": "error",
      "title": "semantic.auth_setting_invalid",
      "summary": "Sign-in setting has a value it can't take",
      "tokens": 246,
      "hash": "sha256:4d920c1a9b6f3c795d3c85b8bb45980a81f7a26e49a45317b16bfdcf848f3a63",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_setting_required",
      "kind": "error",
      "title": "semantic.auth_setting_required",
      "summary": "Sign-in method is missing a setting it needs",
      "tokens": 230,
      "hash": "sha256:c7b4325a345de337b93373091bb41bd28ae594cd942fcca44a6f36ac55f385fd",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_setting_unknown",
      "kind": "error",
      "title": "semantic.auth_setting_unknown",
      "summary": "Sign-in setting is not one the method takes",
      "tokens": 262,
      "hash": "sha256:2fcba7d7659597bf2f569f9758e578a5edbea65ddb7402443a31a51070b536cb",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.duplicate_declaration",
      "kind": "error",
      "title": "semantic.duplicate_declaration",
      "summary": "Name is declared more than once",
      "tokens": 691,
      "hash": "sha256:bfa92b1b1d2e984915e049dca1717554a5070f02d2d1517787c85a228f592b5d",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.fake_invalid",
      "kind": "error",
      "title": "semantic.fake_invalid",
      "summary": "Test's fakes script something no provider operation answers",
      "tokens": 351,
      "hash": "sha256:de93808390e0eea5d29419a138619a5a639353157d7743138724e2939a49651b",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "semantic.missing_return",
      "kind": "error",
      "title": "semantic.missing_return",
      "summary": "Callable can end without returning its result",
      "tokens": 201,
      "hash": "sha256:91c2ffebc9ffa6ae58b9870e5f3eee7b1ae53e0db4f8ffe4afe02e1cbeb67344",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "semantic.multiple_applications",
      "kind": "error",
      "title": "semantic.multiple_applications",
      "summary": "Project declares more than one application",
      "tokens": 194,
      "hash": "sha256:1e35c7cbc6b09b05ef8e60b401d680bce3726f479e2f649749cc34c8838bcaef",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_authentication",
      "kind": "error",
      "title": "semantic.multiple_authentication",
      "summary": "Project declares more than one authentication block",
      "tokens": 262,
      "hash": "sha256:2e6273362aaa8ae3de74aae30a0fe35c84a1fd9ac2cdb7ca55f7234f817ad669",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_locale_declarations",
      "kind": "error",
      "title": "semantic.multiple_locale_declarations",
      "summary": "Locales are declared more than once",
      "tokens": 217,
      "hash": "sha256:eba5523c0b0f76b474fee8ef0d84ac38ccd8a0bc2c56d9122bed04830ee4b57a",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "semantic.multiple_principals",
      "kind": "error",
      "title": "semantic.multiple_principals",
      "summary": "Project declares more than one principal",
      "tokens": 243,
      "hash": "sha256:295e0620a34823f85e8bd04467812e9c6388ea51d5d3967593a582c764bd8d85",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_suggestions",
      "kind": "error",
      "title": "semantic.multiple_suggestions",
      "summary": "Suggestions settings are declared more than once",
      "tokens": 203,
      "hash": "sha256:97c6dc7465d467453aa4bb75585b4450bb3299ecc8d5957a11f443241d541a5b",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "semantic.name_case",
      "kind": "error",
      "title": "semantic.name_case",
      "summary": "Name has the wrong case for its kind",
      "tokens": 217,
      "hash": "sha256:22215772a11116d585220b915814055d7e736c7b93bf945b95a5d01db0ca109f",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.not_callable",
      "kind": "error",
      "title": "semantic.not_callable",
      "summary": "Name cannot be called",
      "tokens": 581,
      "hash": "sha256:4e7830e86648abb2b5913e72b2a62f65df3f14a6dffc43a99305b570c205a18b",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.own_domain_qualification",
      "kind": "error",
      "title": "semantic.own_domain_qualification",
      "summary": "Own-domain call is qualified",
      "tokens": 238,
      "hash": "sha256:c3e06aa20df7dea80d509746a7bf58116ed9906d38ca79490c970ef1f3407309",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.principal_variant_duplicate",
      "kind": "error",
      "title": "semantic.principal_variant_duplicate",
      "summary": "Principal declares a variant twice",
      "tokens": 219,
      "hash": "sha256:079372e900cdccad133f3b81289055f9772064959a2059d83d5f9de1b0099926",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.principal_variant_invalid",
      "kind": "error",
      "title": "semantic.principal_variant_invalid",
      "summary": "Principal variant is not a subject and an optional active condition",
      "tokens": 217,
      "hash": "sha256:fedd5244b9e33ecd331040f5f0382b702316574bd564d9404f1148d4b3b2f9bc",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.principal_variant_required",
      "kind": "error",
      "title": "semantic.principal_variant_required",
      "summary": "Principal declares neither a user nor a service",
      "tokens": 175,
      "hash": "sha256:90eebbe7689cd9a306ec8000516e8a032fadf15e1a9a645eac157ea88523bda7",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.principal_variant_unknown",
      "kind": "error",
      "title": "semantic.principal_variant_unknown",
      "summary": "Principal variant is not user or service",
      "tokens": 252,
      "hash": "sha256:561c24095060a9f9e1790e54785e1095be564e618399b4bfe6c99882cbde4f28",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.request_invalid",
      "kind": "error",
      "title": "semantic.request_invalid",
      "summary": "Route test request doesn't fit its route",
      "tokens": 395,
      "hash": "sha256:144c0c675f2ed14c6c424acd2e70a5aea4064f6ddf4959f61b3ab48848ad5070",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "semantic.request_item_duplicate",
      "kind": "error",
      "title": "semantic.request_item_duplicate",
      "summary": "A route test's `request { }` gives an item, or a placeholder in `params:`, twice",
      "tokens": 1132,
      "hash": "sha256:4e6b1d83408344dce8ecc576542668c24e9b39738d28e6ddc89054e2c4ce3a0b",
      "area": 13,
      "links": [
        "acting-as-a-user",
        "kinds-of-test",
        "testing"
      ]
    },
    {
      "id": "semantic.request_route_unknown",
      "kind": "error",
      "title": "semantic.request_route_unknown",
      "summary": "A route test's `request { }` names a method and path that no route in the app answers",
      "tokens": 654,
      "hash": "sha256:2201c540c22c59fc208bb1c36ac69bf27d00f0ebe9c9de158c03115c23309529",
      "area": 13,
      "links": [
        "kinds-of-test",
        "testing"
      ]
    },
    {
      "id": "semantic.revocation_delay_invalid",
      "kind": "error",
      "title": "semantic.revocation_delay_invalid",
      "summary": "Revocation delay is not a positive duration",
      "tokens": 205,
      "hash": "sha256:dbc99506d0c002807cb78a5bff641e6f3f7170fd70a7a6bed231ddeb9f44266e",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.standard_namespace_reserved",
      "kind": "error",
      "title": "semantic.standard_namespace_reserved",
      "summary": "Name belongs to a standard-library namespace",
      "tokens": 208,
      "hash": "sha256:abb6eef51b127a875be85d1df3a71d46780d4b8b2017270fa638a0bcafe84dd4",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.standard_operation_moved",
      "kind": "error",
      "title": "semantic.standard_operation_moved",
      "summary": "Standard-library operation has moved to another name",
      "tokens": 522,
      "hash": "sha256:cec18ae7d23df3ff599ef589fc8f4530db9eed6044755a2adbed6920d28d9d28",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "semantic.standard_operation_qualification",
      "kind": "error",
      "title": "semantic.standard_operation_qualification",
      "summary": "Standard-library operation is called without its namespace",
      "tokens": 245,
      "hash": "sha256:e664b1908a35596211ccae1cadf8e1c596e9cca3a51e70eb5d05743382c3a50a",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.test_setting_duplicate",
      "kind": "error",
      "title": "semantic.test_setting_duplicate",
      "summary": "A test gives one of its settings, `clock:`, `config:`, `fakes:` or `flags:`, twice",
      "tokens": 638,
      "hash": "sha256:9a32c3f18042beb8e09f81baccee9d213cf1eae31c22f5c1dcd9bf106a512d51",
      "area": 13,
      "links": [
        "controlling-time",
        "test-settings",
        "testing"
      ]
    },
    {
      "id": "semantic.unknown_callee",
      "kind": "error",
      "title": "semantic.unknown_callee",
      "summary": "Called name is not declared",
      "tokens": 174,
      "hash": "sha256:568208518907fd8ac9b264662db4d996d2095bcefb9ce7ead2f882d43c0862b7",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.unknown_name",
      "kind": "error",
      "title": "semantic.unknown_name",
      "summary": "The code uses a name that nothing in the project or the standard library declares",
      "tokens": 464,
      "hash": "sha256:20ddb7ee856697af8133f78a437c3e0f1dfe5dd0570a8a0d2edc6a14fbe8b612",
      "area": 1,
      "links": [
        "built-in-types",
        "imports",
        "named-types",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "semantic.unreachable_code",
      "kind": "error",
      "title": "semantic.unreachable_code",
      "summary": "Code can never run",
      "tokens": 211,
      "hash": "sha256:d35c1366d42dfe905bef3994c77019dc06873f778373465aa25ba8c61c8c414b",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "semantic.unused_result",
      "kind": "error",
      "title": "semantic.unused_result",
      "summary": "Value is computed and thrown away",
      "tokens": 198,
      "hash": "sha256:c50b6b877b163a97aae72a39d9b74c622887b081ff175b75a0c819c1d3bcf551",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "semantic.unused_variable",
      "kind": "error",
      "title": "semantic.unused_variable",
      "summary": "A variable is given a value that nothing ever reads",
      "tokens": 791,
      "hash": "sha256:275b5102597e69c1d4e88eebe8ec3adeff6c75fe507b57b3ffad4967e7c564d0",
      "area": 3,
      "links": [
        "logic",
        "match",
        "variables"
      ]
    },
    {
      "id": "semantic.wrong_name_kind",
      "kind": "error",
      "title": "semantic.wrong_name_kind",
      "summary": "Name is the wrong kind of declaration here",
      "tokens": 175,
      "hash": "sha256:55beea818fd05b6bcb4da70b24c62159451d53fc5b3c71b15f14c4aafca3e52c",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "step.context",
      "kind": "error",
      "title": "step.context",
      "summary": "An action makes several changing calls from somewhere a retry can't carry on where it stopped, such as a route whose API doesn't require `Idempotency-Key`",
      "tokens": 1509,
      "hash": "sha256:6bfee482751639ae68a054de3b75f756ee45650e70d51dd23be37bacee58eb36",
      "area": 12,
      "links": [
        "idempotent-writes",
        "jobs-and-events",
        "several-changing-calls-in-one-action",
        "step.store_required",
        "subscribers",
        "waiting-for-follow-on-work"
      ]
    },
    {
      "id": "step.encryption_key_required",
      "kind": "error",
      "title": "step.encryption_key_required",
      "summary": "An action makes several changing calls, but the app names no key to encrypt the answers it keeps from them",
      "tokens": 869,
      "hash": "sha256:672576b283a5a757d7e2d590d8d90e349ddb73e72d1194bbca98666c397a0214",
      "area": 12,
      "links": [
        "jobs-and-events",
        "secrets",
        "several-changing-calls-in-one-action",
        "signing-keys"
      ]
    },
    {
      "id": "step.large_output",
      "kind": "error",
      "title": "step.large_output",
      "summary": "Operation with a large answer among several changing calls",
      "tokens": 413,
      "hash": "sha256:2bced39dbcdd9096032e8e8228d459090ba4d866e9e1e4c01d1d1c4b2022e247",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.late_failure",
      "kind": "error",
      "title": "step.late_failure",
      "summary": "An action can fail for good after a call that changes something outside the app took effect, leaving that change behind",
      "tokens": 1129,
      "hash": "sha256:72d4540b97af49a4018ac7bc04dd226f3baa7bc2b5fccfbd46ad598454dc2063",
      "area": 12,
      "links": [
        "declining-a-judgement-call",
        "jobs-and-events",
        "retries-and-giving-up",
        "several-changing-calls-in-one-action"
      ]
    },
    {
      "id": "step.settings_invalid",
      "kind": "error",
      "title": "step.settings_invalid",
      "summary": "Steps setting in `application { }` doesn't read",
      "tokens": 267,
      "hash": "sha256:23545c463c90469b8c3f864ce856d133c76c01821a373febc7786518cf71a96f",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.store_required",
      "kind": "error",
      "title": "step.store_required",
      "summary": "An action makes several changing calls but writes no database, and the app names no database to keep the record of its calls in",
      "tokens": 912,
      "hash": "sha256:5ecaf68357ec92e4013593c590ba11cbab583aed6628764c0467938b2898a627",
      "area": 12,
      "links": [
        "emitting-an-event",
        "jobs-and-events",
        "several-changing-calls-in-one-action"
      ]
    },
    {
      "id": "step.too_many",
      "kind": "error",
      "title": "step.too_many",
      "summary": "More than 8 changing calls on one way through an action",
      "tokens": 624,
      "hash": "sha256:853d18ca05cdd8a1d004964308a4daf0a1530fa11156e47f5c25c947bc9c4c94",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.unkeyed",
      "kind": "error",
      "title": "step.unkeyed",
      "summary": "Changing call with no idempotency key beside another changing call",
      "tokens": 401,
      "hash": "sha256:450fceab70368741c7338a3120a8ebf701fcadc1a7d68521b059e1cc0c33d8b5",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "store.action_spans_stores",
      "kind": "error",
      "title": "store.action_spans_stores",
      "summary": "An action writes to two databases, itself or through an action it calls, but an action's writes all commit in one database",
      "tokens": 948,
      "hash": "sha256:45dc425bad38c7ce308f3651366ec19f4ed86687f505f62e4a418d9df647701e",
      "area": 6,
      "links": [
        "emitting-an-event",
        "one-store-per-action",
        "reads-and-writes",
        "stores",
        "subscribers"
      ]
    },
    {
      "id": "subscriber.argument_invalid",
      "kind": "error",
      "title": "subscriber.argument_invalid",
      "summary": "Subscriber passes something other than its event or a field of it",
      "tokens": 339,
      "hash": "sha256:03a5a8f5c40dd3761d18c8023e750ee1f66e900d346ae62de0c7bbfb4d321755",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "subscriber.event_invalid",
      "kind": "error",
      "title": "subscriber.event_invalid",
      "summary": "A subscriber's `on:` names something other than an event, such as an entity or a plain type",
      "tokens": 652,
      "hash": "sha256:0520b3eed54ee3dd09de86efb38c8734d67773b5cf9d359d9605d48078589af8",
      "area": 12,
      "links": [
        "declaring-an-event",
        "emitting-an-event",
        "jobs-and-events",
        "subscribers"
      ]
    },
    {
      "id": "subscriber.item_invalid",
      "kind": "error",
      "title": "subscriber.item_invalid",
      "summary": "Subscriber holds an item it doesn't take, gives one twice or leaves out `on:` or `run:`",
      "tokens": 351,
      "hash": "sha256:ea4284ae3de1c928dcb9760b78a078a592622e16a6962e2a95c97c94e21a72be",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "subscriber.retry_invalid",
      "kind": "error",
      "title": "subscriber.retry_invalid",
      "summary": "A subscriber's `retry:` holds something other than 1 to 100 tries and up to 30 days to keep trying",
      "tokens": 707,
      "hash": "sha256:1c819dfdc05bd5e3108a964a1eb5200e1360013f0de6409bd886c6093407fe48",
      "area": 12,
      "links": [
        "jobs-and-events",
        "retries-and-giving-up"
      ]
    },
    {
      "id": "subscriber.run_invalid",
      "kind": "error",
      "title": "subscriber.run_invalid",
      "summary": "Subscriber's `run:` isn't a call of an action in its own domain",
      "tokens": 308,
      "hash": "sha256:83e3f72bba04c906c91d49caacaf42b2340ff3e5d4f29268387e13dcbd91c2c5",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "suggest.record_invalid",
      "kind": "error",
      "title": "suggest.record_invalid",
      "summary": "A suggestions record `jadpo suggest` reads, `ignored_suggestions.jadpo_record` or `taught_suggestions.jadpo_record`, isn't as Jadpo writes it",
      "tokens": 643,
      "hash": "sha256:e554c1524e88e4476cf16a2810298d4078b30eabdcb91f6bb3ed6ce281f68b0b",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "ignoring-a-suggestion",
        "teaching-a-miss",
        "tooling"
      ]
    },
    {
      "id": "suggest.share_failed",
      "kind": "error",
      "title": "suggest.share_failed",
      "summary": "Jadpo HQ couldn't be reached, or refused what `jadpo suggest share` sent, so the entries wait to be shared again",
      "tokens": 855,
      "hash": "sha256:881d21d3ffe2e522cb9dd7d9940af5910b9ab1df5ff1bf82eb5d865932efacb5",
      "area": 14,
      "links": [
        "commands-for-records-findings-and-review",
        "ignoring-a-suggestion",
        "sharing-with-jadpo-hq",
        "tooling"
      ]
    },
    {
      "id": "syntax.assertion_form",
      "kind": "error",
      "title": "syntax.assertion_form",
      "summary": "Assertion written in another language's form",
      "tokens": 293,
      "hash": "sha256:5c1e89f4849fd40d655e34f6528cc2873bc5aa460041b1532bed440d755d3ad7",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "syntax.async_await",
      "kind": "error",
      "title": "syntax.async_await",
      "summary": "Code marked `async` or `await`",
      "tokens": 225,
      "hash": "sha256:b1608157971b8d423cde9d3fd7a2bccc51f9d107abe44a241a36b99d30a543ee",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.attempt_placement",
      "kind": "error",
      "title": "syntax.attempt_placement",
      "summary": "Attempt is used inside an expression",
      "tokens": 286,
      "hash": "sha256:6948872833d30a82e6279e73e861ff4a776ebe55e2c8bb4ed13a4924ed885242",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.collection_type",
      "kind": "error",
      "title": "syntax.collection_type",
      "summary": "Collection type written in another language's form",
      "tokens": 219,
      "hash": "sha256:5502254e410ea61bd4353e6aca2dbdc34d7aae5c0cf679e2203391b0331ce2d7",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.colon_required",
      "kind": "error",
      "title": "syntax.colon_required",
      "summary": "Member has no colon before its value",
      "tokens": 176,
      "hash": "sha256:5faadc24439175b3c294f5f94c7d5dcefd4daf4eed2f37cfa99967a14d1b2b9e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.comment_style",
      "kind": "error",
      "title": "syntax.comment_style",
      "summary": "Comment written with `#` or `/* */`",
      "tokens": 201,
      "hash": "sha256:c8e96ed1aad368ecdc879df23738a1bd241539f503ae8b27a9ecd615edad225b",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.condition_brackets",
      "kind": "error",
      "title": "syntax.condition_brackets",
      "summary": "Condition is not in brackets",
      "tokens": 196,
      "hash": "sha256:03035c590798825a44d8324d27174c81b00927bb040291890ad2c139e571622e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.else_if",
      "kind": "error",
      "title": "syntax.else_if",
      "summary": "Else-if written as `elif` or `elsif`",
      "tokens": 207,
      "hash": "sha256:cd2be0573a4349949d1dc0222091fc97608ce149420b5a407568de94df886d2e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.equality_operator",
      "kind": "error",
      "title": "syntax.equality_operator",
      "summary": "Comparison written with another language's operator",
      "tokens": 206,
      "hash": "sha256:1409baf27fc689f393d1e1f05c36f2fc7e8e53e0c79adedeb8b48f61b83f9c06",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.expected_declaration",
      "kind": "error",
      "title": "syntax.expected_declaration",
      "summary": "Expected a declaration",
      "tokens": 342,
      "hash": "sha256:99428045700ff15a3c9d67640f19d843587f68c3db734cefd6d3d46b915eb7a5",
      "area": 1,
      "links": [
        "constants",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.expected_expression",
      "kind": "error",
      "title": "syntax.expected_expression",
      "summary": "Expected a value",
      "tokens": 191,
      "hash": "sha256:6c3a52805a5a0cd0552da6362b84f1c670836fd140e76457b342646daeb4cef4",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.expected_http_method",
      "kind": "error",
      "title": "syntax.expected_http_method",
      "summary": "Route method is not one a route is written with",
      "tokens": 277,
      "hash": "sha256:a968d04315e83f048d8fbc6beed5ec978dbd4684bc18b75927bde833c36ca6ca",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "syntax.expected_name",
      "kind": "error",
      "title": "syntax.expected_name",
      "summary": "Expected a name",
      "tokens": 674,
      "hash": "sha256:b8ad011355e301ab064873415b6264199eac6a122a485792aa0f707ec6bcc437",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.expected_statement",
      "kind": "error",
      "title": "syntax.expected_statement",
      "summary": "Expected a statement",
      "tokens": 205,
      "hash": "sha256:a1e6282aeefa67eac94355c59d197fb8f707b67ba08519b040ebb542caaab4cf",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.export_keyword",
      "kind": "error",
      "title": "syntax.export_keyword",
      "summary": "Declaration marked `export` or `pub`",
      "tokens": 234,
      "hash": "sha256:4fc4d702e45603df8fea876e620f969f7f476d73df2c89e58c314e169c503730",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.fails_after_result",
      "kind": "error",
      "title": "syntax.fails_after_result",
      "summary": "Fails list comes after the result type",
      "tokens": 240,
      "hash": "sha256:cfd37d03f176ad5e46904ea8c923ea5d83ee992de52bb0e9f76173eb2db6c78c",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "syntax.for_loop",
      "kind": "error",
      "title": "syntax.for_loop",
      "summary": "Loop written in another language's form",
      "tokens": 288,
      "hash": "sha256:9436cf6a8aa446d29bb90def0d08db9c048c84b1ed216f549c7627a287dbb77a",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.function_keyword",
      "kind": "error",
      "title": "syntax.function_keyword",
      "summary": "Function declared with `fn`, `func`, `def` or `fun`",
      "tokens": 196,
      "hash": "sha256:733024e921b69b842803b9129da29e296d707c501024e9b7b5e43cd19f577533",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.import_statement",
      "kind": "error",
      "title": "syntax.import_statement",
      "summary": "Import written in another language's form",
      "tokens": 251,
      "hash": "sha256:f1700a3967a2590c1808bd3b62568f54d4e8e2ba8ad4ea032bf712f33686dda6",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.increment_operator",
      "kind": "error",
      "title": "syntax.increment_operator",
      "summary": "Variable changed with `++`, `--` or `+=`",
      "tokens": 245,
      "hash": "sha256:7c9cb02811623c4504b757f77337728ac2c96168f8c8d95dd04429a9eb6f373e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.inline_function_arrow",
      "kind": "error",
      "title": "syntax.inline_function_arrow",
      "summary": "Inline function written in another language's form",
      "tokens": 252,
      "hash": "sha256:f7ff0eb1b57e777db48cbc6e130aed00e4ee2957fc8fdaebd5ce1a4efde7ba6e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.invalid_escape",
      "kind": "error",
      "title": "syntax.invalid_escape",
      "summary": "Unknown escape in a string",
      "tokens": 161,
      "hash": "sha256:6f3b912d24fa3b2a81567dd3bc01c0933ec2a80d2db33d9288f07bd024081261",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.locales_default_required",
      "kind": "error",
      "title": "syntax.locales_default_required",
      "summary": "Locales declaration has no default",
      "tokens": 174,
      "hash": "sha256:b4cd748c4a400bdb06e1d825c14fe33784c852226bc4fdad42573d195da87f23",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "syntax.locales_duplicate_option",
      "kind": "error",
      "title": "syntax.locales_duplicate_option",
      "summary": "Locales option is given twice",
      "tokens": 193,
      "hash": "sha256:36dfff8b6212d840a703c2bfd9fa308e3e517676ed271cf73f7d939832becfb0",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "syntax.locales_supported_required",
      "kind": "error",
      "title": "syntax.locales_supported_required",
      "summary": "Locales declaration lists no supported locales",
      "tokens": 195,
      "hash": "sha256:068d47e66592614956ee4eec3f82ec245ae12ff699dc86c190e8195d9f194327",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "syntax.locales_unknown_option",
      "kind": "error",
      "title": "syntax.locales_unknown_option",
      "summary": "Locales declaration has no such option",
      "tokens": 255,
      "hash": "sha256:83a3144a13f8de380e5b01195034311f3ed402f8bc88d0d9c3110319b375a855",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "syntax.logical_operator",
      "kind": "error",
      "title": "syntax.logical_operator",
      "summary": "Logical operator written in another language's form",
      "tokens": 230,
      "hash": "sha256:c8f48af8a35d5fa9f49dbd2bdec7ba62fb3ae7c9d2989ae3a01999db354eb6a6",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.mapping_block_required",
      "kind": "error",
      "title": "syntax.mapping_block_required",
      "summary": "Mappings are written after the call instead of in a block",
      "tokens": 339,
      "hash": "sha256:f8c6fcd1d9dd2439610a508e6ea017957cda07850fb6df95e04a6af5e96f32ea",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "syntax.match_arrow",
      "kind": "error",
      "title": "syntax.match_arrow",
      "summary": "Match arm uses `=>`",
      "tokens": 204,
      "hash": "sha256:813a7ea1b8fca04339e67c413bb277b481dc6824f9467ae9d43cf6f7d1af2a44",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.match_pattern",
      "kind": "error",
      "title": "syntax.match_pattern",
      "summary": "Expected a match pattern",
      "tokens": 306,
      "hash": "sha256:eb93e92cc0ecbbf4a88d4b5e09bce8e720a04ea66a2d88615e5894a8e3966b89",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.member_comma",
      "kind": "error",
      "title": "syntax.member_comma",
      "summary": "Members separated by commas",
      "tokens": 187,
      "hash": "sha256:bdbeabb176154dc3ddaf0ff782f74707fc9f0b5e44af990bafe99da5f270932a",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.named_argument_duplicate",
      "kind": "error",
      "title": "syntax.named_argument_duplicate",
      "summary": "Named argument is given twice",
      "tokens": 218,
      "hash": "sha256:30d730b00baeb763803390c5c0a442e9b231f50ea04ac31c4b826c76a23f840d",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.named_argument_equals",
      "kind": "error",
      "title": "syntax.named_argument_equals",
      "summary": "Named argument written with `=`",
      "tokens": 244,
      "hash": "sha256:7cde3f468d7ac283f67ed4a6986ef1432cdd36c6dda8475d92d59cd928b062ec",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.new_keyword",
      "kind": "error",
      "title": "syntax.new_keyword",
      "summary": "Value created with `new`",
      "tokens": 237,
      "hash": "sha256:af5ffc87522fc57adaa618cb6d42c657c687c9d13a9d78686da65e27d0b9b28c",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.null_coalescing",
      "kind": "error",
      "title": "syntax.null_coalescing",
      "summary": "Default for a missing value written with `??`",
      "tokens": 291,
      "hash": "sha256:6077fb75ccf6cb81a9d789e48373ff6ec635a819d4e34a22ee97b409d3bd5be8",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.nullable_type",
      "kind": "error",
      "title": "syntax.nullable_type",
      "summary": "Nullable type written in another language's form",
      "tokens": 228,
      "hash": "sha256:60e652ae0a9d8fc23a039162ae317fc241f7eacbd86ac1ec30297c5cf2658675",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.optional_chaining",
      "kind": "error",
      "title": "syntax.optional_chaining",
      "summary": "Field of a missing value read with `?.`",
      "tokens": 291,
      "hash": "sha256:3722db706eec79f446ec774893a61b48cdf1d33051fd46013a10a137f681461d",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.percent_ambiguous",
      "kind": "error",
      "title": "syntax.percent_ambiguous",
      "summary": "A number, `%` and a value with no spaces could be a percentage or a remainder",
      "tokens": 566,
      "hash": "sha256:d447c97171cd7466afd0b381ae943b135b0307e68b6a700ddfd763a5596ef84e",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "syntax.positional_after_named",
      "kind": "error",
      "title": "syntax.positional_after_named",
      "summary": "Positional argument follows a named one",
      "tokens": 215,
      "hash": "sha256:a53ab747912298ae84b8f75b9964bfc491a665d52beeafa57214136cc5cfc4d1",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.return_type_arrow",
      "kind": "error",
      "title": "syntax.return_type_arrow",
      "summary": "Result type written after `:`",
      "tokens": 198,
      "hash": "sha256:c70b889bb7c1cf3fc449d53e209495dfc7c174028c5be1799b3a4c5e53c8b707",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.semicolon",
      "kind": "error",
      "title": "syntax.semicolon",
      "summary": "Statement or member ends with `;`",
      "tokens": 177,
      "hash": "sha256:bca7dcf5ad6e51bcd4275c5d1cad871c5bdcab2e3e886859049220191dc344be",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.string_quotes",
      "kind": "error",
      "title": "syntax.string_quotes",
      "summary": "String in single quotes or backticks",
      "tokens": 194,
      "hash": "sha256:49c80f5d5e59089006d582c3ed942de70336607e10aae4154d949c61f906c2c4",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.suggestions_duplicate_option",
      "kind": "error",
      "title": "syntax.suggestions_duplicate_option",
      "summary": "Suggestions setting is given twice",
      "tokens": 177,
      "hash": "sha256:99589be7ba8ca35b7be20a8284bec1f33e5bc393323280a4e771d9cc568371c9",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "syntax.suggestions_unknown_option",
      "kind": "error",
      "title": "syntax.suggestions_unknown_option",
      "summary": "Suggestions settings have no such option",
      "tokens": 177,
      "hash": "sha256:17c34b4495dc2606243a58fb16a8ba5013c37d2a42f0fe700a53fcc12304c20d",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "syntax.switch_statement",
      "kind": "error",
      "title": "syntax.switch_statement",
      "summary": "Choice written with `switch` or `when`",
      "tokens": 267,
      "hash": "sha256:416def9ced7a9d4261e7d411e20b9b5afee4bcef4c92ae94f59c8af5db530471",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.ternary_operator",
      "kind": "error",
      "title": "syntax.ternary_operator",
      "summary": "Value chosen with `? :`",
      "tokens": 234,
      "hash": "sha256:3a30e1c5e45ce341431219b7ae14c11bcaa7ec9507491d36c7da7e1b840a48eb",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.try_catch",
      "kind": "error",
      "title": "syntax.try_catch",
      "summary": "Failure handled with `try`, `catch` or `?`",
      "tokens": 311,
      "hash": "sha256:f7abe56fd502dbc28d75d133176d057dd5bfb6cf063561be6f433d52f46a5348",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.type_block_required",
      "kind": "error",
      "title": "syntax.type_block_required",
      "summary": "Type has no block",
      "tokens": 187,
      "hash": "sha256:11563a23c12e3b5bd776e2a0b3b76cc180c1d0c77d001027a05927cdf5ca46a0",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.type_keyword",
      "kind": "error",
      "title": "syntax.type_keyword",
      "summary": "Type declared with `struct`, `interface` or `enum`",
      "tokens": 251,
      "hash": "sha256:2cfec3fc58d510457003eaf05513f88e5722da56d5628d572b4d90cdaf42bb35",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.type_parent_required",
      "kind": "error",
      "title": "syntax.type_parent_required",
      "summary": "Type has no base",
      "tokens": 178,
      "hash": "sha256:97b8d864ee65bec251ebeb16d1c37fb65855c374a991ccc1c2f9af67a97a95ca",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "syntax.unexpected_character",
      "kind": "error",
      "title": "syntax.unexpected_character",
      "summary": "Character is not part of Jadpo",
      "tokens": 160,
      "hash": "sha256:04a14d33b3f0195e49ce51241fec36602176e5a8e683b7a03d891ab9fbf9dcf6",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.unexpected_token",
      "kind": "error",
      "title": "syntax.unexpected_token",
      "summary": "Something else was expected here",
      "tokens": 180,
      "hash": "sha256:4021e3f88bfae99713a693a8ebd92e88e334a5edb7eeece0ab8ced57a73eba62",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.unsupported_throw",
      "kind": "error",
      "title": "syntax.unsupported_throw",
      "summary": "Failure raised with `throw` or `raise`",
      "tokens": 230,
      "hash": "sha256:1a5042701919cea61b5df76a2933fcd56a40bcbdecc02dbc65414c6097a93244",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "syntax.unterminated_string",
      "kind": "error",
      "title": "syntax.unterminated_string",
      "summary": "String is not closed",
      "tokens": 156,
      "hash": "sha256:7f4570909fc4003247cb8c5f03776dcb751488ab48d9d5524aefafb6414041a4",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "syntax.variable_keyword",
      "kind": "error",
      "title": "syntax.variable_keyword",
      "summary": "A variable is declared with `let`, `const` or `val`, words from other languages, where Jadpo writes `var`",
      "tokens": 677,
      "hash": "sha256:83056be34337bcda93e27e66e6170dfb6407c4192615ae9a68b8774a33b20442",
      "area": 3,
      "links": [
        "constants",
        "logic",
        "variables"
      ]
    },
    {
      "id": "syntax.variable_type_required",
      "kind": "error",
      "title": "syntax.variable_type_required",
      "summary": "Variable has no type",
      "tokens": 204,
      "hash": "sha256:23a2af86a01df7316df73f229577cbaa446e82ef5ac328737c75ef5e9b2291c3",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "test.assertion_failed",
      "kind": "error",
      "title": "test.assertion_failed",
      "summary": "A test's `assert` doesn't hold: its condition is false, or a call checked with `assert … fails` returned or failed differently",
      "tokens": 578,
      "hash": "sha256:569a162cfe0519af3c3c9d036840a855ced449fdbcbb7e1452ec65d1a92f8d8c",
      "area": 13,
      "links": [
        "assertions",
        "testing"
      ]
    },
    {
      "id": "test.database_unavailable",
      "kind": "error",
      "title": "test.database_unavailable",
      "summary": "The tests that need a database couldn't run, because PostgreSQL for the tests couldn't be started or reached",
      "tokens": 798,
      "hash": "sha256:3f2d66bc6d01aafc05f8367cc913e9b170e9a03bc41c6f6806740ae9e5281352",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "the-test-database",
        "tooling"
      ]
    },
    {
      "id": "test.failed",
      "kind": "error",
      "title": "test.failed",
      "summary": "A test failed under `jadpo test`, or among a package's own tests under `jadpo package check`",
      "tokens": 824,
      "hash": "sha256:d1436883fc243a93052ddeaeb0abd7a6f97f511950b22605075924a357878acd",
      "area": 14,
      "links": [
        "running-tests",
        "the-jadpo-command",
        "tooling",
        "writing-a-test"
      ]
    },
    {
      "id": "test.fake_exhausted",
      "kind": "error",
      "title": "test.fake_exhausted",
      "summary": "Test called a faked operation more times than its fakes script",
      "tokens": 356,
      "hash": "sha256:cbb78f1dda72d5b3d8de5e5e8fb670b7b97121eb5dfae92e69820c5862d967ac",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "test.fake_unused",
      "kind": "error",
      "title": "test.fake_unused",
      "summary": "A test passed otherwise, but its `fakes:` scripted more answers for a provider operation than the code called it for",
      "tokens": 722,
      "hash": "sha256:8d345dee92d15114f31ad916d229f3b0ae1ca432eec4228b98b9a09923a464f2",
      "area": 13,
      "links": [
        "fakes-for-integrations",
        "test.fake_exhausted",
        "testing"
      ]
    },
    {
      "id": "test.fault",
      "kind": "error",
      "title": "test.fault",
      "summary": "Test stopped on a fault",
      "tokens": 260,
      "hash": "sha256:cc90916838cabbfafc4db60a3bfcae7eb2b90145ea8ace10c53ad1737ddda213",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "test.no_tests",
      "kind": "error",
      "title": "test.no_tests",
      "summary": "A `jadpo test` command found no test to run: the project has none, or none matches the path, line, name, kind or `--failed` it gives",
      "tokens": 562,
      "hash": "sha256:92a716ff1863804b2bac2579890ad44752a23e0df1d6168d6f955f4fb7cdda0b",
      "area": 14,
      "links": [
        "running-tests",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "test.recording_undecodable",
      "kind": "error",
      "title": "test.recording_undecodable",
      "summary": "A saved answer from an outside service doesn't fit the types your integration reads that answer as",
      "tokens": 728,
      "hash": "sha256:65ee7ecc9a2e14d8007c6f927c0653056442cd2ddd8269e7ae410c7324ba3015",
      "area": 11,
      "links": [
        "decoding",
        "external-services",
        "kinds-of-test",
        "recordings"
      ]
    },
    {
      "id": "test.round_trip_failed",
      "kind": "error",
      "title": "test.round_trip_failed",
      "summary": "Field's decode and encode don't round-trip a recorded value",
      "tokens": 486,
      "hash": "sha256:1ae831e47893f4c900b7628b997380607619db144b8c9388c8b618f72efc1546",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "test.runtime_start_failed",
      "kind": "error",
      "title": "test.runtime_start_failed",
      "summary": "The tests couldn't start, because the machine couldn't give `jadpo test` the thread with a large stack they run on, usually for lack of memory",
      "tokens": 591,
      "hash": "sha256:0d43d21699f6be3aeda15f4d07b0031656cffbc6cfe566cb57493da85e83ec56",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "test.subscriber_failed",
      "kind": "error",
      "title": "test.subscriber_failed",
      "summary": "Subscriber failed for good during a test",
      "tokens": 502,
      "hash": "sha256:f9a2314244c1d3164b8f381e99f40ed1fd7f9f932d9fc84517a8a7440c7346b1",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "test.unexpected_failure",
      "kind": "error",
      "title": "test.unexpected_failure",
      "summary": "Test ended in a failure it did not expect",
      "tokens": 271,
      "hash": "sha256:0e3e6c625db3f36116199c6645d883110b3e832bca1c7cd1cbce9cc78f7cef98",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "threshold.declaration_invalid",
      "kind": "error",
      "title": "threshold.declaration_invalid",
      "summary": "A threshold in `thresholds { }` doesn't watch one thing, gives a limit that doesn't apply to it, or gives a value a limit can't take",
      "tokens": 878,
      "hash": "sha256:5bb0791d0770f9b44cab9f64c32c08401d240f87009aff9787befbbd918194ba",
      "area": 16,
      "links": [
        "built-in-services",
        "monitoring-thresholds"
      ]
    },
    {
      "id": "threshold.subject_unknown",
      "kind": "error",
      "title": "threshold.subject_unknown",
      "summary": "A threshold watches a route, action, query, schedule or subscriber its domain doesn't have",
      "tokens": 593,
      "hash": "sha256:df425ef3ab7253f5013626167e94a4a15aaef4c7bce0b2e383e367636237d015",
      "area": 16,
      "links": [
        "built-in-services",
        "monitoring-thresholds"
      ]
    },
    {
      "id": "toolchain.artifact_write_failed",
      "kind": "error",
      "title": "toolchain.artifact_write_failed",
      "summary": "A file Jadpo writes for you, such as a record, couldn't be written, usually because it or its folder is read-only",
      "tokens": 531,
      "hash": "sha256:ce9aab6ce312fc063b06406a2dd5d48d8fc15109d0d3d99314719e7201b26c98",
      "area": 14,
      "links": [
        "the-build-folder",
        "tooling",
        "what-is-committed-and-why"
      ]
    },
    {
      "id": "toolchain.build_failed",
      "kind": "error",
      "title": "toolchain.build_failed",
      "summary": "The Rust `jadpo build` wrote for a deployable didn't compile, because the machine lacks something the build runs, such as a C compiler, or because of a mistake in Jadpo",
      "tokens": 853,
      "hash": "sha256:199da00024c9aa27e1e47cfb4480cfc3fc5aed0b0c9902cfdcb0dd3eaf4789ff",
      "area": 14,
      "links": [
        "a-native-deployable",
        "the-jadpo-command",
        "toolchain.fetch_failed",
        "tooling"
      ]
    },
    {
      "id": "toolchain.empty_project",
      "kind": "error",
      "title": "toolchain.empty_project",
      "summary": "Project declares nothing",
      "tokens": 142,
      "hash": "sha256:98cd3fa0c281d5505c97c573300b15a861f74897106b2892f8220a844ded8295",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "toolchain.fetch_failed",
      "kind": "error",
      "title": "toolchain.fetch_failed",
      "summary": "The Rust toolchain or the crates `jadpo build` compiles with couldn't be fetched, usually because the server they come from, or the mirror in its place, can't be reached",
      "tokens": 1336,
      "hash": "sha256:8c268d638020f76b96a9ea8fc437d8e52ce064dcf03ee1b53cd3b7774e78904d",
      "area": 14,
      "links": [
        "a-native-deployable",
        "the-jadpo-command",
        "toolchain.build_failed",
        "tooling"
      ]
    },
    {
      "id": "toolchain.not_built_yet",
      "kind": "error",
      "title": "toolchain.not_built_yet",
      "summary": "Operation is declared but not built yet",
      "tokens": 466,
      "hash": "sha256:c34345e087fe50e08d81a7ae98242ee00b140d64f81c7ced86870092136240ec",
      "area": 3,
      "links": [
        "email",
        "files-put-read-and-the-disk-driver-in-development",
        "logic"
      ]
    },
    {
      "id": "toolchain.project_not_found",
      "kind": "error",
      "title": "toolchain.project_not_found",
      "summary": "You ran a command that works on a project in a folder with no `app.jadpo`, in it or in any folder above it",
      "tokens": 437,
      "hash": "sha256:6490d3828994ab2e38c6580628262b56e4db8a415434cd7e41273e9829e3aa40",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "the-root",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_destination_exists",
      "kind": "error",
      "title": "toolchain.scaffold_destination_exists",
      "summary": "You ran `jadpo new` or `jadpo package new` with the name of a file that already exists",
      "tokens": 485,
      "hash": "sha256:4232fba489bdee7ac04cd30b84f52243281239c2d0d9c91b774fa61845e02f44",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_destination_not_empty",
      "kind": "error",
      "title": "toolchain.scaffold_destination_not_empty",
      "summary": "You ran `jadpo new` or `jadpo package new` on a folder that already has files in it, hidden files included",
      "tokens": 546,
      "hash": "sha256:380a080ed17831fbf48d641e4ebf44137974a2d94f019608a6e4dba6973e4317",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_name_invalid",
      "kind": "error",
      "title": "toolchain.scaffold_name_invalid",
      "summary": "You ran `jadpo new` with a path that doesn't end in a folder's name, such as `..` or `/`",
      "tokens": 463,
      "hash": "sha256:fb8c23c409ac1cacf2082593dc112bdb4f5fcbd88120024ddf559b3514f6b7ee",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_read_failed",
      "kind": "error",
      "title": "toolchain.scaffold_read_failed",
      "summary": "You ran `jadpo new` or `jadpo package new` on a path Jadpo can't look into, such as a folder you can't read or a path through a file",
      "tokens": 538,
      "hash": "sha256:afba035e5a2c3f2b0b54531f3b6900d7082125aed5f0102a480de4129d680488",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_write_failed",
      "kind": "error",
      "title": "toolchain.scaffold_write_failed",
      "summary": "You ran `jadpo new` or `jadpo package new`, and writing its files failed, usually because the folder they go in can't be written",
      "tokens": 510,
      "hash": "sha256:48bd0e33f34ea240f2b69293785190041a3b84ae94408377ff411b50f855d84f",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.source_read_failed",
      "kind": "error",
      "title": "toolchain.source_read_failed",
      "summary": "A `.jadpo` file in the project couldn't be read, because it isn't UTF-8 text or you aren't allowed to read it",
      "tokens": 534,
      "hash": "sha256:b2156946615e5189254072d21ab54c3458bd701146d6fd2db96a23401b443c11",
      "area": 14,
      "links": [
        "source-files",
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.version_invalid",
      "kind": "error",
      "title": "toolchain.version_invalid",
      "summary": "Application's `jadpo:` is not a major and minor version as text",
      "tokens": 259,
      "hash": "sha256:1587f2824258957bee4c1b57804fc6cec1a6604bdc970380a8b14360f7150ddf",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "toolchain.version_newer",
      "kind": "error",
      "title": "toolchain.version_newer",
      "summary": "The project is written for a later Jadpo release line than the `jadpo` checking it, and that `jadpo` can't run the later release instead",
      "tokens": 877,
      "hash": "sha256:2559dcdbf9e9a7962a23a0b4176a6379e61747a550f2174339764512f7f58f77",
      "area": 1,
      "links": [
        "project-layout-and-modules",
        "the-root",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "toolchain.version_older",
      "kind": "error",
      "title": "toolchain.version_older",
      "summary": "The project is written for an earlier Jadpo release line than the `jadpo` checking it, and that `jadpo` can't run the earlier release instead",
      "tokens": 900,
      "hash": "sha256:3b1eb67f5517c6163d2d90aa8953bf346744d21a7fdb95d0fe0fbff77f0b5d4d",
      "area": 1,
      "links": [
        "project-layout-and-modules",
        "the-root",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "translation.exchange_file_invalid",
      "kind": "error",
      "title": "translation.exchange_file_invalid",
      "summary": "A file given to `jadpo translations import` isn't XLIFF 2.x or JSON in the shape `export` writes, or can't be read as one",
      "tokens": 913,
      "hash": "sha256:355dd9516a02a900e8447d750619cfc6143288c6208bc6d7e9223eb4833a1199",
      "area": 14,
      "links": [
        "exchanging-translations",
        "tooling",
        "translations-as-messages"
      ]
    },
    {
      "id": "translation.exchange_unit_unknown",
      "kind": "error",
      "title": "translation.exchange_unit_unknown",
      "summary": "A file given to `jadpo translations import` holds a unit of wording the project doesn't have",
      "tokens": 667,
      "hash": "sha256:dd7886bf04dba87c8430a744624cdfb291a7522a38656a8c15d8b8ef9c8149a9",
      "area": 14,
      "links": [
        "exchanging-translations",
        "tooling"
      ]
    },
    {
      "id": "translation.feature_off",
      "kind": "error",
      "title": "translation.feature_off",
      "summary": "A language file words a Jadpo message of a feature the application has off",
      "tokens": 305,
      "hash": "sha256:af351cd5833d4cc59ed2cd19492d24063ed6983b16ec155201e07fc7ded2cd22",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.field_type",
      "kind": "error",
      "title": "translation.field_type",
      "summary": "A message field is a type a wording can't hold",
      "tokens": 630,
      "hash": "sha256:16bf8975ef8ca796a20094cac73965d138b0c1aebfb48ddc3d9971b69cfac075",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.field_unused",
      "kind": "error",
      "title": "translation.field_unused",
      "summary": "No wording in a language uses one of a message's fields",
      "tokens": 304,
      "hash": "sha256:9d05e70ccfdf36d373aa11b5c8a27e913d7f463ca62e06c8b4448c89eaa0200e",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.file_missing",
      "kind": "error",
      "title": "translation.file_missing",
      "summary": "The app supports a locale, but a folder of messages has no language file for it",
      "tokens": 710,
      "hash": "sha256:4d11391075d36c279b83a9cac69e465470615723216081590ba2f8a950c3571b",
      "area": 10,
      "links": [
        "configuration",
        "locales",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "id": "translation.file_name_invalid",
      "kind": "error",
      "title": "translation.file_name_invalid",
      "summary": "A language file is not named for a locale",
      "tokens": 244,
      "hash": "sha256:cc7823b4af35b8515573fb4b6b149ffb3cc68acc62246a8acbddadacd3edff5b",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.group_unknown",
      "kind": "error",
      "title": "translation.group_unknown",
      "summary": "A group in the root language file is not one Jadpo reads",
      "tokens": 273,
      "hash": "sha256:ab2080203992e7e219f0df9c6350f89732dbba38dad41825bddb99f8988c08e9",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.jadpo_missing",
      "kind": "error",
      "title": "translation.jadpo_missing",
      "summary": "The app supports a locale that Jadpo doesn't ship its own messages in, and the app hasn't worded them itself",
      "tokens": 1440,
      "hash": "sha256:e97111d90d7cda1d7579300784f2f3229c2341ee3d74a9e87d3ed93005f3e175",
      "area": 10,
      "links": [
        "configuration",
        "failures-for-client-apps",
        "locales",
        "tooling-for-translations"
      ]
    },
    {
      "id": "translation.locale_unsupported",
      "kind": "error",
      "title": "translation.locale_unsupported",
      "summary": "A language file is for a locale the application does not support",
      "tokens": 261,
      "hash": "sha256:f1cb2fe3e18779dc95b47b11c78f29cda99554fe3b9c015d17a1878d42de4132",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.locales_required",
      "kind": "error",
      "title": "translation.locales_required",
      "summary": "Translations without declared locales",
      "tokens": 272,
      "hash": "sha256:b343916ca6a69be94a4453d05c8abacf661aa871b9e4c17b08ddf41858bb1364",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.member_duplicate",
      "kind": "error",
      "title": "translation.member_duplicate",
      "summary": "A member is written twice in a language file",
      "tokens": 270,
      "hash": "sha256:97e585bd97001adb0e3d7fe19d4ac2fa2edafe0f8ea0209d5051fa3c0ad132d1",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.member_unknown",
      "kind": "error",
      "title": "translation.member_unknown",
      "summary": "A language file words something that is no message, enum or email",
      "tokens": 298,
      "hash": "sha256:009e313966a69a4ca32800db4b16e3d0198f03f5afcf6555df8837f5c56e9616",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.message_unknown",
      "kind": "error",
      "title": "translation.message_unknown",
      "summary": "A translation call names no message or enum",
      "tokens": 286,
      "hash": "sha256:c50dfdab7584eda38c15ed7d4f59cd9239ed2fccaee269eba18bc52a8fb44a09",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.option_unknown",
      "kind": "error",
      "title": "translation.option_unknown",
      "summary": "An option of translations in app.jadpo is not one it takes",
      "tokens": 206,
      "hash": "sha256:9f91ec88731b44658fc7ef55fe6d719932d09332c9112c56b658f9f99b3445b4",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.placeholder_style",
      "kind": "error",
      "title": "translation.placeholder_style",
      "summary": "A wording writes an amount of money without its style, or a style on another field",
      "tokens": 312,
      "hash": "sha256:15c7cf3d1d100b8d9b27a06c491a0d5bbcacf1839d730b9ac6394073cc03589d",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.placeholder_unknown",
      "kind": "error",
      "title": "translation.placeholder_unknown",
      "summary": "A wording writes a placeholder, such as `{nom}`, that isn't one of its message's fields",
      "tokens": 582,
      "hash": "sha256:30f67275e9dc10f3ec1fd4b4943fd4d84a9ddf83d9eaa783212bd4830d7f9339",
      "area": 10,
      "links": [
        "configuration",
        "translation.field_unused",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "id": "translation.review_invalid",
      "kind": "error",
      "title": "translation.review_invalid",
      "summary": "Translation review is not a TranslationReview",
      "tokens": 263,
      "hash": "sha256:dcd257226c41f0c0beecb8b0c49525a90470a916a99d24e5c0469021aa94dd1f",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.sources_invalid",
      "kind": "error",
      "title": "translation.sources_invalid",
      "summary": "A translations folder's sources record cannot be read",
      "tokens": 345,
      "hash": "sha256:0cf80a4963a8bcb616615cfb95c5a93bb3a140e118d9ffe474c200543c1a6b18",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.stale",
      "kind": "error",
      "title": "translation.stale",
      "summary": "A translation was made from default wording that has changed",
      "tokens": 320,
      "hash": "sha256:5746d19ea563fff9c076647430e13a0bfd764f6aec7217b5387d231333e8eef4",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.too_many_selectors",
      "kind": "error",
      "title": "translation.too_many_selectors",
      "summary": "A message has more than one enum or plural field",
      "tokens": 311,
      "hash": "sha256:f8a4b1026bbb132272a5c5792adc95b2584548e0ffe43d1ca2b6b639f3a65104",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.variant_missing",
      "kind": "error",
      "title": "translation.variant_missing",
      "summary": "A wording that changes with a count or with an enum's value leaves out one of the plural forms or values",
      "tokens": 805,
      "hash": "sha256:15375c4628f5e555ff841fae848b7b18ed0baf8181dde00e71ff91ee3ddffc63",
      "area": 10,
      "links": [
        "configuration",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "id": "translation.variant_unknown",
      "kind": "error",
      "title": "translation.variant_unknown",
      "summary": "A wording is for a value or plural form that does not exist",
      "tokens": 269,
      "hash": "sha256:1de123ad453b68cc2122f3e5c5e8d4311dbcbdb1f7225b75a101cf727451650a",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.wording_invalid",
      "kind": "error",
      "title": "translation.wording_invalid",
      "summary": "A wording is not a plain string with {field} placeholders",
      "tokens": 248,
      "hash": "sha256:1846256b8e5cf8f36d0630ba4a1b49b20095de7603a28899d170025bcd16cde7",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "translation.wording_missing",
      "kind": "error",
      "title": "translation.wording_missing",
      "summary": "A language file of a supported locale leaves out one of the messages, or failures, that its folder has to word",
      "tokens": 985,
      "hash": "sha256:1cb7873091dfe25342c2d90b200f3eadf81fe4096718e3f73183a392b305a308",
      "area": 10,
      "links": [
        "configuration",
        "failures-for-client-apps",
        "locales",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "id": "translation.wording_shape",
      "kind": "error",
      "title": "translation.wording_shape",
      "summary": "A member is written in the wrong shape for what it words",
      "tokens": 279,
      "hash": "sha256:63203f60059dcabaf80b084b398d4b08233ca562cf2fef6590d1d0e8343707ec",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.absent_field",
      "kind": "error",
      "title": "type.absent_field",
      "summary": "Omitted or optional field is not present",
      "tokens": 183,
      "hash": "sha256:b2693d7b0c5b1458f388a188c7f51fe27362e4fdb1f858b14899ed723bddf7d6",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.argument_count",
      "kind": "error",
      "title": "type.argument_count",
      "summary": "A call passes more or fewer values than the function or action it calls has parameters",
      "tokens": 666,
      "hash": "sha256:dd7ad6c5822f16187dc0861814501d2b7d02f9943978d0ed0e903f9c884b1fb0",
      "area": 3,
      "links": [
        "functions-and-actions",
        "logic"
      ]
    },
    {
      "id": "type.argument_empty",
      "kind": "error",
      "title": "type.argument_empty",
      "summary": "Text that may be empty where it never is",
      "tokens": 376,
      "hash": "sha256:dcc3fb412034143c9947b70539efa0b34b45b69707daba3e9168e7a7224676ea",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.argument_negative",
      "kind": "error",
      "title": "type.argument_negative",
      "summary": "A list or text operation is given a count or a position that might be negative",
      "tokens": 648,
      "hash": "sha256:ae0dcb49d601e8fa3a4b04d3296dd87f68e54c1277e3b2f347a7380bbca35002",
      "area": 19,
      "links": [
        "creating-values",
        "lists",
        "named-types",
        "standard-library"
      ]
    },
    {
      "id": "type.arithmetic_operand",
      "kind": "error",
      "title": "type.arithmetic_operand",
      "summary": "A sum, difference or division mixes two different named types, or uses a value that isn't a number",
      "tokens": 900,
      "hash": "sha256:6b2096ab65d061a90d898ba4a904ab827d680e3526099749a7579d0410a4a94d",
      "area": 3,
      "links": [
        "creating-values",
        "expressions-and-operators",
        "logic",
        "numbers",
        "type.ordering_operand"
      ]
    },
    {
      "id": "type.assign_immutable",
      "kind": "error",
      "title": "type.assign_immutable",
      "summary": "A variable declared without `mut`, or a parameter, is given a new value",
      "tokens": 663,
      "hash": "sha256:c55ebfb14cd1659581c7e5352bc371267fce99d6abba12a9341ce041a101b117",
      "area": 3,
      "links": [
        "logic",
        "values-never-change",
        "variables"
      ]
    },
    {
      "id": "type.assign_unknown",
      "kind": "error",
      "title": "type.assign_unknown",
      "summary": "Assignment target is not declared",
      "tokens": 168,
      "hash": "sha256:20f182be6a617921d9871fdce5bfdb5b3a3c8775b4d1d9b2f071b36cddcb5797",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.auth_credential_stored",
      "kind": "error",
      "title": "type.auth_credential_stored",
      "summary": "Entity field holds an API token or a service key",
      "tokens": 280,
      "hash": "sha256:f07ee939d283c2ec3ccd170bff602e4fc375c2c59b3e3aad7928eec25e765264",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_construction",
      "kind": "error",
      "title": "type.auth_principal_construction",
      "summary": "Caller is made from a record outside tests, fixtures and seeds",
      "tokens": 296,
      "hash": "sha256:2dc46aba18d3865dd91bc569e14fdf017dfb277a640e0774dc6ff30e75072e98",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_failure_context",
      "kind": "error",
      "title": "type.auth_principal_failure_context",
      "summary": "Failure field holds a caller",
      "tokens": 259,
      "hash": "sha256:128c6dbf98c40d7b883f75dbabd839e9a83264b405f82051d1abf7cc4b932b8d",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_input",
      "kind": "error",
      "title": "type.auth_principal_input",
      "summary": "Input field holds a caller",
      "tokens": 232,
      "hash": "sha256:599cf65189b824455f5588144eee677e22861a61ffb941ba3e72ec266833308c",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_output",
      "kind": "error",
      "title": "type.auth_principal_output",
      "summary": "Output field holds a caller",
      "tokens": 239,
      "hash": "sha256:b275fb50552f0b2ffa3c84124c9d15ec4a1dd7e94b6f135779817ad7a1c61ccf",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_variant_unknown",
      "kind": "error",
      "title": "type.auth_principal_variant_unknown",
      "summary": "Caller variant is not one the principal declares",
      "tokens": 358,
      "hash": "sha256:eeb19e4a5ff7c0cc2c1b308d126e834a27aa00d6eea4770829964aa91b49277b",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_public_principal",
      "kind": "error",
      "title": "type.auth_public_principal",
      "summary": "A route that anyone may call, with `authentication: RouteAuthentication.none`, passes on the signed-in caller, though it never looks for one",
      "tokens": 1013,
      "hash": "sha256:b60c2a45b18aa28e7fe3048995f596b4df4cd0166288ab50b8bc460e20935bbd",
      "area": 8,
      "links": [
        "a-user-field-on-the-record",
        "anyone-signed-in-or-anyone",
        "identity",
        "routes-signed-in-by-default",
        "who-is-calling-current-principal"
      ]
    },
    {
      "id": "type.auth_sessions_context",
      "kind": "error",
      "title": "type.auth_sessions_context",
      "summary": "Session, API token or service key operation outside an action, or without its sign-in method",
      "tokens": 258,
      "hash": "sha256:f3c1109800a0642f4a7d755bd234068cee45650f0fd4fb6175d493ddd000fd9a",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.base_outside_declaration",
      "kind": "error",
      "title": "type.base_outside_declaration",
      "summary": "Base is used outside a type declaration",
      "tokens": 209,
      "hash": "sha256:433dd818a96432793ec1a7c729cdd6b330908912e06b3c9537e1e8626ccb9da2",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.batch_capture_not_storable",
      "kind": "error",
      "title": "type.batch_capture_not_storable",
      "summary": "A batch saves a value that can't be stored",
      "tokens": 366,
      "hash": "sha256:75deaeb1daa02741be24dd5125795360c16f5f58c8b40ae536823dea2566557f",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_context",
      "kind": "error",
      "title": "type.batch_context",
      "summary": "Batch operation called outside an action",
      "tokens": 259,
      "hash": "sha256:f0118f419e29289d348041d53ab18070511135c3c9f86ddf3130cf255f9f943c",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_each_invalid",
      "kind": "error",
      "title": "type.batch_each_invalid",
      "summary": "A batch's `each:` or `finished:` is not one call of an action in its domain, or a write's `each:` no inline function giving the row",
      "tokens": 392,
      "hash": "sha256:4e756d139577a69a9822299c5b8b0000b3ca94c50b53562b3ee79f25341a361a",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_from_invalid",
      "kind": "error",
      "title": "type.batch_from_invalid",
      "summary": "A batch's `from:` is something other than a call of a named query that gives a `Page`, such as a query that gives a `List`",
      "tokens": 723,
      "hash": "sha256:fd8cc981dd4db1b4e3ef4b6ddabc7df4426831f045d23c6ff1af17ff242569fd",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "how-a-run-is-kept",
        "jobs-and-events",
        "named-queries",
        "order-and-pages"
      ]
    },
    {
      "id": "type.batch_input",
      "kind": "error",
      "title": "type.batch_input",
      "summary": "An `Input` or a route placeholder holds a batch type, a `File` or a `FileContents`, or what a provider or a queue sends holds a `File` or a `FileContents`, which only the runtime builds",
      "tokens": 496,
      "hash": "sha256:7423df2f4171ef169193fffdb8af7d30962c60d6fcb90736d2449bb39bd433ea",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_order_updatable",
      "kind": "error",
      "title": "type.batch_order_updatable",
      "summary": "A batch walks a query ordered by a field an update can change",
      "tokens": 744,
      "hash": "sha256:d7cb5ed3d936ad16b80dee987f0285ab02d3ac0b35004e6bbaaecfdbbdc2f26a",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_row_invalid",
      "kind": "error",
      "title": "type.batch_row_invalid",
      "summary": "A file helper's rows can't be read as the type its `as:` names or from where its `items_at:` says, its `max_unpacked_size:` isn't a size, or its rows can't be written as the row its `each:` gives",
      "tokens": 557,
      "hash": "sha256:d3dfe84c956826060e035afc11e3d39cbac2a2825a5fe0537d2c7a9893c705b9",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.clock_context",
      "kind": "error",
      "title": "type.clock_context",
      "summary": "The operation clock is unavailable in this context",
      "tokens": 210,
      "hash": "sha256:a5d46c5aac36f7d3ac90ab719528d66df37473bbb0ea159e84a32d283d8d4ebf",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.constraint_base",
      "kind": "error",
      "title": "type.constraint_base",
      "summary": "Constraint does not fit the type's base",
      "tokens": 160,
      "hash": "sha256:3756dc9513c13564c83be60a88118b847cdfe23613a87407a9c10f6c745a143c",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.constraint_contradiction",
      "kind": "error",
      "title": "type.constraint_contradiction",
      "summary": "Constraints contradict each other",
      "tokens": 182,
      "hash": "sha256:0f869ecb903c8f90d232317df699be03309e017d22231c0ebfceb024665b6b07",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.constraint_loosened",
      "kind": "error",
      "title": "type.constraint_loosened",
      "summary": "A type that builds on another sets a looser bound than the one it inherits, such as a higher `max_length`",
      "tokens": 588,
      "hash": "sha256:665d07da0202cc6f682f63e3580ec210d58d62893d883d42e9c8a879f9167252",
      "area": 2,
      "links": [
        "named-types",
        "values-and-types",
        "when-one-type-can-stand-in-for-another"
      ]
    },
    {
      "id": "type.constraint_repeated",
      "kind": "error",
      "title": "type.constraint_repeated",
      "summary": "Constraint is given twice",
      "tokens": 172,
      "hash": "sha256:067976314d26f8e14fcfe2cc58b56fdd2b92ee363300f966946137cc6b51ad30",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.constructor_argument_count",
      "kind": "error",
      "title": "type.constructor_argument_count",
      "summary": "Constructor is not given exactly one value",
      "tokens": 180,
      "hash": "sha256:c5b6dcf645c50ed04ca3810d55ca48c30bb13bf02a7292c99078ee3722d48122",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.constructor_input",
      "kind": "error",
      "title": "type.constructor_input",
      "summary": "A type's constructor is given a value it can't convert, because the value is built on a different kind of value or may be `none`",
      "tokens": 726,
      "hash": "sha256:57a6d045905b553c797ce43dcac39e938f66b0e4b76e4a6d9b39c5c7093164bf",
      "area": 2,
      "links": [
        "absent-values",
        "creating-values",
        "named-types",
        "values-and-types",
        "when-one-type-can-stand-in-for-another"
      ]
    },
    {
      "id": "type.copy_clash",
      "kind": "error",
      "title": "type.copy_clash",
      "summary": "Copied field would replace another field",
      "tokens": 202,
      "hash": "sha256:c97d8d64939b53ec66d27378fd5acc246b3f1cd12fd8c550d5aca5f600fc748f",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.copy_cycle",
      "kind": "error",
      "title": "type.copy_cycle",
      "summary": "Type includes its own fields",
      "tokens": 227,
      "hash": "sha256:d42cd833688144dc6b8a01bba790cd8f84794a3cdefcbc0ec7cd1283bbc6c547",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.copy_into_input",
      "kind": "error",
      "title": "type.copy_into_input",
      "summary": "An `Input` type copies every field of another type with `include`, so a request could set any of them",
      "tokens": 469,
      "hash": "sha256:99eea724cde4716ca6a387851939cbcd736d619b61e32f4f087af9599f11d586",
      "area": 2,
      "links": [
        "building-a-type-from-other-types",
        "objects",
        "values-and-types"
      ]
    },
    {
      "id": "type.decimal_scale_required",
      "kind": "error",
      "title": "type.decimal_scale_required",
      "summary": "Decimal type has no scale",
      "tokens": 177,
      "hash": "sha256:a0ee27b4df1cd51d2208a2f9632be83880e19c392b319162a12e1511c0470e36",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.divisor_zero",
      "kind": "error",
      "title": "type.divisor_zero",
      "summary": "A division's divisor has a type that allows zero, so the division could fail when the program runs",
      "tokens": 686,
      "hash": "sha256:5c4a813216a7647177d984d89407c7956de642b9de9e246ece8b2811de7ac90e",
      "area": 3,
      "links": [
        "creating-values",
        "expressions-and-operators",
        "logic",
        "when-one-type-can-stand-in-for-another"
      ]
    },
    {
      "id": "type.duplicate_field",
      "kind": "error",
      "title": "type.duplicate_field",
      "summary": "Field is given twice",
      "tokens": 227,
      "hash": "sha256:8d6e6dbac4e8c5c366f3fbc8b45c4d40d39e8c0345d5acd421467ae72428ed8d",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.duplicate_variant",
      "kind": "error",
      "title": "type.duplicate_variant",
      "summary": "Enum variant is declared twice",
      "tokens": 172,
      "hash": "sha256:ca69b76d9bf506376518b86d67c73d1f47d41d2891d1d62b099928f9b10f5ede",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.duplicate_variant_field",
      "kind": "error",
      "title": "type.duplicate_variant_field",
      "summary": "Variant field is given twice",
      "tokens": 243,
      "hash": "sha256:35b027d9e1990eb5eec5ef3e39dd9af2235b33c6c7e6576baa3e48b532703795",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.enum_empty",
      "kind": "error",
      "title": "type.enum_empty",
      "summary": "Enum declares no variants",
      "tokens": 155,
      "hash": "sha256:3a61414f7474d62699ab457ea6e365af6f5d36158a12dece850c63f81c4fe614",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.enum_label",
      "kind": "error",
      "title": "type.enum_label",
      "summary": "Enum variant is given a label or a value",
      "tokens": 251,
      "hash": "sha256:96b2710c13380ea4443c03fabf9aa8624e5b6f10bad7408b699bdfda412eaee1",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.field_on_non_record",
      "kind": "error",
      "title": "type.field_on_non_record",
      "summary": "Field is read from a value without fields",
      "tokens": 257,
      "hash": "sha256:e47ff3851c38d1a088baf1d6faecd2cebecc246dea87aa152f9b11cab23af3de",
      "area": 2,
      "links": [
        "files-put-read-and-the-disk-driver-in-development",
        "values-and-types"
      ]
    },
    {
      "id": "type.field_unproved",
      "kind": "error",
      "title": "type.field_unproved",
      "summary": "Object field value may break the field's rules",
      "tokens": 326,
      "hash": "sha256:d74885afe67a3cff47e6929e438c7dc1c75d83305f9429eac2350d7830e01a2c",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.field_update_forbidden",
      "kind": "error",
      "title": "type.field_update_forbidden",
      "summary": "An update changes a field that stays fixed once its record exists, such as a user field a grant names or a field marked `immutable: true`",
      "tokens": 1114,
      "hash": "sha256:4aff34a40af939af5efedf03c550721f19c0398ceb9334f10d706ba1914db606",
      "area": 9,
      "links": [
        "a-user-field-on-the-record",
        "action-permissions",
        "policy"
      ]
    },
    {
      "id": "type.file_read_too_large",
      "kind": "error",
      "title": "type.file_read_too_large",
      "summary": "Code reads a whole file into memory from a file field that can hold more than the 10 MB a whole read allows",
      "tokens": 831,
      "hash": "sha256:8764114e9c389ee00516b26b12d1e3de70ce818e6b195085d6274ad8a64e1e8d",
      "area": 16,
      "links": [
        "built-in-services",
        "data-formats-json-csv-tsv-and-json-lines",
        "files",
        "files-put-read-and-the-disk-driver-in-development"
      ]
    },
    {
      "id": "type.foreign_type",
      "kind": "error",
      "title": "type.foreign_type",
      "summary": "Type named as another language names it",
      "tokens": 200,
      "hash": "sha256:d32856f5f41a912c7989726e969f43203ab691f4e9c3dc5562abd016a32aa253",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.foreign_value",
      "kind": "error",
      "title": "type.foreign_value",
      "summary": "Value written as another language writes it",
      "tokens": 206,
      "hash": "sha256:6d741d4506e1d91ec4c65b033ce44d679c05697ff1db19e9fa03b1b8b9d86bd5",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.incomparable",
      "kind": "error",
      "title": "type.incomparable",
      "summary": "Values cannot be compared for equality",
      "tokens": 212,
      "hash": "sha256:b903f80a2c31ed667e3bcc606ba74e59a484825907276de06f4ca9c269c239b7",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.inline_function_parameters",
      "kind": "error",
      "title": "type.inline_function_parameters",
      "summary": "Inline function has a different number of parameters than its operation gives",
      "tokens": 284,
      "hash": "sha256:897f1300dc9dadf6296e568f77bf889f739def86950f571e58d79810a19fdd19",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.inline_function_placement",
      "kind": "error",
      "title": "type.inline_function_placement",
      "summary": "Inline function is not an argument to a collection operation",
      "tokens": 532,
      "hash": "sha256:5f70ac16fd2550c77faf00733a6f80b97452268335a26b9fbcf1f50fbf0fdee7",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.invalid_literal",
      "kind": "error",
      "title": "type.invalid_literal",
      "summary": "A literal value breaks a rule of the type it goes into, such as a number below the type's `min`",
      "tokens": 436,
      "hash": "sha256:0e37ceaee6598d285c4994f92fff28f4bea69fb0b4c9393784fa94d3e5d85e82",
      "area": 2,
      "links": [
        "creating-values",
        "named-types",
        "values-and-types"
      ]
    },
    {
      "id": "type.invalid_pattern",
      "kind": "error",
      "title": "type.invalid_pattern",
      "summary": "Pattern is not a supported regular expression",
      "tokens": 224,
      "hash": "sha256:e8f9cfb4199e5e562eb0cc27c4e9cd2472b91ac57816ec19fd969e3eabdc0c26",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.key_as_value",
      "kind": "error",
      "title": "type.key_as_value",
      "summary": "A key held as data is read as a value, when it goes only into a key-type field or a `crypto` call's `key:`",
      "tokens": 603,
      "hash": "sha256:07351852b52181c3ba880241071569eca8b10a6f17c9bbde07100b253684db52",
      "area": 19,
      "links": [
        "configuration.secret_flow",
        "hashing-and-cryptography",
        "standard-library"
      ]
    },
    {
      "id": "type.locale_default_unsupported",
      "kind": "error",
      "title": "type.locale_default_unsupported",
      "summary": "Default locale is not a supported one",
      "tokens": 236,
      "hash": "sha256:c6a9c6f94bb3d7788a015d5a6a0c9236b64d1a8c8043bf04bb89fa8c2e18d91c",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.locale_duplicate",
      "kind": "error",
      "title": "type.locale_duplicate",
      "summary": "Locale is listed twice",
      "tokens": 185,
      "hash": "sha256:9126a9d1640bae8012a9132dc5943eadddf977dfd644080e1b4ec5a7f0411bcb",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.locale_in_progress_default",
      "kind": "error",
      "title": "type.locale_in_progress_default",
      "summary": "The default locale is listed as in progress",
      "tokens": 274,
      "hash": "sha256:111775151cc734080c14c9ee0b07c09178f9ed03e329a155007c0a6db3ee4c92",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.locale_in_progress_unsupported",
      "kind": "error",
      "title": "type.locale_in_progress_unsupported",
      "summary": "An in-progress locale is not a supported locale",
      "tokens": 296,
      "hash": "sha256:7e9a87974969366cd7fdff480c035f1abe2d486b6efa31bf88dcf960a1263a6b",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.locale_invalid",
      "kind": "error",
      "title": "type.locale_invalid",
      "summary": "Locale is not written as a Locale",
      "tokens": 231,
      "hash": "sha256:0f2b23b094307448e2f69cc294331ca0974710bc5439e3baa927e50323f62b37",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.locale_unsupported",
      "kind": "error",
      "title": "type.locale_unsupported",
      "summary": "Your code writes out a locale, such as `Locale.fr_fr`, that isn't in the app's list of supported locales",
      "tokens": 718,
      "hash": "sha256:4d48c5607083a19934ba75bdad2b2df585e5f387759fdc8437a08b8777b16990",
      "area": 10,
      "links": [
        "configuration",
        "locales",
        "showing-dates-and-times-to-people"
      ]
    },
    {
      "id": "type.logical_operand",
      "kind": "error",
      "title": "type.logical_operand",
      "summary": "Logical operator needs Bool operands",
      "tokens": 182,
      "hash": "sha256:7288df3add457084766eb41b6f635842425f0fe458c6952bad17217402532fcc",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.map_key_boundary",
      "kind": "error",
      "title": "type.map_key_boundary",
      "summary": "Map key at a boundary isn't text",
      "tokens": 243,
      "hash": "sha256:8e63bd7184bf6e0deca5c443f010877ff27c629f4138c6b5d9fff85ca098f247",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.match_arm_value",
      "kind": "error",
      "title": "type.match_arm_value",
      "summary": "Match arm gives no value",
      "tokens": 234,
      "hash": "sha256:8cecc8e741704981f9a86ab73eefd13689f99d2ed85d086d589f9d18a128ca16",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_duplicate_pattern",
      "kind": "error",
      "title": "type.match_duplicate_pattern",
      "summary": "Match pattern is already covered",
      "tokens": 254,
      "hash": "sha256:d712222e4fdb5fdc2287790ef5e7773b75e2e4bbd13639d9b0c7b3dad4709552",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_non_exhaustive",
      "kind": "error",
      "title": "type.match_non_exhaustive",
      "summary": "A `match` on an enum, a `Bool` or a value that may be `none` leaves out one of its cases",
      "tokens": 767,
      "hash": "sha256:84e5f69a817fc2fda9a3f4920646505dcb29aa84516877d3485794d9240a705d",
      "area": 3,
      "links": [
        "absent-values",
        "enums",
        "logic",
        "match"
      ]
    },
    {
      "id": "type.match_pattern_type",
      "kind": "error",
      "title": "type.match_pattern_type",
      "summary": "Pattern cannot match this value",
      "tokens": 203,
      "hash": "sha256:03e4576d5f0f048522db308f035772e619b94e787637e0945db3763c46e4571b",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_some_non_optional",
      "kind": "error",
      "title": "type.match_some_non_optional",
      "summary": "Nullable pattern on a value that is never none",
      "tokens": 194,
      "hash": "sha256:a6ec9956bf85d21b1fdc62bd999e85b0f190c83fda4f09d5ba15f5b918f7ced7",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_unknown_binding",
      "kind": "error",
      "title": "type.match_unknown_binding",
      "summary": "Pattern names data a case does not carry",
      "tokens": 244,
      "hash": "sha256:1496efd643603f563c292e7e2e46e6fa83d7937ae59b7a9ba924674c5a200bfd",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_unknown_variant",
      "kind": "error",
      "title": "type.match_unknown_variant",
      "summary": "Pattern names an unknown enum variant",
      "tokens": 205,
      "hash": "sha256:49a44068f32a4b5483c470079e6a8f302e8058ade2cd21b5d5869a834fb904b0",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_unreachable_pattern",
      "kind": "error",
      "title": "type.match_unreachable_pattern",
      "summary": "Match arm is unreachable after the wildcard",
      "tokens": 195,
      "hash": "sha256:e31125895877f450fa227c7d69806e5af0363c6a9b09100f9b05675052b051be",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_wildcard_closed",
      "kind": "error",
      "title": "type.match_wildcard_closed",
      "summary": "Wildcard on a value whose cases can be listed",
      "tokens": 233,
      "hash": "sha256:8c096bfb5768a5988930cc7970cf83cfff08ecea27d4f649d6fb2a149fbfe421",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.match_wildcard_required",
      "kind": "error",
      "title": "type.match_wildcard_required",
      "summary": "A `match` on text or a number lists some values but has no `_` arm for all the others",
      "tokens": 463,
      "hash": "sha256:36cecd894fd8d86bac75ddabcc00c1a63cd0a2a4253a342442a9ae99fe621565",
      "area": 3,
      "links": [
        "logic",
        "match",
        "type.match_wildcard_closed"
      ]
    },
    {
      "id": "type.mismatch",
      "kind": "error",
      "title": "type.mismatch",
      "summary": "A value of one type is used where a different type is required",
      "tokens": 755,
      "hash": "sha256:7656da30e157b52f0d480af8362fd3cc33d34354d525ba341a4455452b67faa5",
      "area": 2,
      "links": [
        "creating-values",
        "named-types",
        "values-and-types",
        "when-one-type-can-stand-in-for-another"
      ]
    },
    {
      "id": "type.missing_field",
      "kind": "error",
      "title": "type.missing_field",
      "summary": "An object value is built without one of the fields its type declares",
      "tokens": 464,
      "hash": "sha256:d8f1581c414c5aa37e14ad4e284f2cc417d9fd3be7f66751f41b9f501ccc5fe0",
      "area": 2,
      "links": [
        "absent-values",
        "objects",
        "values-and-types"
      ]
    },
    {
      "id": "type.missing_variant_field",
      "kind": "error",
      "title": "type.missing_variant_field",
      "summary": "Variant is missing a field",
      "tokens": 222,
      "hash": "sha256:33ee8a2561eb46cf9ded3a12227a888b2a32f06afa25a66b8f2454f9ec330800",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.money_split",
      "kind": "error",
      "title": "type.money_split",
      "summary": "Money is divided by a count",
      "tokens": 605,
      "hash": "sha256:9edb68315759fce9db01db0a8246042ea07469948c4273529abccacae5d3d1c7",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.named_argument_unknown",
      "kind": "error",
      "title": "type.named_argument_unknown",
      "summary": "Named argument is not a parameter",
      "tokens": 177,
      "hash": "sha256:3fc320b54eb8cc4d880e607490fa9852313f3d1411a4f32bd2bcf787d004778c",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.named_argument_unsupported",
      "kind": "error",
      "title": "type.named_argument_unsupported",
      "summary": "Callable does not take named arguments",
      "tokens": 214,
      "hash": "sha256:389ef155c3aace5ab1548f962d4bca36f00132118c724c989e197ae5089e73ed",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.not_a_type",
      "kind": "error",
      "title": "type.not_a_type",
      "summary": "Field's type is written as a value or a call",
      "tokens": 259,
      "hash": "sha256:aba5c5762053d75f708318caa00a45c5d961d8958f08bd6339b6995ad2148c23",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.not_a_value",
      "kind": "error",
      "title": "type.not_a_value",
      "summary": "Declaration named where a value is read",
      "tokens": 203,
      "hash": "sha256:e158b36fd304e7b2672d106de8d925a8bd7deb69ac69ccdad150cfac69b140de",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.not_record",
      "kind": "error",
      "title": "type.not_record",
      "summary": "Braces build a type that has no fields",
      "tokens": 186,
      "hash": "sha256:b51dfe25ff10079b2119c39888312ad926896ced2f4b5e97e6a4da265ffa6cf7",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.nullable_selection",
      "kind": "error",
      "title": "type.nullable_selection",
      "summary": "Field is read from a value that may be none",
      "tokens": 209,
      "hash": "sha256:ae87e2fe640eaa802deed6d2721630389812bc618054ad822675466658952d4a",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.optional_outside_input",
      "kind": "error",
      "title": "type.optional_outside_input",
      "summary": "Optional or default field outside an Input",
      "tokens": 230,
      "hash": "sha256:0fe2debe3a0069f9e3d53c2a35f5420518bd2876634fcdda18155a995468948a",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.ordering_operand",
      "kind": "error",
      "title": "type.ordering_operand",
      "summary": "A comparison such as `<` or `>` is used on a value that has no order, such as text or a value that may be `none`",
      "tokens": 766,
      "hash": "sha256:342a31edfbc2af163eebed6726a6e19ff68ca94942f470c66ee67f8a4711b0bc",
      "area": 3,
      "links": [
        "absent-values",
        "expressions-and-operators",
        "lists",
        "logic"
      ]
    },
    {
      "id": "type.password_hash_exposed",
      "kind": "error",
      "title": "type.password_hash_exposed",
      "summary": "Password hash is sent, read from a request or put in a failure",
      "tokens": 337,
      "hash": "sha256:a53bba2aaa561e3d40dba4b46d7f4109ab4d3b4cc9127e5fa5b3ce4f700ff8e3",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.presentation_text_persistence",
      "kind": "error",
      "title": "type.presentation_text_persistence",
      "summary": "Formatted text is stored",
      "tokens": 265,
      "hash": "sha256:65b2155d82a3c777c06dcb039962288934124e91974557fa1d482ae1bdc400c8",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.primitive_signature",
      "kind": "error",
      "title": "type.primitive_signature",
      "summary": "Signature uses a built-in type directly",
      "tokens": 209,
      "hash": "sha256:981ef3dc77bfeb3e2a3bf55a41b71fdcaa1ed77339ff54d836a6b63903ebaee6",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.principal_active_invalid",
      "kind": "error",
      "title": "type.principal_active_invalid",
      "summary": "Principal's active condition is not a test of the record's own fields",
      "tokens": 250,
      "hash": "sha256:2ede6ca7f6c8d6ec61514e299b710d54d5c981fcaa32053a27e2af399965d131",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.principal_subject_invalid",
      "kind": "error",
      "title": "type.principal_subject_invalid",
      "summary": "Principal's subject is not a field of a stored entity",
      "tokens": 200,
      "hash": "sha256:07505f177f3718ab898b5793e63fc10c98dcf3023e97996d63a8af6cdf8e2649",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.principal_subject_not_unique",
      "kind": "error",
      "title": "type.principal_subject_not_unique",
      "summary": "Principal's subject field is not unique",
      "tokens": 223,
      "hash": "sha256:8f40b241171508ffad3394b81defb14a62a185a54fa09e629750b82f3a3a5ad2",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.random_context",
      "kind": "error",
      "title": "type.random_context",
      "summary": "Randomness is read outside an action",
      "tokens": 313,
      "hash": "sha256:e9598626033d67169627b8249a0a3c4f499b2276c3f624e834a9aa740672f12a",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.record_type_arguments",
      "kind": "error",
      "title": "type.record_type_arguments",
      "summary": "A record names its type with type arguments, which come from its place or its values",
      "tokens": 470,
      "hash": "sha256:a1e51222ec966e1eddf030d50a7efdcf789e5da576fea4ba62896be3e572dea8",
      "area": 2,
      "links": [
        "geospatial-interop",
        "objects",
        "values-and-types"
      ]
    },
    {
      "id": "type.redundant_nullability",
      "kind": "error",
      "title": "type.redundant_nullability",
      "summary": "Type is already nullable",
      "tokens": 199,
      "hash": "sha256:c8f9dd66ef5da45108b377239feabe128d14c492aa04b63f24722aac52c0da65",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.reserved_field_name",
      "kind": "error",
      "title": "type.reserved_field_name",
      "summary": "Field uses a reserved name",
      "tokens": 166,
      "hash": "sha256:94b0e5202000af91866145f04d60460c7a5b4f25b1cff19e4f2c6bdc81897699",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.reserved_variant_name",
      "kind": "error",
      "title": "type.reserved_variant_name",
      "summary": "Variant is called `all`, which lists an enum's variants",
      "tokens": 382,
      "hash": "sha256:63b3ac9e9f45ee3d9e26778e635315f52afbf67a4bb0c2251f0e8e293fa15940",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.rule_name_taken",
      "kind": "error",
      "title": "type.rule_name_taken",
      "summary": "Rule is named like a field, another rule or `invalid`",
      "tokens": 235,
      "hash": "sha256:abf3863fea7809834f2aaf3a67d696ceda0b684342ab61a1d77951e629b93f73",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.rule_not_condition",
      "kind": "error",
      "title": "type.rule_not_condition",
      "summary": "Rule's condition isn't a `Bool`",
      "tokens": 222,
      "hash": "sha256:c441144e8ee16994d51b79477c126a9855d1e1ef1a9959440301fe9028f5ba95",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.rule_outside_fields",
      "kind": "error",
      "title": "type.rule_outside_fields",
      "summary": "Rule reads something besides its type's fields",
      "tokens": 330,
      "hash": "sha256:9b41bf29f5a3444d2fe0249cc2e9ff8632b5e103be53f88ca9385bab15df412c",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.rule_outside_object",
      "kind": "error",
      "title": "type.rule_outside_object",
      "summary": "Rule is written outside an object type",
      "tokens": 271,
      "hash": "sha256:bcea6fbf40e5b25e582e843a202f69318efe4ad7ec3f309af1675f2a874da42f",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.secret_exposed",
      "kind": "error",
      "title": "type.secret_exposed",
      "summary": "Secret value is sent, stored, logged or read as text",
      "tokens": 329,
      "hash": "sha256:d1385a5b257057376b885c2e25a0a3095e3b6e24b189d81a59d57c119ea5a9f7",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.setting_value",
      "kind": "error",
      "title": "type.setting_value",
      "summary": "Setting has the wrong kind of value",
      "tokens": 196,
      "hash": "sha256:4d681eed606d7af41e00952338418e323671ca433ae473636b7d515efb15fb5a",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.sibling_mismatch",
      "kind": "error",
      "title": "type.sibling_mismatch",
      "summary": "Field type is used for a sibling field type",
      "tokens": 236,
      "hash": "sha256:0828a695f1cbe69973fdf6608d8fc0077deaf0d1130932754181b83174f3afeb",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.standard_clash",
      "kind": "error",
      "title": "type.standard_clash",
      "summary": "Declaration has a standard type's name",
      "tokens": 298,
      "hash": "sha256:d4c95180a2d7744c76dce75c2f89f04d133e98b326602105d0c525969ba0b34b",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.standard_exists",
      "kind": "error",
      "title": "type.standard_exists",
      "summary": "You declared a type with the same fields as a standard type, such as a start and an end, under a name of your own",
      "tokens": 1521,
      "hash": "sha256:65b01d65484e1fc4e50f408bd787622eeb6454773e77b13b9e273e5ed4d0ccb8",
      "area": 19,
      "links": [
        "declining-a-judgement-call",
        "packages-use-the-standard-types",
        "standard-library",
        "the-standard-types",
        "what-every-geospatial-operation-follows"
      ]
    },
    {
      "id": "type.suggestions_value_invalid",
      "kind": "error",
      "title": "type.suggestions_value_invalid",
      "summary": "Suggestions setting has a value it can't take",
      "tokens": 232,
      "hash": "sha256:f94c7a326f3d1b41280ea7da9f3161e2f03e535649a32d2ac3b1b9dcda7f0d1c",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "type.temporal_clock_invalid",
      "kind": "error",
      "title": "type.temporal_clock_invalid",
      "summary": "Clock time is not written `HH:MM`",
      "tokens": 244,
      "hash": "sha256:89e60199c4895535b4f4123e796520de6c9ad4b85f53faec8c32e466b68dfe4f",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_format_component_duplicate",
      "kind": "error",
      "title": "type.temporal_format_component_duplicate",
      "summary": "Format component is given twice",
      "tokens": 206,
      "hash": "sha256:6c346e910639cda4f47d461fbefece7049dccdf5c66b9bc80c3494d47f7ec167",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_format_component_invalid",
      "kind": "error",
      "title": "type.temporal_format_component_invalid",
      "summary": "Format component takes no such style",
      "tokens": 235,
      "hash": "sha256:f0fd5542b03319611cf4ced5de51221e075d9f269882b488bde2bf516567ebdb",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_format_components_empty",
      "kind": "error",
      "title": "type.temporal_format_components_empty",
      "summary": "Declared format shows nothing",
      "tokens": 201,
      "hash": "sha256:c004de70e36b1c4e9e0003d5ce10aafbf4bc7f4334cde5dadff9c33e9a8e52c4",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_format_invalid",
      "kind": "error",
      "title": "type.temporal_format_invalid",
      "summary": "Format is not a written-out time format",
      "tokens": 329,
      "hash": "sha256:ab22edab03c1f6a44af0ecd7fdb2b31097e6b94e56d062e205979ffe5489fa78",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_format_part_missing",
      "kind": "error",
      "title": "type.temporal_format_part_missing",
      "summary": "Format shows a part a local time doesn't have",
      "tokens": 383,
      "hash": "sha256:0d2f49dc1288dcfd2cb9c525c7c0b2b53e90550782137a1cc7bfea3411ec39ad",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.temporal_format_requires_time",
      "kind": "error",
      "title": "type.temporal_format_requires_time",
      "summary": "Your code formats a date with a format that also shows a clock time, and a date has no time to show",
      "tokens": 691,
      "hash": "sha256:e96137fd7d742e6167d6f1b10d06dc8ac2d53a92eb364c23fea58b5283b9dbfa",
      "area": 10,
      "links": [
        "configuration",
        "showing-dates-and-times-to-people",
        "time-types"
      ]
    },
    {
      "id": "type.temporal_locales_required",
      "kind": "error",
      "title": "type.temporal_locales_required",
      "summary": "Formatting needs declared locales",
      "tokens": 872,
      "hash": "sha256:6cc5acf4027f2640337655db9fb6cfc6588b5f2e41bf1304ac2b57014ef94224",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_option_unused",
      "kind": "error",
      "title": "type.temporal_option_unused",
      "summary": "Option means nothing for this value",
      "tokens": 259,
      "hash": "sha256:c33bda55d3767d85e022f90769a4dacf0540d4a423ab01cb37adeede256fd41d",
      "area": 10,
      "links": [
        "configuration"
      ]
    },
    {
      "id": "type.temporal_zone_required",
      "kind": "error",
      "title": "type.temporal_zone_required",
      "summary": "Your code formats an `Instant` for people to read without saying which time zone to show it in",
      "tokens": 681,
      "hash": "sha256:ecffa6eabe3365318163fa73e3f6addf4dddf292e21a9bf2c960bc4303dc1c26",
      "area": 10,
      "links": [
        "configuration",
        "showing-dates-and-times-to-people",
        "time-types"
      ]
    },
    {
      "id": "type.test_clock_context",
      "kind": "error",
      "title": "type.test_clock_context",
      "summary": "The clock is moved outside a test",
      "tokens": 213,
      "hash": "sha256:b6f151a9651b6b606b6db63f4dad9a892a3c759b45c12115a37f0ed028dc9511",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "type.type_argument_count",
      "kind": "error",
      "title": "type.type_argument_count",
      "summary": "Type has the wrong number of type arguments",
      "tokens": 182,
      "hash": "sha256:c29fc759c01d7c8635ac7a9a05118a70ebd43dfd2df50a55f4984b9acde1fd74",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.unary_operand",
      "kind": "error",
      "title": "type.unary_operand",
      "summary": "Operator cannot be used with this value",
      "tokens": 179,
      "hash": "sha256:6314250f18d28d00aa8a289c8bb970d254a8cca6be85bbc80e940660e346404b",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.unit_as_number",
      "kind": "error",
      "title": "type.unit_as_number",
      "summary": "You declared a type named for a unit, such as `Grams`, `Pence` or `Percent`, on a plain number",
      "tokens": 1019,
      "hash": "sha256:57385511ab672c04c2c70f5c584867e088513fe20f5c1e1388fbf3372e9aec00",
      "area": 2,
      "links": [
        "declining-a-judgement-call",
        "money-and-payments",
        "named-types",
        "physical-quantities",
        "signals",
        "values-and-types"
      ]
    },
    {
      "id": "type.unit_required",
      "kind": "error",
      "title": "type.unit_required",
      "summary": "A plain number is given where a physical quantity, such as a length or a mass, needs its unit",
      "tokens": 814,
      "hash": "sha256:33925930c3f4baecfd85d133a6853e4542363daf396b6d7db2b007562f819ebd",
      "area": 19,
      "links": [
        "physical-quantities",
        "standard-library",
        "type.arithmetic_operand"
      ]
    },
    {
      "id": "type.unit_unknown",
      "kind": "error",
      "title": "type.unit_unknown",
      "summary": "Number is written with a suffix that is no unit",
      "tokens": 300,
      "hash": "sha256:ec74a3bfdf2fa4a46ce85daed2206599be30839166542b31ba4e4e6019ea8017",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.unknown_enum_variant",
      "kind": "error",
      "title": "type.unknown_enum_variant",
      "summary": "The code names a variant that the enum doesn't have, often a misspelling of one it does",
      "tokens": 426,
      "hash": "sha256:a787e8229ed886f941119b589f8200e00c7973dc7b8ae768df396bc6e167b1af",
      "area": 2,
      "links": [
        "enums",
        "values-and-types"
      ]
    },
    {
      "id": "type.unknown_field",
      "kind": "error",
      "title": "type.unknown_field",
      "summary": "Type has no such field",
      "tokens": 187,
      "hash": "sha256:aada8d77cc02a378c6b206a34b9aca00e233a754e8d9697569f3c8ea4fbfd3f8",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.unknown_setting",
      "kind": "error",
      "title": "type.unknown_setting",
      "summary": "Setting is not one Jadpo knows",
      "tokens": 497,
      "hash": "sha256:59363313c10957b11cb0fba5416a15ae49d881cd370b627c0c36e17375724dbf",
      "area": 2,
      "links": [
        "marking-personal-fields",
        "values-and-types"
      ]
    },
    {
      "id": "type.unknown_value",
      "kind": "error",
      "title": "type.unknown_value",
      "summary": "Name is not defined in this scope",
      "tokens": 149,
      "hash": "sha256:391cf05b05142a570a78d9dd152959099a37be7d95eede709f7e4baba5f6c30e",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.unknown_variant_field",
      "kind": "error",
      "title": "type.unknown_variant_field",
      "summary": "Variant has no such field",
      "tokens": 224,
      "hash": "sha256:6d465326a120230be9916edd7450435c34e0d348bcb004d402241dc2fa63ef8b",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.variant_retired",
      "kind": "error",
      "title": "type.variant_retired",
      "summary": "Code writes a retired code",
      "tokens": 334,
      "hash": "sha256:b549de7a75a6581ac14d51efd95884d07012b3995b8033109defd959db8bc109",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "visibility.private_cross_domain",
      "kind": "error",
      "title": "visibility.private_cross_domain",
      "summary": "Code in one domain uses an action, type or other declaration that another domain keeps private, because it isn't marked `public`",
      "tokens": 1096,
      "hash": "sha256:a8d30e0c63cc9f78c91dcff9e5817def96228392a0244adb97982a0467eadab1",
      "area": 1,
      "links": [
        "ownership-and-calls-replace-modules",
        "project-layout-and-modules",
        "shared-test-data-fixtures"
      ]
    },
    {
      "id": "visibility.public_not_allowed",
      "kind": "error",
      "title": "visibility.public_not_allowed",
      "summary": "Declaration can't be public",
      "tokens": 230,
      "hash": "sha256:69c84f4c3bae9d52e1de9f7fe2ddf801df0d185c884a357b7423da0933b0c878",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "visibility.public_reaches_private",
      "kind": "error",
      "title": "visibility.public_reaches_private",
      "summary": "Public declaration's signature names one that isn't public",
      "tokens": 329,
      "hash": "sha256:647f3e20d12347ef20335434adc2c32427c7a8e3003723b470484b79ac528cad",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "visibility.public_unused",
      "kind": "error",
      "title": "visibility.public_unused",
      "summary": "Public declaration no other domain uses",
      "tokens": 336,
      "hash": "sha256:51910e786a01d5146b241ee0d221e8df31cf1cb2c7cd204fbb867280097b1265",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "id": "jadpo-check",
      "kind": "command",
      "title": "jadpo check",
      "summary": "Check the project for errors.",
      "tokens": 634,
      "hash": "sha256:979c5bd74b49f774cfa811515101bd5ca3c2a4f0e32b9df566c90860ba72e494",
      "area": 14,
      "links": [
        "acceptance.base_missing",
        "acceptance.edited",
        "acceptance.missing",
        "acceptance.no_reason",
        "acceptance.unmatched",
        "cli.check_arguments",
        "migration.drop_not_accepted"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-test",
      "kind": "command",
      "title": "jadpo test",
      "summary": "Run tests.",
      "tokens": 1097,
      "hash": "sha256:4ca68a3987c528bd02905d03beec346bcfb31bea91bae3547bf6ef696e477203",
      "area": 14,
      "links": [
        "cli.test_arguments",
        "migration.apply_failed",
        "migration.extension_missing",
        "migration.extension_outdated",
        "test.assertion_failed",
        "test.database_unavailable",
        "test.failed",
        "test.fault",
        "test.no_tests",
        "test.runtime_start_failed",
        "test.subscriber_failed",
        "test.unexpected_failure",
        "toolchain.not_built_yet",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-dev",
      "kind": "command",
      "title": "jadpo dev",
      "summary": "Run the app and reload on every save.",
      "tokens": 1006,
      "hash": "sha256:5f76a22502805c851f08dac86e19e4451a8510806668f6a7aa28f63a2b575b5b",
      "area": 14,
      "links": [
        "cli.dev_arguments",
        "cli.dev_port_invalid",
        "cli.dev_start_failed",
        "migration.apply_failed",
        "migration.drop_not_accepted",
        "migration.extension_missing",
        "migration.extension_outdated",
        "migration.store_diverged",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-build",
      "kind": "command",
      "title": "jadpo build",
      "summary": "Build the app to deploy.",
      "tokens": 785,
      "hash": "sha256:5ac44829e84a1b21265dc6e3c0bdcded2dfbacf7d64c430606e91a3703c78c27",
      "area": 14,
      "links": [
        "cli.build_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.build_failed",
        "toolchain.fetch_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-fmt",
      "kind": "command",
      "title": "jadpo fmt",
      "summary": "Format source files.",
      "tokens": 690,
      "hash": "sha256:d5411511ab81dd5bdb830bbce388b26b320694668800525bc8ae3684e94f60bc",
      "area": 14,
      "links": [
        "cli.fmt_arguments",
        "format.changes_required",
        "format.unsafe",
        "format.write_failed",
        "layout.promotion_required",
        "toolchain.project_not_found",
        "toolchain.source_read_failed"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-package",
      "kind": "command",
      "title": "jadpo package",
      "summary": "Show, check, import and install packages.",
      "tokens": 3352,
      "hash": "sha256:da34020401fbc63b0a225f86c4e0526bb071f09cfc797efd0f15463c0ce95e2a",
      "area": 14,
      "links": [
        "cli.package_arguments",
        "cli.package_not_openapi",
        "cli.package_unreadable",
        "conform.failed",
        "conform.refused",
        "install.fetch_failed",
        "install.in_use",
        "install.not_in_registry",
        "install.not_proved",
        "install.surface_mismatch",
        "install.yanked",
        "package.advisory",
        "package.name_taken",
        "publish.behaviour_changed",
        "publish.breaking_change",
        "publish.changelog_missing",
        "publish.description_missing",
        "publish.example_failed",
        "publish.example_missing",
        "publish.failed",
        "publish.licence_proprietary",
        "publish.not_at_tag",
        "publish.publisher_mismatch",
        "publish.publisher_missing",
        "publish.repository_refused",
        "publish.stale_files",
        "record.edited",
        "recording.failed",
        "recording.refused",
        "registry.unreachable",
        "test.failed",
        "toolchain.artifact_write_failed",
        "toolchain.not_built_yet",
        "toolchain.project_not_found",
        "toolchain.scaffold_destination_exists",
        "toolchain.scaffold_destination_not_empty",
        "toolchain.scaffold_read_failed",
        "toolchain.scaffold_write_failed",
        "toolchain.source_read_failed"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-migrate",
      "kind": "command",
      "title": "jadpo migrate",
      "summary": "Write and apply migrations.",
      "tokens": 982,
      "hash": "sha256:bd8e2b6d7d5efff6b105d21aa68ff7c7b529acc69f6af9991e30292ff2913170",
      "area": 14,
      "links": [
        "cli.migrate_arguments",
        "migration.apply_failed",
        "migration.drop_not_accepted",
        "migration.extension_missing",
        "migration.extension_outdated",
        "migration.store_diverged",
        "toolchain.artifact_write_failed",
        "toolchain.not_built_yet",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-seed",
      "kind": "command",
      "title": "jadpo seed",
      "summary": "Fill the development database from a seed.",
      "tokens": 857,
      "hash": "sha256:7d9e1b43b1003787ea2ddfda275d7dc2af7b0a99e6d9ecf7887a2a1e1ca9c683",
      "area": 14,
      "links": [
        "cli.seed_arguments",
        "migration.apply_failed",
        "migration.drop_not_accepted",
        "migration.extension_missing",
        "migration.extension_outdated",
        "migration.store_diverged",
        "seed.failed",
        "seed.production_refused",
        "seed.unavailable",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-sql",
      "kind": "command",
      "title": "jadpo sql",
      "summary": "Show the SQL a query or action sends.",
      "tokens": 518,
      "hash": "sha256:6aa0de9ffcce245266d7130daf7152c6fd693ac7718d1ac29e2f8eb8c8f422b9",
      "area": 14,
      "links": [
        "cli.sql_arguments",
        "toolchain.not_built_yet",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-routes",
      "kind": "command",
      "title": "jadpo routes",
      "summary": "List every route.",
      "tokens": 349,
      "hash": "sha256:2ff385a28683a150b7b005c925d92c6f0b5f7a5ff10555da45ebfbaaf68e58c4",
      "area": 14,
      "links": [
        "cli.routes_arguments",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-ai",
      "kind": "command",
      "title": "jadpo ai",
      "summary": "Show prompts, record, usage.",
      "tokens": 823,
      "hash": "sha256:ec3299dd9e1f1b71b59929795378041d7348c5f667c98334a9047e2d88c5a4ab",
      "area": 14,
      "links": [
        "ai.usage_unavailable",
        "cli.ai_arguments",
        "recording.failed",
        "recording.refused",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-calls",
      "kind": "command",
      "title": "jadpo calls",
      "summary": "Show provider calls in dev.",
      "tokens": 634,
      "hash": "sha256:1371992fe481d36e64ce336409a53ea5988f8b0753278ad9c3b4d399353bb306",
      "area": 14,
      "links": [
        "cli.calls_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-email",
      "kind": "command",
      "title": "jadpo email",
      "summary": "Read the dev inbox and check mail.",
      "tokens": 730,
      "hash": "sha256:af5a9a6b60b4cab3af58ac57d1682d9d24bccdff5065bcb2ce8ace77f4ac74c0",
      "area": 14,
      "links": [
        "cli.email_arguments",
        "email.browser_failed",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-why",
      "kind": "command",
      "title": "jadpo why",
      "summary": "Explain why a schedule didn't run.",
      "tokens": 457,
      "hash": "sha256:1a4a44a8f700d7dc708f061b536d072774919d530f376a67671bbc24c0f7ef3f",
      "area": 14,
      "links": [
        "cli.why_arguments",
        "schedules.unavailable",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-api",
      "kind": "command",
      "title": "jadpo api",
      "summary": "Rewrite the API records.",
      "tokens": 449,
      "hash": "sha256:ea40f1a429d8a3bb81af70aa91690744a3c4df6de078013cabc17af2d0992e09",
      "area": 14,
      "links": [
        "cli.api_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-records",
      "kind": "command",
      "title": "jadpo records",
      "summary": "List and update the records.",
      "tokens": 619,
      "hash": "sha256:d94c81d05d4418524c61ebde05566c373edc5abbd17d70d57bb9c635f0db56f0",
      "area": 14,
      "links": [
        "cli.records_arguments",
        "record.edited",
        "record.format_newer",
        "record.out_of_date",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-acceptance",
      "kind": "command",
      "title": "jadpo acceptance",
      "summary": "Draft a person's acceptance.",
      "tokens": 539,
      "hash": "sha256:3229550621706d5899175bdb46c4268f8b6a0865e2aba31648e248abfe4ae63f",
      "area": 14,
      "links": [
        "acceptance.base_missing",
        "cli.acceptance_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-approval",
      "kind": "command",
      "title": "jadpo approval",
      "summary": "Explain a change, decisions first.",
      "tokens": 610,
      "hash": "sha256:52371725f475a5862dc6d3a2a33b1e8bf60f3973d022432ddedef91cde41f60a",
      "area": 14,
      "links": [
        "acceptance.base_missing",
        "cli.approval_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-declines",
      "kind": "command",
      "title": "jadpo declines",
      "summary": "List or clear declines.",
      "tokens": 543,
      "hash": "sha256:0263d830f56ff42a1f1bfef1558e9a4924ae56e670cd1efb08732fb7b25e59bb",
      "area": 14,
      "links": [
        "cli.declines_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-fix",
      "kind": "command",
      "title": "jadpo fix",
      "summary": "Fix a standard type's finding.",
      "tokens": 659,
      "hash": "sha256:5829faecff4e921f033c97856b0d2af19b767af7f13215fe16eee1d54957cce5",
      "area": 14,
      "links": [
        "cli.fix_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found",
        "type.standard_clash",
        "type.standard_exists"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-suggest",
      "kind": "command",
      "title": "jadpo suggest",
      "summary": "Hint where a standard type or operation fits.",
      "tokens": 931,
      "hash": "sha256:1f0cc6fc100dd57876711d5742161eb6667f5161d3e5a405baf58aebcbcb2818",
      "area": 14,
      "links": [
        "cli.suggest_arguments",
        "suggest.record_invalid",
        "suggest.share_failed",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-translations",
      "kind": "command",
      "title": "jadpo translations",
      "summary": "Keep translations up to date.",
      "tokens": 976,
      "hash": "sha256:f651b689dc49b6a1609082eb4ad7b67fa7d7ff478ae60b2a083a98c63e13c94b",
      "area": 14,
      "links": [
        "cli.translations_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found",
        "toolchain.source_read_failed",
        "translation.exchange_file_invalid",
        "translation.exchange_unit_unknown"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-schedules",
      "kind": "command",
      "title": "jadpo schedules",
      "summary": "Watch and control schedules.",
      "tokens": 816,
      "hash": "sha256:0412c550d8283ab0cbe47a2e71268338703a6cdd3ffb0c3ccc8f142485f1842b",
      "area": 14,
      "links": [
        "cli.schedules_arguments",
        "schedules.lease_held",
        "schedules.no_tick",
        "schedules.run_failed",
        "schedules.unavailable",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-flags",
      "kind": "command",
      "title": "jadpo flags",
      "summary": "Change and remove flags.",
      "tokens": 825,
      "hash": "sha256:d8ee4a1fa507d807ca2bd99f267211dec49155f6229b31e375a57844126a8f68",
      "area": 14,
      "links": [
        "cli.flags_arguments",
        "flags.unavailable",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-deliveries",
      "kind": "command",
      "title": "jadpo deliveries",
      "summary": "Retry, dismiss or cancel deliveries.",
      "tokens": 1170,
      "hash": "sha256:e039dd5eba5e5713bae484b171765a4e29cf0396eb391c6abd721dd284d20a6f",
      "area": 14,
      "links": [
        "cli.deliveries_arguments",
        "deliveries.not_found",
        "deliveries.unavailable",
        "deliveries.wrong_state",
        "schedules.lease_held",
        "schedules.no_tick",
        "schedules.run_failed",
        "schedules.unavailable",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-runs",
      "kind": "command",
      "title": "jadpo runs",
      "summary": "Check runs before a deploy.",
      "tokens": 588,
      "hash": "sha256:4a760213df8026c62d52ab0e5a854a74777c8ec08edebf7a69af8fe843435b1f",
      "area": 14,
      "links": [
        "cli.runs_arguments",
        "runs.unavailable",
        "toolchain.project_not_found"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-new",
      "kind": "command",
      "title": "jadpo new",
      "summary": "Start a project.",
      "tokens": 645,
      "hash": "sha256:71ab09e326464b7ebd377cba0e8747e6a747fe7fcbe067442e64dbcec1823c49",
      "area": 14,
      "links": [
        "cli.new_arguments",
        "toolchain.scaffold_destination_exists",
        "toolchain.scaffold_destination_not_empty",
        "toolchain.scaffold_name_invalid",
        "toolchain.scaffold_read_failed",
        "toolchain.scaffold_write_failed"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-config",
      "kind": "command",
      "title": "jadpo config",
      "summary": "Check and set local settings.",
      "tokens": 1421,
      "hash": "sha256:0086f18a28b90b4e8ce60297f3ca38bb1da8b3d47e1229e0209067a29710f959",
      "area": 14,
      "links": [
        "cli.config_arguments",
        "cli.config_prompt_failed",
        "cli.config_tty_required",
        "configuration.local_changed",
        "configuration.local_invalid_encoding",
        "configuration.local_read_failed",
        "configuration.local_syntax",
        "configuration.local_unsafe_target",
        "configuration.local_write_failed",
        "configuration.move_name_taken",
        "configuration.move_read_unsupported",
        "configuration.move_type_unsupported",
        "configuration.value_invalid",
        "configuration.value_missing",
        "toolchain.artifact_write_failed"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-completions",
      "kind": "command",
      "title": "jadpo completions",
      "summary": "Turn on Tab completion.",
      "tokens": 349,
      "hash": "sha256:52bf78ee9f09ee277bf6cc6bfb5ff922f322f8108c0b72580de277d44105bcdd",
      "area": 14,
      "links": [
        "cli.completions_arguments"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-toolchain",
      "kind": "command",
      "title": "jadpo toolchain",
      "summary": "Manage Jadpo releases.",
      "tokens": 676,
      "hash": "sha256:52a0c2e033a6d3a191b4140419e5cba8b21552243322f8a812392f8299428dc6",
      "area": 14,
      "links": [
        "cli.toolchain_arguments",
        "record.edited",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found",
        "toolchain.version_newer",
        "toolchain.version_older"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-lsp",
      "kind": "command",
      "title": "jadpo lsp",
      "summary": "Run the language server for editors.",
      "tokens": 315,
      "hash": "sha256:9dd242f6b4abc0de1ac1d71396f2f5f2de6bd3faa81198a340d3f1d6fb575ced",
      "area": 14,
      "links": [
        "cli.lsp_arguments"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-help",
      "kind": "command",
      "title": "jadpo help",
      "summary": "Show commands, flags and examples.",
      "tokens": 412,
      "hash": "sha256:8cf3980e5a491faadc4db0576740cde6994c066691b07d5950dbd3dceb59033d",
      "area": 14,
      "links": [
        "cli.help_arguments"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "jadpo-version",
      "kind": "command",
      "title": "jadpo version",
      "summary": "Print the version.",
      "tokens": 249,
      "hash": "sha256:314dfc63751c3887d79dfc027d4964d266c76f8f4c81c48b467282436f917e81",
      "area": 14,
      "links": [
        "cli.version_arguments"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": null
    },
    {
      "id": "language",
      "kind": "landing",
      "title": "Language",
      "summary": "How a Jadpo program is laid out and written: its types, logic, failures and standard library.",
      "tokens": 308,
      "hash": "sha256:2581ceb28f5a33a380dd481e1f7d61aa7d732ca2d30e831c49a9c16f461549dd",
      "area": null,
      "links": [
        "dates-and-times",
        "failures",
        "logic",
        "project-layout-and-modules",
        "standard-library",
        "types",
        "values-and-types"
      ],
      "group": "Language",
      "page": null,
      "status": null
    },
    {
      "id": "dates-and-times",
      "kind": "landing",
      "title": "Dates and times",
      "summary": "The types for dates, times and durations, how to read the clock, and how to work across zones and show a time to people.",
      "tokens": 246,
      "hash": "sha256:ecdf7cf96a999e43ae034cbec624f357a8dedbdce5b77d643aee91931fc7b397",
      "area": null,
      "links": [
        "arithmetic-and-comparison",
        "durations",
        "showing-dates-and-times-to-people",
        "the-current-time-clock-now",
        "time-types",
        "zones-and-local-times"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-people-and-contact",
      "kind": "landing",
      "title": "People and contact",
      "summary": "Names, email addresses, phone numbers and postal addresses.",
      "tokens": 497,
      "hash": "sha256:4d9db506be65e279c53549a7ced779cf577c38efc042bb8cfb60780966de5453",
      "area": null,
      "links": [
        "names-addresses-and-countries",
        "phone-numbers-and-postal-codes",
        "type-email",
        "type-email-with-name",
        "type-family-name",
        "type-given-name",
        "type-nationality",
        "type-person-name",
        "type-phone-extension",
        "type-phone-number",
        "type-postal-address",
        "type-postal-code",
        "type-uprn",
        "type-username"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-places",
      "kind": "landing",
      "title": "Places",
      "summary": "Countries, languages, locales, time zones and the codes for them.",
      "tokens": 312,
      "hash": "sha256:4fef20ad12dce58261cd642870efebb4fc8d8e410153d709db2c2f87f13ea92a",
      "area": null,
      "links": [
        "type-calling-code",
        "type-continent",
        "type-country",
        "type-country-subdivision",
        "type-language",
        "type-locale",
        "type-text-direction",
        "type-un-locode",
        "type-writing-script",
        "type-zone"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-geospatial",
      "kind": "landing",
      "title": "Geospatial",
      "summary": "Points, lines, shapes and the coordinates and map features built from them.",
      "tokens": 616,
      "hash": "sha256:e32c6dc2c4507a000cc6df403efacc85b23817ee9963031a1ff40a7756f7af0d",
      "area": null,
      "links": [
        "geospatial-types",
        "type-bearing",
        "type-bounding-box",
        "type-circle",
        "type-crs",
        "type-easting-northing",
        "type-feature",
        "type-feature-collection",
        "type-geohash",
        "type-geometry",
        "type-h3-cell",
        "type-latitude",
        "type-line-string",
        "type-longitude",
        "type-map-tile",
        "type-multi-line-string",
        "type-multi-point",
        "type-multi-polygon",
        "type-point",
        "type-polygon"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-money-and-banking",
      "kind": "landing",
      "title": "Money and banking",
      "summary": "Amounts of money, prices, rates, cards and bank accounts.",
      "tokens": 916,
      "hash": "sha256:ad2f9720792d7fa00fc1b914fe174f3e1129fa70e768cf04e4c22736a6be8a64",
      "area": null,
      "links": [
        "bank-accounts",
        "exchange-rates",
        "money-and-payments",
        "prices-discounts-and-rates",
        "type-aba-routing-number",
        "type-bank-account",
        "type-basis-points",
        "type-bic",
        "type-card-bin",
        "type-card-brand",
        "type-card-expiry",
        "type-currency",
        "type-discount",
        "type-exchange-rate",
        "type-iban",
        "type-interest-rate",
        "type-interest-rate-basis",
        "type-invoice-number",
        "type-isin",
        "type-lei",
        "type-masked-card-number",
        "type-money",
        "type-payment-card-number",
        "type-payment-reference",
        "type-price",
        "type-tax-rate",
        "type-uk-account-number",
        "type-uk-sort-code",
        "type-unit-price"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-tax-and-identity-numbers",
      "kind": "landing",
      "title": "Tax and identity numbers",
      "summary": "Tax numbers, company numbers and identity documents.",
      "tokens": 522,
      "hash": "sha256:eebc93ecb4d3381c89f35dfe30b21c5b2f080726432f24353732545a19a3a2b8",
      "area": null,
      "links": [
        "cards-and-identity-documents",
        "groups-with-the-baseline-only",
        "type-driving-licence-number",
        "type-identity-document",
        "type-identity-document-kind",
        "type-nhs-number",
        "type-passport-number",
        "type-tax-id",
        "type-uk-company-number",
        "type-uk-national-insurance-number",
        "type-uk-utr",
        "type-us-ein",
        "type-us-ssn",
        "type-vat-number"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-commerce-and-logistics",
      "kind": "landing",
      "title": "Commerce and logistics",
      "summary": "Product codes, sizes, shipping terms, tracking numbers and vehicles.",
      "tokens": 799,
      "hash": "sha256:c18ae5fa377765e3988d640286e6191e994f6da13618acef04a01416baccf8b3",
      "area": null,
      "links": [
        "commerce-travel-and-health-codes",
        "records-and-health-measures",
        "type-barcode",
        "type-carrier",
        "type-clothing-size",
        "type-clothing-size-system",
        "type-container-number",
        "type-dimensions",
        "type-ean13",
        "type-hs-code",
        "type-incoterm",
        "type-isbn",
        "type-lot-number",
        "type-rating",
        "type-serial-number",
        "type-shoe-size",
        "type-shoe-size-system",
        "type-sku",
        "type-sscc",
        "type-tracking-number",
        "type-unit-quantity",
        "type-upc-a",
        "type-vehicle-registration",
        "type-vin"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-time-and-calendar",
      "kind": "landing",
      "title": "Time and calendar",
      "summary": "Instants, dates, durations, recurring rules and calendar events.",
      "tokens": 697,
      "hash": "sha256:5bd12cd842dffdb1d5c65ac2aef8d82e44c3f3a22314e62c4d2329cab3304bb9",
      "area": null,
      "links": [
        "calendar-events",
        "recurrences-and-opening-hours",
        "time-and-calendar-additions",
        "type-calendar-date",
        "type-calendar-event",
        "type-calendar-period",
        "type-date-range",
        "type-duration",
        "type-instant",
        "type-instant-range",
        "type-iso-week",
        "type-local-date-time",
        "type-local-time",
        "type-month",
        "type-opening-hours",
        "type-quarter",
        "type-recurrence-rule",
        "type-utc-offset",
        "type-weekday",
        "type-year",
        "type-year-month",
        "type-zoned-time"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-physical-quantities",
      "kind": "landing",
      "title": "Physical quantities",
      "summary": "Length, mass, temperature, energy and other measured amounts.",
      "tokens": 450,
      "hash": "sha256:68d5573e42ab03c9f125ec713517285369377f80d2fe3fd4a891a7dac687b790",
      "area": null,
      "links": [
        "physical-quantities",
        "type-angle",
        "type-area",
        "type-concentration",
        "type-current",
        "type-energy",
        "type-frequency",
        "type-illuminance",
        "type-length",
        "type-mass",
        "type-power",
        "type-pressure",
        "type-sound-level",
        "type-speed",
        "type-temperature",
        "type-temperature-difference",
        "type-voltage",
        "type-volume"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-maths-and-data",
      "kind": "landing",
      "title": "Maths and data",
      "summary": "Percentages, ratios, ranges, data sizes and vectors.",
      "tokens": 218,
      "hash": "sha256:516922d344642b676d1647a94a5bd67e13040d825791462ebe8591d10453b538",
      "area": null,
      "links": [
        "type-bitrate",
        "type-data-size",
        "type-embedding",
        "type-fraction",
        "type-percentage",
        "type-range",
        "type-ratio",
        "type-vector"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-health",
      "kind": "landing",
      "title": "Health",
      "summary": "Clinical codes, doses, blood measures and allergens.",
      "tokens": 294,
      "hash": "sha256:a62c75c83f35159ee0b8bfa9ef6e3fcdc35ff092ac4271c1b19775d5fe43430b",
      "area": null,
      "links": [
        "type-allergen",
        "type-blood-glucose",
        "type-blood-pressure",
        "type-blood-type",
        "type-dosage-instruction",
        "type-dose",
        "type-heart-rate",
        "type-icd10-code",
        "type-route-of-administration",
        "type-snomed-concept"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-media-and-visual",
      "kind": "landing",
      "title": "Media and visual",
      "summary": "Colours, image and page sizes, video and audio formats and subtitles.",
      "tokens": 589,
      "hash": "sha256:a4a39450cee4ece75de27494d7fdac84ee7e1f314829502b00d98c733736bf40",
      "area": null,
      "links": [
        "colour",
        "media",
        "type-alt-text",
        "type-aspect-ratio",
        "type-audio-codec",
        "type-colour",
        "type-content-rating",
        "type-content-rating-scheme",
        "type-exif-orientation",
        "type-frame-rate",
        "type-image-dimensions",
        "type-insets",
        "type-paper-size",
        "type-rect",
        "type-subtitle-cue",
        "type-timecode",
        "type-video-codec",
        "type-video-resolution"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-web-and-network",
      "kind": "landing",
      "title": "Web and network",
      "summary": "URLs, domain names, HTTP values, IP addresses and network identifiers.",
      "tokens": 697,
      "hash": "sha256:1bcebd25bea51f2f61cefbf78ceb63686c6a44d8cc33bae3000c2401ee65f825",
      "area": null,
      "links": [
        "type-cidr",
        "type-cookie",
        "type-domain-name",
        "type-emoji",
        "type-file-type",
        "type-hostname",
        "type-http-header-name",
        "type-http-method",
        "type-http-status",
        "type-imei",
        "type-ip-address",
        "type-json-pointer",
        "type-mac-address",
        "type-network-port",
        "type-problem-details",
        "type-push-token",
        "type-relative-url",
        "type-slug",
        "type-url",
        "type-url-path",
        "type-user-agent",
        "type-utm-parameters",
        "type-web-origin",
        "web-and-software"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-software",
      "kind": "landing",
      "title": "Software",
      "summary": "Versions, package and licence identifiers, traces, file names and unique IDs.",
      "tokens": 644,
      "hash": "sha256:2d4ccff35f1816d8f65b6c5d51a4a6ce770f85a1fed00a34b9e09d905f6f2318",
      "area": null,
      "links": [
        "software-types",
        "type-container-image",
        "type-cve",
        "type-digest",
        "type-doi",
        "type-file-name",
        "type-file-path",
        "type-git-ref",
        "type-idempotency-key",
        "type-log-level",
        "type-package-url",
        "type-regular-expression",
        "type-semantic-version",
        "type-span-id",
        "type-spdx-licence",
        "type-trace-id",
        "type-trace-parent",
        "type-ulid",
        "type-uuid",
        "type-version-range"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-text-formats",
      "kind": "landing",
      "title": "Text formats",
      "summary": "Markdown, HTML, rich text and text held in several languages.",
      "tokens": 284,
      "hash": "sha256:d2048296215f578dfcaf022e7346c75b974d872aa7c6ce082a456d1a65cdc65c",
      "area": null,
      "links": [
        "text-formats",
        "type-html",
        "type-localised-text",
        "type-markdown",
        "type-rich-text",
        "type-rich-text-block",
        "type-rich-text-mark",
        "type-rich-text-span"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-security",
      "kind": "landing",
      "title": "Security",
      "summary": "Passwords, hashes, tokens, keys and credentials.",
      "tokens": 656,
      "hash": "sha256:20a3fba402ee090f3efe6852d324dc1d2be31283ef3c4d437dce1e908cfc9c53",
      "area": null,
      "links": [
        "secret-values",
        "security-records",
        "type-api-key",
        "type-bearer-token",
        "type-certificate",
        "type-encrypted-value",
        "type-hash",
        "type-hmac",
        "type-jwk",
        "type-jwt",
        "type-jwt-claims",
        "type-o-auth-scope",
        "type-oidc-claims",
        "type-one-time-code",
        "type-password",
        "type-password-check",
        "type-password-hash",
        "type-password-policy",
        "type-public-key",
        "type-secret-text",
        "type-totp-secret",
        "type-web-authn-credential"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-travel",
      "kind": "landing",
      "title": "Travel",
      "summary": "Airport and airline codes, flight numbers, cabin classes and bookings.",
      "tokens": 196,
      "hash": "sha256:a8ec8ccb50dc3740f3182ea727555429e78fe66f82fd5a43668763eb90ec2d7c",
      "area": null,
      "links": [
        "type-booking-reference",
        "type-cabin-class",
        "type-flight-number",
        "type-iata-airline",
        "type-iata-airport",
        "type-icao-airport"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-other-with-a-published-standard",
      "kind": "landing",
      "title": "Other with a published standard",
      "summary": "Other values a published standard defines, from UN numbers to energy ratings.",
      "tokens": 294,
      "hash": "sha256:5efda9c3d2f099e37a08c4414f37cfa76e0f7c3d2a6e2f3f76a8004ac9a7813f",
      "area": null,
      "links": [
        "type-cefr-level",
        "type-epc-rating",
        "type-jurisdiction",
        "type-lawful-basis",
        "type-model-id",
        "type-mpan",
        "type-mprn",
        "type-orcid",
        "type-tenure",
        "type-un-number"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "types-ai",
      "kind": "landing",
      "title": "AI",
      "summary": "Token counts, token usage and the messages of a chat with a model.",
      "tokens": 220,
      "hash": "sha256:b817d921cb1d83957cfaaf57b0fb88b776c16932b9bb11458c3ea62458ceb015",
      "area": null,
      "links": [
        "ai-types",
        "type-chat-message",
        "type-chat-role",
        "type-token-count",
        "type-token-usage"
      ],
      "group": "Language",
      "page": "Values and types",
      "status": null
    },
    {
      "id": "storing-data",
      "kind": "landing",
      "title": "Data",
      "summary": "What an app stores and how it reads and writes it: entities, migrations, queries, personal data and location.",
      "tokens": 214,
      "hash": "sha256:2b594a77f30a2a33ca4a19c713becd9f1f39e11a314d26ca7273d7192b6e9525",
      "area": null,
      "links": [
        "data",
        "geospatial",
        "personal-data",
        "reads-and-writes"
      ],
      "group": "Data",
      "page": null,
      "status": null
    },
    {
      "id": "apis",
      "kind": "landing",
      "title": "APIs",
      "summary": "What an app answers: its routes, who is calling them and what each caller may do.",
      "tokens": 98,
      "hash": "sha256:57a2e0d43f588b011efa38c5e1055f7d9960fe2a9b10d5f884e06419535fcdec",
      "area": null,
      "links": [
        "http",
        "identity",
        "policy"
      ],
      "group": "APIs",
      "page": null,
      "status": null
    },
    {
      "id": "background-events",
      "kind": "landing",
      "title": "Events",
      "summary": "How one part of an app tells the others that something happened: declaring an event, emitting it and subscribing to it.",
      "tokens": 395,
      "hash": "sha256:30502c9ddadaf031715102fac7898e91527b713f8d47d8b41b70b0ebd019a214",
      "area": null,
      "links": [
        "background-work-and-tenants",
        "declaring-an-event",
        "emitting-an-event",
        "events-from-outside",
        "long-running-coordination",
        "reacting-in-another-domain",
        "subscribers",
        "where-events-travel"
      ],
      "group": "Background work",
      "page": "Events",
      "status": null
    },
    {
      "id": "delivery-and-failure",
      "kind": "landing",
      "title": "Delivery and failure",
      "summary": "How an event reaches its subscribers, what happens when a subscriber fails, and what the person running the app sees.",
      "tokens": 240,
      "hash": "sha256:9b4c0a86fd06f1c4f8102ce081b8b75ffd37d486411e218b34c2c168923f84fa",
      "area": null,
      "links": [
        "delivery-at-least-once-safe-to-repeat",
        "limits-and-runtime-faults",
        "retries-and-giving-up",
        "several-changing-calls-in-one-action",
        "what-an-operator-sees"
      ],
      "group": "Background work",
      "page": "Delivery and failure",
      "status": null
    },
    {
      "id": "connecting-and-calling",
      "kind": "landing",
      "title": "Connecting and calling",
      "summary": "How an app reaches an outside service, such as a courier's API, in development, in tests and in production.",
      "tokens": 780,
      "hash": "sha256:9cd6626a190ca86e52d64de83ece29445ee88cb44c5224c2fae569bf0cae2072",
      "area": null,
      "links": [
        "calling",
        "connecting-in-app-jadpo",
        "decoding",
        "fakes-and-the-development-call-log",
        "how-connections-to-packages-are-read",
        "how-outside-calls-are-made-safe",
        "how-provider-calls-are-made",
        "oauth-grants",
        "packages-from-other-jadpo-apps",
        "provider-calls-in-development",
        "several-changing-provider-calls",
        "tests-and-fakes",
        "wire-encodings-decoders-and-retries"
      ],
      "group": "External services",
      "page": "Connecting and calling",
      "status": null
    },
    {
      "id": "using-packages",
      "kind": "landing",
      "title": "Using packages",
      "summary": "The kinds of package, where they come from, and what a package may do in your app.",
      "tokens": 774,
      "hash": "sha256:b27094fc28d26df615d8e1b3ef505e2110dae134b050293b8ff357f38f114c57",
      "area": null,
      "links": [
        "compile-time",
        "enum-values-and-failures-through-a-package",
        "how-packages-are-installed-and-linked",
        "how-the-openapi-importer-reads-a-document",
        "kinds-of-package",
        "package-names-and-linked-checkouts",
        "shape-and-name-detection",
        "the-scoped-review-and-unconfirmed-operations",
        "the-surface",
        "two-versions-side-by-side-lazy-loading-and-the-package-cache",
        "what-package-code-may-do",
        "what-reviewers-see",
        "where-packages-come-from",
        "where-packages-live"
      ],
      "group": "External services",
      "page": "Using packages",
      "status": "partly built"
    },
    {
      "id": "writing-and-publishing-packages",
      "kind": "landing",
      "title": "Writing and publishing packages",
      "summary": "The package format, and how you develop, verify and publish a package.",
      "tokens": 688,
      "hash": "sha256:ddd566d6366f9b98399b49e7a861facaab8d6101e70897796cbefdb835172185",
      "area": null,
      "links": [
        "developing-and-publishing-a-package",
        "how-a-releases-facts-change-record-and-fingerprints-are-worked-out",
        "how-the-package-format-is-read",
        "how-the-registry-commands-work",
        "how-the-surface-and-the-publishing-bar-work",
        "package-actions-and-recipes",
        "package-subscribers-and-recipes-in-sample",
        "recordings",
        "the-package-format",
        "the-public-registry",
        "the-verifier"
      ],
      "group": "External services",
      "page": "Writing and publishing packages",
      "status": "partly built"
    },
    {
      "id": "settings-and-secrets",
      "kind": "landing",
      "title": "Settings and secrets",
      "summary": "The values an app reads when it starts: settings, secrets, connection URLs and signing keys.",
      "tokens": 386,
      "hash": "sha256:8e012ae11dcfb663f580c0af3cf6b5dad73f137796058a35e2ff91f5ddab30fa",
      "area": null,
      "links": [
        "checking-values-before-the-app-starts",
        "client-addresses",
        "database-and-other-connection-urls",
        "retention-periods",
        "secrets",
        "settings-config-jadpo",
        "signing-keys",
        "values-on-your-machine-and-in-production"
      ],
      "group": "Configuration",
      "page": "Settings and secrets",
      "status": null
    },
    {
      "id": "languages-and-translations",
      "kind": "landing",
      "title": "Languages and translations",
      "summary": "The languages your app speaks, and how its text is translated and checked.",
      "tokens": 410,
      "hash": "sha256:a6e6f8558aef628ca52765727f81cee806e6e4785dbd78e254924917e477c174",
      "area": null,
      "links": [
        "enums-with-wording",
        "exchanging-translations",
        "failures-for-client-apps",
        "locales",
        "packages-text-in-an-app",
        "tooling-for-translations",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ],
      "group": "Configuration",
      "page": "Languages and translations",
      "status": null
    },
    {
      "id": "commands",
      "kind": "landing",
      "title": "Commands",
      "summary": "Every jadpo command, what it does and how to run it.",
      "tokens": 1273,
      "hash": "sha256:a184d405fd04bebfb6d0e8d1ecee80e128b17b00c05e082056ec3eaef437af64",
      "area": null,
      "links": [
        "commands-for-background-work",
        "commands-for-debugging-editors-and-help",
        "commands-for-looking-into-and-changing-code",
        "commands-for-packages",
        "commands-for-records-findings-and-review",
        "commands-for-services-calls-email-and-stored-data",
        "commands-for-the-database-settings-and-translations",
        "jadpo-acceptance",
        "jadpo-ai",
        "jadpo-api",
        "jadpo-approval",
        "jadpo-build",
        "jadpo-calls",
        "jadpo-check",
        "jadpo-completions",
        "jadpo-config",
        "jadpo-declines",
        "jadpo-deliveries",
        "jadpo-dev",
        "jadpo-email",
        "jadpo-fix",
        "jadpo-flags",
        "jadpo-fmt",
        "jadpo-help",
        "jadpo-lsp",
        "jadpo-migrate",
        "jadpo-new",
        "jadpo-package",
        "jadpo-records",
        "jadpo-routes",
        "jadpo-runs",
        "jadpo-schedules",
        "jadpo-seed",
        "jadpo-sql",
        "jadpo-suggest",
        "jadpo-test",
        "jadpo-toolchain",
        "jadpo-translations",
        "jadpo-version",
        "jadpo-why",
        "the-jadpo-command"
      ],
      "group": "Tools",
      "page": "Commands",
      "status": "partly built"
    },
    {
      "id": "formatter-and-editors",
      "kind": "landing",
      "title": "Formatter and editors",
      "summary": "How `jadpo fmt` lays out your code, and what your editor gets from Jadpo.",
      "tokens": 124,
      "hash": "sha256:d4bc524597d943eb72c318b333a98ad560e872dffb27310b6d4fdb70c636e728",
      "area": null,
      "links": [
        "editor-support",
        "formatting"
      ],
      "group": "Tools",
      "page": "Formatter and editors",
      "status": null
    },
    {
      "id": "building-and-deploying",
      "kind": "landing",
      "title": "Building and deploying",
      "summary": "What `jadpo build` writes, for a server of your own or for Cloudflare Workers, and which version of `jadpo` a project runs.",
      "tokens": 226,
      "hash": "sha256:5afe2356c7b55409832762bedc4f9d11cc79af19c2b9edfa0977974133df17c5",
      "area": null,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "declared-deployables",
        "the-build-folder",
        "which-jadpo-runs"
      ],
      "group": "Tools",
      "page": "Building and deploying",
      "status": null
    }
  ]
}
