{
  "version": "0.1.0",
  "pages": [
    {
      "id": "primer",
      "kind": "primer",
      "title": "Primer",
      "summary": "Read this once before you write a Jadpo app.",
      "tokens": 6257,
      "hash": "sha256:3103b3db51d4d650e1eef3e38ebfa2faf4a62ae531ebfafd6c3b3f71160f3a71",
      "area": null,
      "links": [
        "failure.kind_required",
        "grants",
        "how-integrations-fit-together",
        "kinds-of-test",
        "learn",
        "learn-sign-in",
        "magic-links",
        "migrations",
        "named-queries",
        "standard-library",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "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:2455fbf78bb60d2f4fcd9abd9b46a3b88b03af4aa71658022949981a5b7f6d30",
      "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": 1533,
      "hash": "sha256:dfaae060f0c8dbe9c22b5ac807133e5b421f361c3180d66d5f5a2b7bc470fee7",
      "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": 3116,
      "hash": "sha256:e033f054dd052046f306b1ca5684afba87d89fbd67edd0ccd8913c1532981cd8",
      "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": 2196,
      "hash": "sha256:4b5f6a8ee680bbbd0e90be73e7e51f2cd9b4e2be8da2acc732cf3b3d28670410",
      "area": null,
      "links": [
        "absent-values",
        "enums",
        "named-types"
      ]
    },
    {
      "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": 1428,
      "hash": "sha256:ed031bf6a9d34cb3897a664daf2aa9c0200a2a44e3e55590c5c25efc5f9199fb",
      "area": null,
      "links": [
        "declaring-a-failure",
        "how-failures-reach-the-client"
      ]
    },
    {
      "id": "learn-reading",
      "kind": "learn",
      "title": "Reading todos",
      "summary": "The app stores todos but can't show them.",
      "tokens": 2126,
      "hash": "sha256:b574d8ccceaf2aef02388f03f9035af61394754f749173e7d3617231b99b2c42",
      "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": 1882,
      "hash": "sha256:e4514e114996f18547a16a5775415e96c836d06d24dac21d75d96077324d969f",
      "area": null,
      "links": [
        "secrets",
        "settings-config-jadpo",
        "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": 3367,
      "hash": "sha256:e344629d59c90d7221f27bbf481743b8be0c9a477a319cb7d2ae51d7ce3a7c1b",
      "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": 3552,
      "hash": "sha256:21a20314c09156ba9bd5b4ba782aa08491e3048634b0bce30419a470cd398123",
      "area": null,
      "links": [
        "a-person-the-app-has-not-seen",
        "magic-links",
        "the-dev-inbox-and-the-health-score"
      ]
    },
    {
      "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": 1997,
      "hash": "sha256:e8cb9d30d5563f4d0966114c0a9eb3ff1513ca467f57e23cd56e5c67738c64cf",
      "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": 1686,
      "hash": "sha256:0a2ca85ff6744911489193d67e0d9194d058b6f68f1ca632f8a900d2f4c1eb31",
      "area": null,
      "links": [
        "a-workers-deployable",
        "declared-deployables",
        "primer",
        "rate-limits-on-workers"
      ]
    },
    {
      "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": 40,
      "hash": "sha256:8457d6d68bf896b525839874aaaec690d43805c6f0684dc17155e55c71b48c89",
      "area": 1,
      "links": []
    },
    {
      "id": "project-layout",
      "kind": "topic",
      "title": "Project layout",
      "summary": "A project is the folder that holds `app.jadpo`.",
      "tokens": 242,
      "hash": "sha256:62cb6f287b1be25dbe3ee0ad7b4df5d79753ec6a80771cf2322d5604365cd56b",
      "area": 1,
      "links": [
        "decided-layout",
        "files-and-names"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "naming",
      "kind": "topic",
      "title": "Naming",
      "summary": "Every name has one spelling, decided by what kind of thing it names.",
      "tokens": 586,
      "hash": "sha256:a68695f0fb8565587b7bf6f817a2abf56a66dbd68d2d56e32f536ed5a6b25598",
      "area": 1,
      "links": [
        "suggestions",
        "values-and-types"
      ]
    },
    {
      "id": "comments",
      "kind": "topic",
      "title": "Comments",
      "summary": "A line comment starts with `//`.",
      "tokens": 94,
      "hash": "sha256:4e3c266ec9d5dc0c8e8de2f9eb7b9c7d24ed9f591ef53545b3928b5a35b6263b",
      "area": 1,
      "links": []
    },
    {
      "id": "every-error-has-the-same-shape",
      "kind": "topic",
      "title": "Every error has the same shape",
      "summary": "Each compiler error gives where the problem is, a reason, a suggested next step and who should act on it, and a stable rule ID with a link to its page.",
      "tokens": 165,
      "hash": "sha256:17bda3aa891b7865b621e4f85ad31611b7001e25e0640fe872714d8db403176e",
      "area": 1,
      "links": []
    },
    {
      "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": 1795,
      "hash": "sha256:89d983c598129990005f71f0910eee6048b7790877cfddfaa9f77797b3e62654",
      "area": 1,
      "links": [
        "ai",
        "built-in-services",
        "commands-for-records-findings-and-review",
        "configuration-and-time",
        "constant.similar_exists",
        "decline.not_declinable",
        "decline.unused",
        "external-services",
        "feature-flags",
        "jobs-and-events",
        "library.similar_exists",
        "logic",
        "query.nearest_exact",
        "records-and-manifest",
        "standard-library",
        "step.late_failure",
        "type.batch_order_updatable"
      ]
    },
    {
      "id": "decided-layout",
      "kind": "topic",
      "title": "Decided layout",
      "summary": "Every project has the same shape at every size.",
      "tokens": 936,
      "hash": "sha256:4cd133907c70ee8b0562b0f33713b7c8db9468db98bc28f4a2893f4afba63b3a",
      "area": 1,
      "links": []
    },
    {
      "id": "the-root",
      "kind": "topic",
      "title": "The root",
      "summary": "`authentication.jadpo`, `policy.jadpo`, `flags.jadpo`, `jadpo.lock`, `ignored_suggestions.jadpo_record`, `taught_suggestions.jadpo_record`, `domains/`, `shared/`, `packages/`, `database/`, `api/`,…",
      "tokens": 770,
      "hash": "sha256:e566484cf6b8ff422929ae57afdc34715f8ce9ca1af4a0b9917752b65367755f",
      "area": 1,
      "links": [
        "suggestions",
        "the-jadpo-command",
        "the-package-format",
        "translations-as-messages",
        "where-packages-live",
        "which-jadpo-runs"
      ]
    },
    {
      "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": 1026,
      "hash": "sha256:3626b65ee31b201210e450dc36aeca406f82088be3b44f89c3022cde76360874",
      "area": 1,
      "links": [
        "configuration-and-time",
        "constants",
        "data",
        "documents",
        "email",
        "external-services",
        "failures",
        "prompts-as-files",
        "records-and-manifest"
      ]
    },
    {
      "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": 1548,
      "hash": "sha256:3b3f2edb026386ed646fa5a50d6c39f8b4c7e7f87a7df86694ac8c8fb45f7862",
      "area": 1,
      "links": [
        "constants",
        "imports",
        "tools-for-agents"
      ]
    },
    {
      "id": "sharing-and-promotion",
      "kind": "topic",
      "title": "Sharing and promotion",
      "summary": "A type, failure or helper used by one file lives in that file.",
      "tokens": 1253,
      "hash": "sha256:fc2857aa0ba15f07d82c4bdbdf766f17f140f8794bd674f2dc9f40854c59fa0a",
      "area": 1,
      "links": [
        "constants",
        "email",
        "stable-identity",
        "the-package-format"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "imports",
      "kind": "topic",
      "title": "Imports",
      "summary": "With imports, the place every name comes from can be read from the file itself.",
      "tokens": 1576,
      "hash": "sha256:cd1ad6e416dcf8266e6de221d57024e60381fac849506d22f104b4b67ee2325f",
      "area": 1,
      "links": [
        "reads-and-writes",
        "standard-library"
      ]
    },
    {
      "id": "database",
      "kind": "topic",
      "title": "Database",
      "summary": "every table, column and index a stable identity, so renaming a field renames its column instead of dropping it.",
      "tokens": 403,
      "hash": "sha256:b2610fe4fc00d2812f52be46cb75bad40e4174eafde5ad6fc7ede21790925c32",
      "area": 1,
      "links": [
        "acceptances",
        "stable-identity",
        "what-is-committed-and-why"
      ]
    },
    {
      "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": 517,
      "hash": "sha256:1983ae605a4ba1fb6321d04b0fc357ad3b1d32f786d7dccd1a58ed8a0c48bce0",
      "area": 1,
      "links": [
        "constants",
        "external-services",
        "http",
        "jobs-and-events",
        "reads-and-writes"
      ]
    },
    {
      "id": "decided-in-later-areas",
      "kind": "topic",
      "title": "Folders other pages describe",
      "summary": "The layout only reserves these folders; each piece has its own page.",
      "tokens": 98,
      "hash": "sha256:55b110342d27517929be64e4c2f39fe0db5054d3d7b02df44d06152242a74000",
      "area": 1,
      "links": [
        "configuration-and-time",
        "data",
        "external-services",
        "http",
        "jobs-and-events"
      ]
    },
    {
      "id": "project-layout-and-modules-built",
      "kind": "topic",
      "title": "What is built: Project layout and modules",
      "summary": "The compiler builds the decided layout, with each rule's real output under Errors.",
      "tokens": 1010,
      "hash": "sha256:378501b1b1665dd32c87c7a880cd21fecafe3f35931e125edf23560262ea9d83",
      "area": 1,
      "links": [
        "built-in-services",
        "commands-for-looking-into-and-changing-code",
        "constants",
        "external-services",
        "feature-flags",
        "project-layout-and-modules",
        "records-and-manifest",
        "which-jadpo-runs"
      ]
    },
    {
      "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": 132,
      "hash": "sha256:aee7ad4178209e6e665a60568383ba0fc2115f67307045dd975a5fe942262170",
      "area": 2,
      "links": []
    },
    {
      "id": "built-in-types",
      "kind": "topic",
      "title": "Built-in types",
      "summary": "Jadpo comes with its types built in.",
      "tokens": 5008,
      "hash": "sha256:e40f1b8a08dea487c96f55397fd8dee69ab653f37754762f52616912c6394470",
      "area": 2,
      "links": [
        "acting-for-each-user-oauth-grants",
        "ai",
        "batches-work-over-many-items",
        "declaring-an-event",
        "declining-a-judgement-call",
        "documents",
        "email",
        "enums",
        "failures",
        "files",
        "geospatial",
        "http",
        "money-and-payments",
        "money-operations",
        "numbers",
        "search",
        "standard-type-clashes",
        "the-standard-operator-table",
        "the-standard-types",
        "translations-as-messages",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "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": 793,
      "hash": "sha256:3eba02fc66992388a6929f314615a617cc26ba48f1c32f4a92199fbbca043721",
      "area": 2,
      "links": [
        "ai-types",
        "data",
        "embeddings-and-search"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": []
    },
    {
      "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": 405,
      "hash": "sha256:e1cb62bcee025f3fc2e94d47c46d23bedb6efb94b6d01f033b68729603ad9a64",
      "area": 2,
      "links": [
        "data"
      ]
    },
    {
      "id": "objects",
      "kind": "topic",
      "title": "Objects",
      "summary": "An object is a fixed set of named fields.",
      "tokens": 2896,
      "hash": "sha256:ea63fa47e6b1cdd5e7f1f659ad369aac74ac79dc03e007c013c9460d592ebbae",
      "area": 2,
      "links": [
        "creating-values",
        "data",
        "data-formats-json-csv-tsv-and-json-lines",
        "every-standard-type-meets-one-contract",
        "http",
        "reads-and-writes"
      ]
    },
    {
      "id": "building-a-type-from-other-types",
      "kind": "topic",
      "title": "Building a type from other types",
      "summary": "Most object types in a real application are slices of an entity or of another object: a create input, a patch input where every field is optional, a public view, a list summary, a v2 response that…",
      "tokens": 969,
      "hash": "sha256:6081d7e66a1a0dbdcc2fc67d5c4c332c4494efcf6651ff44f095469f7b08cf6d",
      "area": 2,
      "links": [
        "field-restrictions",
        "http"
      ]
    },
    {
      "id": "absent-values",
      "kind": "topic",
      "title": "Values that may be missing",
      "summary": "There is no `null` or `undefined`.",
      "tokens": 424,
      "hash": "sha256:9be54327acc9d2c6b4326246fcb22ca21f70e2ab9b036a1a1b4382842f2fb01a",
      "area": 2,
      "links": [
        "logic",
        "reads-and-writes"
      ]
    },
    {
      "id": "enums",
      "kind": "topic",
      "title": "Enums",
      "summary": "An enum is a closed list of named alternatives.",
      "tokens": 440,
      "hash": "sha256:fdf0680a80d8e47cf3ded6300503b94889bbb6b7253b409835c1a52ddf2b363d",
      "area": 2,
      "links": [
        "enums-with-wording"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "values-never-change",
      "kind": "topic",
      "title": "Values never change",
      "summary": "Every value is immutable.",
      "tokens": 125,
      "hash": "sha256:7718184b1bcbea0750d56e3ceb8796cc757ff13b6580c5a6af8da515e6e06e4f",
      "area": 2,
      "links": []
    },
    {
      "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": 189,
      "hash": "sha256:efe128a3b6576f48917377084b45d3e1e52b45bfb68b55543a4526648ccb9133",
      "area": 2,
      "links": []
    },
    {
      "id": "logic",
      "kind": "topic",
      "title": "Logic",
      "summary": "How you write what your app does: functions and actions, variables and constants, statements, operators, `match`, `attempt` and loops, and what Jadpo allows for passing functions, recursion and…",
      "tokens": 55,
      "hash": "sha256:5574a55688f8cb430cc2d29dff930625535caab64349d31ab82f847347d3e913",
      "area": 3,
      "links": []
    },
    {
      "id": "functions-and-actions",
      "kind": "topic",
      "title": "Functions and actions",
      "summary": "You write behaviour in three kinds of callable:",
      "tokens": 962,
      "hash": "sha256:f3cd92c4a47ec356d8b2034053af2dfd56e147af5cac4a11930571b76f49940f",
      "area": 3,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "constants",
        "failures",
        "named-queries",
        "policy",
        "project-layout",
        "what-a-route-runs"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "constants",
      "kind": "topic",
      "title": "Constants",
      "summary": "A `constant` names a fixed value at the top of a file.",
      "tokens": 3229,
      "hash": "sha256:afa8b46a4ebdf7c2151a9b51b190f43c2beb46dfb8a69ffe7d4fc9eaae90ae4d",
      "area": 3,
      "links": [
        "computed-backfills",
        "configuration-and-time",
        "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 878,
      "hash": "sha256:74527b632cbe97becde83d1ff904adf4cf61d1ebb4d022ffc859d186e8a9fb81",
      "area": 3,
      "links": [
        "creating-values",
        "logic",
        "numbers",
        "the-standard-operator-table",
        "type.divisor_zero",
        "when-one-type-can-stand-in-for-another"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 630,
      "hash": "sha256:01e44895c7b16387f3040de866c8d60e5f46f2bdacafc21a4fe6b23b5077de36",
      "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"
      ]
    },
    {
      "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": 1085,
      "hash": "sha256:50744c10a1bc9f1d5d9ed3141cded362897902655dc6c2b8378397a83f7eb2b9",
      "area": 3,
      "links": [
        "batches-work-over-many-items",
        "how-a-run-is-kept",
        "lists",
        "maps",
        "sets"
      ]
    },
    {
      "id": "recursion",
      "kind": "topic",
      "title": "Recursion",
      "summary": "A function may call itself, or form a cycle with other functions.",
      "tokens": 478,
      "hash": "sha256:a9484e53d6b373e77b49590716e95de65749dac71e47134ba1da732ba4c86b88",
      "area": 3,
      "links": []
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 318,
      "hash": "sha256:f65a4addc91f10b8c72522778500c19115e2683da9e3941a0f892309d6729903",
      "area": 4,
      "links": []
    },
    {
      "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 a todo that doesn't exist.",
      "tokens": 866,
      "hash": "sha256:24640038138e6812b9b9f8a8dd91e4e26b4438f7c01c1d540f0106d684959fd5",
      "area": 4,
      "links": [
        "handling-a-failure-in-match",
        "how-failures-reach-the-client",
        "jobs-and-events",
        "kinds",
        "one-form-for-every-type",
        "project-layout"
      ]
    },
    {
      "id": "kinds",
      "kind": "topic",
      "title": "Kinds",
      "summary": "Every failure has a kind, which decides the HTTP status a client gets and what the failure means.",
      "tokens": 766,
      "hash": "sha256:5ec85d87c1c6e0594609aaf6592f83e801c27931a6b08a8b440693ff29689075",
      "area": 4,
      "links": [
        "concealing-records",
        "enums",
        "http",
        "identity",
        "policy"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 221,
      "hash": "sha256:2e59a535429cfbc363e58265ec4d7b82e13b3a943f037700c25d1d3927f507be",
      "area": 4,
      "links": [
        "logic",
        "match"
      ]
    },
    {
      "id": "faults",
      "kind": "topic",
      "title": "Faults",
      "summary": "A fault is raised by the runtime when something outside your code goes wrong.",
      "tokens": 714,
      "hash": "sha256:f3e8d12811bacb1b42a3271f29f637e5ec95761eb7bd393f884bae555909521a",
      "area": 4,
      "links": [
        "calling",
        "expressions-and-operators",
        "recursion"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "logging",
      "kind": "topic",
      "title": "Logging",
      "summary": "Every failure and fault writes one structured event.",
      "tokens": 192,
      "hash": "sha256:43d316261d0a3d327656c7abd7a7f9df580b166e68d3ab2bd404e093a777bde3",
      "area": 4,
      "links": [
        "failures-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"
      ]
    },
    {
      "id": "failures-built",
      "kind": "topic",
      "title": "What is built: Failures",
      "summary": "Which parts of Failures are built, and what the rest waits on",
      "tokens": 217,
      "hash": "sha256:5cb48d7e647283964c87da859de14ef7ceb0cb451c9c2ab2dac2ce1ac7b6ff3d",
      "area": 4,
      "links": [
        "failures",
        "policy"
      ]
    },
    {
      "id": "data",
      "kind": "topic",
      "title": "Data",
      "summary": "How you declare the records your app keeps, where they are stored, and how their shape changes over time.",
      "tokens": 82,
      "hash": "sha256:39c67ee859926167fb188052a61af34c67368f15713d7cdbbe83af15c49cfc22",
      "area": 5,
      "links": [
        "policy",
        "reads-and-writes"
      ]
    },
    {
      "id": "stores",
      "kind": "topic",
      "title": "Stores",
      "summary": "A store is somewhere your app keeps records: a PostgreSQL database, or a Redis server.",
      "tokens": 3575,
      "hash": "sha256:c1b43458c999b30031b210401ccefe26c68585e1fc5d03afd98e11486a1f8036",
      "area": 5,
      "links": [
        "a-workers-deployable",
        "all-or-nothing-actions-and-concurrent-changes",
        "built-in-services",
        "configuration-and-time",
        "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"
      ]
    },
    {
      "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.",
      "tokens": 229,
      "hash": "sha256:e0b5ac90fd08bdcd4bac571bbb32fae1fff9bdc9ec1a45fd52dc9d79b24154f7",
      "area": 5,
      "links": []
    },
    {
      "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": 239,
      "hash": "sha256:588257e1ceaa8dd9f94493e7c192e7229549b2eada8c05c2449d03a29c3247a9",
      "area": 5,
      "links": [
        "lifecycle"
      ]
    },
    {
      "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": 266,
      "hash": "sha256:448d95a91ca7687a55b2f34bb58f2ba4f0e1357f4b566f2aec44e29353bf8d1e",
      "area": 5,
      "links": [
        "reads-and-writes",
        "tenancy"
      ]
    },
    {
      "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": []
    },
    {
      "id": "children",
      "kind": "topic",
      "title": "Children",
      "summary": "A parent doesn't declare its children.",
      "tokens": 132,
      "hash": "sha256:6ab70e21cfb64c07847e579a5192139cdb0addede14a890f834a2460c9cd1ab7",
      "area": 5,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": 1396,
      "hash": "sha256:000a88494eaf3c66a5f80920974fa8c4d982a47b845efc1999c76c7935ed59a9",
      "area": 5,
      "links": [
        "configuration-and-time",
        "policy",
        "reads-and-writes",
        "schedules"
      ]
    },
    {
      "id": "indexes",
      "kind": "topic",
      "title": "Indexes",
      "summary": "You don't write the indexes your queries need.",
      "tokens": 779,
      "hash": "sha256:e77ee23d53a0cfb35e6baa45b1be04bcb6614f805b36df08100082db1e6d6d9e",
      "area": 5,
      "links": [
        "geospatial-storage",
        "order-and-pages",
        "vector-index"
      ]
    },
    {
      "id": "caches",
      "kind": "topic",
      "title": "Caches",
      "summary": "Nothing is cached unless you add it.",
      "tokens": 691,
      "hash": "sha256:0d5507234ff089a4dcb3175cd20f6f8b5d65d398bed3bd0282cc0deaf387c962",
      "area": 5,
      "links": [
        "caches-drivers-and-what-they-hold",
        "entities-in-redis",
        "health",
        "money-and-payments"
      ]
    },
    {
      "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": 507,
      "hash": "sha256:5f4a99ce372bcce93655517360006486ee62a27b268c88cccad8cb5783794fc0",
      "area": 5,
      "links": [
        "logic",
        "queries-on-entities-in-redis"
      ]
    },
    {
      "id": "storage-types",
      "kind": "topic",
      "title": "Storage types",
      "summary": "You never name a column type.",
      "tokens": 1583,
      "hash": "sha256:afa5d688cfdb9782b1cfc27bb3678e97c7f9100566a4879faa58e8d87a1b89c4",
      "area": 5,
      "links": [
        "configuration-and-time",
        "every-boundary-through-the-contract",
        "geospatial-storage",
        "money-and-payments",
        "structured-values"
      ]
    },
    {
      "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:f2ef700f2f84c3e9f144564ff4ee3b50d5376719a4a83be3412d5f78b057a6ee",
      "area": 5,
      "links": [
        "computed-backfills",
        "http",
        "jobs-and-events",
        "policy",
        "standard-library",
        "standard-type-encodings"
      ]
    },
    {
      "id": "migrations",
      "kind": "topic",
      "title": "Migrations",
      "summary": "Entities describe the schema you want.",
      "tokens": 1068,
      "hash": "sha256:252aa698e22bec918c4756507194b84902403013d5601a1487af7a626b8903be",
      "area": 5,
      "links": [
        "a-native-deployable",
        "acceptances",
        "computed-backfills",
        "records-and-manifest",
        "system-tables",
        "tooling"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1538,
      "hash": "sha256:e0cc4609fe863c0ea991a54b6affb7d0c9ee736660a4c5d470ec0ad1210133f6",
      "area": 5,
      "links": [
        "built-in-services",
        "delivery-at-least-once-safe-to-repeat",
        "external-services",
        "idempotent-writes",
        "identity",
        "jobs-and-events",
        "schedules",
        "several-changing-calls-in-one-action",
        "standard-type-encodings"
      ]
    },
    {
      "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": 155,
      "hash": "sha256:d6ab448e62d3b20754e7f47f591d5685fbd04ed2e38920f12803f6a97c36f1c9",
      "area": 5,
      "links": []
    },
    {
      "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": []
    },
    {
      "id": "data-built",
      "kind": "topic",
      "title": "What is built: Data",
      "summary": "Each feature not built yet is `toolchain.not_built_yet` where it is used.",
      "tokens": 562,
      "hash": "sha256:94fac27915d3d2ad1eb29e6a581caafcfe83159809780fe3babab60be873d526",
      "area": 5,
      "links": [
        "acceptances",
        "tooling"
      ]
    },
    {
      "id": "reads-and-writes",
      "kind": "topic",
      "title": "Reads and writes",
      "summary": "How a program reads and changes stored records: named queries, filters, order and pages, totals, related records, the operations every entity gets, what a refused write reports, and how an action…",
      "tokens": 172,
      "hash": "sha256:e99ca5c621e6f7f8be37e46091b1acff74761862de640a5f01b36f7c8aced9fe",
      "area": 6,
      "links": [
        "data",
        "policy",
        "reads-and-writes-built"
      ]
    },
    {
      "id": "named-queries",
      "kind": "topic",
      "title": "Named queries",
      "summary": "Every read of stored records is a named query.",
      "tokens": 1406,
      "hash": "sha256:a9de68654556f5a5526c2427561074ff3ca9d375bfb34403029da9a7cb198798",
      "area": 6,
      "links": [
        "a-query-giving-a-map-layer",
        "building-a-type-from-other-types",
        "entities-and-the-id",
        "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"
      ]
    },
    {
      "id": "filters",
      "kind": "topic",
      "title": "Filters",
      "summary": "Each `where:` line is one condition, and a record must meet all of them.",
      "tokens": 2266,
      "hash": "sha256:056e2283824fe391bf3a8fe140ada0252855459c06f9a860524800564de50df9",
      "area": 6,
      "links": [
        "constants",
        "embeddings-and-search",
        "geospatial-queries",
        "indexes",
        "reads-and-writes-built",
        "sql-forms"
      ]
    },
    {
      "id": "order-and-pages",
      "kind": "topic",
      "title": "Order and pages",
      "summary": "`order:` lists fields, each with `asc` or `desc`.",
      "tokens": 590,
      "hash": "sha256:fc9fb158cb67ef91896d539c5024397fceb51bbcbe3ff64f78caddcf9f46b425",
      "area": 6,
      "links": [
        "embeddings-and-search",
        "geospatial-queries"
      ]
    },
    {
      "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": 3000,
      "hash": "sha256:f50a99775c2ade7c9edce86b0ebfbfa13fe056108e41625fe081e5f118b4334c",
      "area": 6,
      "links": [
        "field-restrictions",
        "sql-forms",
        "values-and-types",
        "zones-and-local-times"
      ]
    },
    {
      "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>` (Interop), where `G` is the geometry type and `P` the type of each feature's properties.",
      "tokens": 2019,
      "hash": "sha256:ebd897e94dc2cd13c905464dbf3b8e3cda761ff6aa7e38a7421aa1a0f8ff74f2",
      "area": 6,
      "links": [
        "field-restrictions",
        "geospatial-interop",
        "geospatial-queries",
        "one-input",
        "output-and-status"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1554,
      "hash": "sha256:0411c99e215bb0f503a32f5576adb4aab39056730c84d7d6d0c6090c1722d7e0",
      "area": 6,
      "links": [
        "absent-values",
        "attempt",
        "creating-values",
        "every-boundary-through-the-contract",
        "lifecycle"
      ]
    },
    {
      "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": 810,
      "hash": "sha256:0bab11dc4ba8dc7330c9c393d0892291312112c0afb03c79f26d6e60c9fda560",
      "area": 6,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "data",
        "failures",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "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": 2749,
      "hash": "sha256:4d3e378a4490b44ef6ce380db737f4b8617e85b3e90533d86b0bac5b4fc7b178",
      "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",
        "http",
        "jobs-and-events",
        "several-changing-calls-in-one-action",
        "the-seam-every-outside-call-goes-through"
      ]
    },
    {
      "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": 969,
      "hash": "sha256:60cd5c4cbe42e0d7803a9138aca0f25958dccb09a70873b899f60f8ff293f097",
      "area": 6,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "constants"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "queries-on-entities-in-redis",
      "kind": "topic",
      "title": "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": 439,
      "hash": "sha256:babc93f0c79b75ea302e6cb614db0cedf5105ef0ff0d9acbbe0a24a21b0fb203",
      "area": 6,
      "links": [
        "entities-in-redis"
      ]
    },
    {
      "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": []
    },
    {
      "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": 226,
      "hash": "sha256:26f9fb63f15983ecb0419f30f76855e160929eaa332733b2c12803cffaefd735",
      "area": 6,
      "links": []
    },
    {
      "id": "http",
      "kind": "topic",
      "title": "HTTP",
      "summary": "A Jadpo app answers HTTP requests with routes.",
      "tokens": 481,
      "hash": "sha256:2fd2d28c152980e95b486194567e7c093b52bf17d45d792dff5ff8bd4a0b3ca5",
      "area": 7,
      "links": [
        "functions-and-actions",
        "generated-routes",
        "health",
        "kinds",
        "one-input",
        "openapi",
        "output-and-status",
        "paths-and-placeholders",
        "route-groups",
        "routes-signed-in-by-default",
        "the-public-api-record",
        "time-limits",
        "who-is-calling-current-principal"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "one-input",
      "kind": "topic",
      "title": "One input",
      "summary": "A route reads at most one input, named by `input:`.",
      "tokens": 506,
      "hash": "sha256:c52de2428b0cef5e16a81de24e85e01937821ebfdaada293621346d5877d9fd1",
      "area": 7,
      "links": [
        "identity",
        "standard-library",
        "values-and-types"
      ]
    },
    {
      "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": 748,
      "hash": "sha256:64d2d17d679207ab1f10957f2ca52ead0b819e9b6591f523d107a4acfe1d65e2",
      "area": 7,
      "links": [
        "failures",
        "field-restrictions",
        "geospatial",
        "identity",
        "jobs-and-events",
        "reads-and-writes"
      ]
    },
    {
      "id": "what-a-route-runs",
      "kind": "topic",
      "title": "What a route runs",
      "summary": "`run:` calls one named action.",
      "tokens": 389,
      "hash": "sha256:d80e68e56463c6f37f233b2faf5529e4fccdabb6badb717880a55b71787fe1d9",
      "area": 7,
      "links": [
        "project-layout-and-modules",
        "service-credentials"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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:f0e01ccf9f7636672622431b085ff837082b0193649c8ad19ee190e17b9eccda",
      "area": 7,
      "links": [
        "background-work",
        "batches-work-over-many-items",
        "delivery-at-least-once-safe-to-repeat",
        "idempotent-writes",
        "retries-and-giving-up",
        "subscribers",
        "where-events-travel"
      ]
    },
    {
      "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": 2155,
      "hash": "sha256:214e1a5e8c740d0181edbe3208ebab5b7541006fbecb32fe4f67f8dc0b023a70",
      "area": 7,
      "links": [
        "ai",
        "ai-tests",
        "failures",
        "openapi",
        "streaming",
        "time-limits"
      ]
    },
    {
      "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": []
    },
    {
      "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"
      ]
    },
    {
      "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": 467,
      "hash": "sha256:45a380f987ec2dfad1024d74f70e13f8a3693c24393e29a51be0d95cc15732ec",
      "area": 7,
      "links": [
        "receiving-from-outside",
        "service-credentials",
        "subscribers",
        "webhook-replies-handshakes-and-further-signature-schemes"
      ]
    },
    {
      "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": 375,
      "hash": "sha256:6f07c4285ea960f21ef538ce46d113f49bfae5cdca15947a7bd4f47c5a89a680",
      "area": 7,
      "links": [
        "calling",
        "how-failures-reach-the-client"
      ]
    },
    {
      "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": 1005,
      "hash": "sha256:117c649ba05e5b6671f6ddd21f93399b137438bb91cfeecc96b6ee7a81e3b344",
      "area": 7,
      "links": [
        "configuration-and-time",
        "declared-deployables",
        "failures",
        "failures-for-client-apps",
        "standard-library"
      ]
    },
    {
      "id": "generated-routes",
      "kind": "topic",
      "title": "Generated routes",
      "summary": "Some features generate their routes for you:",
      "tokens": 397,
      "hash": "sha256:72c3885ff34f5de6dbb1d386327ce817318c1106354c1be7ba8a630349882495",
      "area": 7,
      "links": [
        "acting-for-a-user-at-another-service-oauth-grants",
        "acting-for-each-user-oauth-grants",
        "data-requests",
        "feature-flags",
        "identity",
        "magic-links",
        "openapi",
        "passkeys",
        "webhooks"
      ]
    },
    {
      "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": 172,
      "hash": "sha256:faa494365d5305e041815f92ff349ef8d68fef0ea4b7fe0e2081f82ed3db42cb",
      "area": 7,
      "links": [
        "openapi",
        "rate-limits"
      ]
    },
    {
      "id": "openapi",
      "kind": "topic",
      "title": "OpenAPI",
      "summary": "The compiler writes one OpenAPI 3.1 document per API into `build/openapi/`.",
      "tokens": 1133,
      "hash": "sha256:516a0f4748274ed5b86c566a6824412bf9a4bb821e32028008f91da36b643f60",
      "area": 7,
      "links": [
        "failures-for-client-apps",
        "how-the-openapi-importer-reads-a-document",
        "packages-from-other-jadpo-apps",
        "project-layout-and-modules",
        "the-public-api-record",
        "where-events-travel"
      ]
    },
    {
      "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": 938,
      "hash": "sha256:25ec6ca5b0c0554c41162086f843e39c1a213b8fe29545307630a7dce781e4b4",
      "area": 7,
      "links": [
        "acceptances",
        "records-and-manifest-built",
        "what-is-committed-and-why"
      ]
    },
    {
      "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": 107,
      "hash": "sha256:0ff9f293fdc3e7a88eae2ed4e92840207d0f60abe7844b284403599e04b9bd0d",
      "area": 7,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": 1204,
      "hash": "sha256:8857b66abeaeae94d18c64cf6eaf6276a8076df3f051e09e470359e5ebef89b0",
      "area": 7,
      "links": [
        "acceptances",
        "field-restrictions",
        "identity",
        "openapi",
        "policy",
        "rate-limits",
        "reads-and-writes",
        "service-credentials",
        "streaming-a-model-s-answer",
        "waiting-for-follow-on-work",
        "where-events-travel",
        "write-revisions"
      ]
    },
    {
      "id": "identity",
      "kind": "topic",
      "title": "Identity",
      "summary": "Identity is how Jadpo knows who is calling.",
      "tokens": 416,
      "hash": "sha256:604325d17b1f712c4e888a56c872379a386fafc61ccc4a18e6d734857f8bfb59",
      "area": 8,
      "links": [
        "magic-links",
        "passkeys",
        "policy",
        "ways-to-sign-in"
      ]
    },
    {
      "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": 471,
      "hash": "sha256:3bfda8897ed34cb65af75149c82e138475ccedf3a8e65ce34e841476d625437a",
      "area": 8,
      "links": [
        "identity-failures",
        "policy",
        "tenancy"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 2354,
      "hash": "sha256:e73fd960a604107788f89e7eb0b7562933197dbaf79b653295d85c56c4401ab6",
      "area": 8,
      "links": [
        "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"
      ]
    },
    {
      "id": "checking-the-person-sign-in",
      "kind": "topic",
      "title": "Checking the person: sign_in:",
      "summary": "Signing in has two steps.",
      "tokens": 578,
      "hash": "sha256:64aa0cc704f47eeeb3c97ed5dd744df3673a7aa8dd237cf538de7230f22b9044",
      "area": 8,
      "links": [
        "a-person-the-app-has-not-seen",
        "external-services",
        "magic-links",
        "passkeys",
        "starting-and-ending-a-session"
      ]
    },
    {
      "id": "magic-links",
      "kind": "topic",
      "title": "Magic links",
      "summary": "A magic link signs a person in by email, with no password.",
      "tokens": 3062,
      "hash": "sha256:27283ec8733eb89a5c40c947814b7d664178d3e48da4925d4c4e7d969b6e5002",
      "area": 8,
      "links": [
        "a-person-the-app-has-not-seen",
        "acceptances",
        "built-in-services",
        "failures",
        "generated-routes",
        "system-tables"
      ]
    },
    {
      "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": 3974,
      "hash": "sha256:7662d1b52124bb835bb2d6087c1004a4c9cd245f08e901b8cb162d06067dfa9b",
      "area": 8,
      "links": [
        "generated-routes",
        "in-development-and-tests",
        "personal-data",
        "standard-library"
      ]
    },
    {
      "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": 730,
      "hash": "sha256:c86475104424666550f4665cadc256ffdb937ca69a7be7d22a30eaf0eb329c7f",
      "area": 8,
      "links": []
    },
    {
      "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"
      ]
    },
    {
      "id": "events",
      "kind": "topic",
      "title": "Events",
      "summary": "Every sign-in publishes a built-in event, which your monitoring and your app's own subscribers can use:",
      "tokens": 289,
      "hash": "sha256:21bfb5c05e79b29b346297873271d88133983032eb092eb4cf90a554b5d59e2a",
      "area": 8,
      "links": [
        "subscribers"
      ]
    },
    {
      "id": "in-development-and-tests",
      "kind": "topic",
      "title": "In development and tests",
      "summary": "In `jadpo dev`, no email leaves your machine.",
      "tokens": 1387,
      "hash": "sha256:174d775397dfc82f9898aadb356577d330e148adbab7a4fa223919d95d03a69e",
      "area": 8,
      "links": [
        "built-in-services",
        "testing"
      ]
    },
    {
      "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": 1266,
      "hash": "sha256:8b9c27dbcf6cd0ae200c8883a9da07af0490d0db645eecdedae4b151a1a17711",
      "area": 8,
      "links": [
        "acceptances",
        "built-in-services"
      ]
    },
    {
      "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:4e2c1cb17e5a14780bfa0e621465a8d763b8ccdac64cc17224a7cab1db330b0a",
      "area": 8,
      "links": [
        "http",
        "jobs-and-events",
        "policy"
      ]
    },
    {
      "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": 755,
      "hash": "sha256:c68e2202de00a5e01d094c1972aad98b1aca47f10dd3870d6585f06ad67c1995",
      "area": 8,
      "links": [
        "external-services",
        "http",
        "policy",
        "the-application-and-revocation"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 4875,
      "hash": "sha256:0cc89d0f680756cfd6a17bca202023ac4330760298b1f416f84fee1eab81e258",
      "area": 8,
      "links": [
        "checking-the-person-sign-in",
        "grants",
        "jobs-and-events",
        "magic-links",
        "policy",
        "system-tables"
      ]
    },
    {
      "id": "acting-for-a-user-at-another-service-oauth-grants",
      "kind": "topic",
      "title": "Acting for a user at another service: OAuth grants",
      "summary": "Signing in proves to your app who a person is.",
      "tokens": 1002,
      "hash": "sha256:48e7f4397d1bdc1a158d1cd2de7a09a0251c7c07ffa037a07528a3e0cf42f070",
      "area": 8,
      "links": [
        "acting-for-each-user-oauth-grants",
        "external-services",
        "generated-routes",
        "personal-data",
        "policy",
        "secrets",
        "signing-keys"
      ]
    },
    {
      "id": "identity-failures",
      "kind": "topic",
      "title": "Failures",
      "summary": "Jadpo raises the sign-in failures itself.",
      "tokens": 740,
      "hash": "sha256:a225acf4fa000db1792a187d5bdf67b46b86940764111801e7233be24a5c3125",
      "area": 8,
      "links": [
        "built-in-services",
        "declaring-a-failure",
        "the-application-and-revocation"
      ]
    },
    {
      "id": "identity-built",
      "kind": "topic",
      "title": "What is built: Identity",
      "summary": "A feature not built yet is `toolchain.not_built_yet` where it is written.",
      "tokens": 240,
      "hash": "sha256:d5d9aec1f45d28f66c17afe2719bf7b15b925f878419d658133250d30db8d221",
      "area": 8,
      "links": [
        "acceptances",
        "external-services",
        "policy"
      ]
    },
    {
      "id": "policy",
      "kind": "topic",
      "title": "Policy",
      "summary": "Policy says who may do what to which stored records.",
      "tokens": 413,
      "hash": "sha256:ae66124a108e7af4986b0ab1d9f24313cd8c80b849c765b026ec692745c58a7e",
      "area": 9,
      "links": [
        "a-membership-role",
        "a-user-field-on-the-record",
        "anyone-signed-in-or-anyone",
        "background-work",
        "tenancy",
        "when-policy-says-no"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 268,
      "hash": "sha256:72eb6a35fee4e73fbef1ca94288294f8f699fa581378589f0af86aefc7fbe965",
      "area": 9,
      "links": [
        "actions",
        "the-principal"
      ]
    },
    {
      "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": 645,
      "hash": "sha256:70e9611ab27d3389432ee97e2f3ae1e4e5963aa64fec2c0330168be39c3d4d62",
      "area": 9,
      "links": [
        "tenancy"
      ]
    },
    {
      "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": 227,
      "hash": "sha256:76b5a1090a009002615011110f1444cb8fd4c9730c370907ef0f570c52fa84ad",
      "area": 9,
      "links": [
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "background-work",
      "kind": "topic",
      "title": "Background work",
      "summary": "Schedules and event subscribers are the work your app does without a request (Jobs and events).",
      "tokens": 1420,
      "hash": "sha256:7da2a25a192d313cd2054fe8493c6e47210688761fb7e4df88632633da85f8af",
      "area": 9,
      "links": [
        "declaring-an-event",
        "identity",
        "jobs-and-events",
        "magic-links",
        "receiving-from-outside",
        "tenancy"
      ]
    },
    {
      "id": "tenancy",
      "kind": "topic",
      "title": "Tenancy",
      "summary": "Use tenancy when your app is shared by many customer companies, so that one company never sees another's data.",
      "tokens": 3631,
      "hash": "sha256:b7d630609a6b68313c9f45405d1213c73923859a14440780d110019bfba1f091",
      "area": 9,
      "links": [
        "a-membership-role",
        "actions",
        "grants",
        "named-queries",
        "protecting-policy",
        "the-principal"
      ]
    },
    {
      "id": "actions",
      "kind": "topic",
      "title": "Actions",
      "summary": "Most actions need no permission of their own: an action takes its permission from the entities it touches.",
      "tokens": 422,
      "hash": "sha256:04332d38827b3b9e21c0601512f89bef0d76e88a19756c74896379af2e21fbb7",
      "area": 9,
      "links": [
        "field-restrictions",
        "tenancy"
      ]
    },
    {
      "id": "field-restrictions",
      "kind": "topic",
      "title": "Field restrictions",
      "summary": "A field follows its entity's grants unless it says otherwise.",
      "tokens": 1444,
      "hash": "sha256:0b126549ffcae6d52172b4538d3f11d65e6f32700cf74cce3e492bf447778400",
      "area": 9,
      "links": [
        "computed-backfills",
        "jobs-and-events",
        "personal-data",
        "receiving-from-outside",
        "subscribers"
      ]
    },
    {
      "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": 505,
      "hash": "sha256:e47d0b3ae9b8aca62a3bff87aefb8265876f7860c5f5bb1e47a93b4e6e0b0e1e",
      "area": 9,
      "links": [
        "field-restrictions",
        "indexes",
        "review-and-sign-off",
        "when-policy-says-no"
      ]
    },
    {
      "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": 227,
      "hash": "sha256:8f5b179fb2e5f18392c9dc46c1c0ae1e6533f9ae7ee931341ecc416931bb3621",
      "area": 9,
      "links": [
        "acceptances",
        "background-work",
        "policy-built",
        "schedules"
      ]
    },
    {
      "id": "when-policy-says-no",
      "kind": "topic",
      "title": "When policy says no",
      "summary": "Your code never handles a policy refusal itself.",
      "tokens": 2489,
      "hash": "sha256:ac6c3495029b6bd1117634c6257eda7918104ff5ce89a5c88f38bd17f6947ed4",
      "area": 9,
      "links": [
        "concealing-records",
        "identity",
        "routes-signed-in-by-default"
      ]
    },
    {
      "id": "caches-and-personal-data",
      "kind": "topic",
      "title": "Caches and personal data",
      "summary": "A cache never lets a caller around policy.",
      "tokens": 100,
      "hash": "sha256:5ecca805ef468d34fdbe650249cb340d6d58e74684e0ed8aa0282be79a893af8",
      "area": 9,
      "links": [
        "caches",
        "personal-data"
      ]
    },
    {
      "id": "policy-built",
      "kind": "topic",
      "title": "What is built: Policy",
      "summary": "Everything on this page is built except the two features below.",
      "tokens": 206,
      "hash": "sha256:121f20c18cf7c73e7b404955f57a429883152202b7acaf47a8264c18da8a7888",
      "area": 9,
      "links": [
        "acceptances",
        "review-and-sign-off"
      ]
    },
    {
      "id": "configuration-and-time",
      "kind": "topic",
      "title": "Configuration and time",
      "summary": "This page covers the values your app reads from its environment, such as a database address or an API key, and everything to do with time: the current time, dates and time zones, and showing dates,…",
      "tokens": 170,
      "hash": "sha256:6c019ef35388db7dddceaf757c1e4e91c1ecac751c550030bc1e4121b8f622de",
      "area": 10,
      "links": []
    },
    {
      "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": 3165,
      "hash": "sha256:d068e44e0843114a0043d59e7729bf1d7103bd2ccf55f7f9888f43149f8109c2",
      "area": 10,
      "links": [
        "ai",
        "command-errors",
        "configuration-in-tests",
        "constants",
        "editor-support",
        "feature-flags",
        "records-and-manifest",
        "signatures-use-named-types",
        "signing-keys",
        "stores"
      ]
    },
    {
      "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": 432,
      "hash": "sha256:62f7a48da441d2075d4dab061acf68537870f3231acf2d816deb8cc3290ab136",
      "area": 10,
      "links": [
        "connecting-in-app-jadpo",
        "hashing-and-cryptography",
        "the-application-and-revocation"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 653,
      "hash": "sha256:987216c8c8c7d5b968535268669afbff7d3eb0e0425f03aecf7953e64bb75626",
      "area": 10,
      "links": [
        "commands-for-the-database-settings-and-translations",
        "configuration-in-tests"
      ]
    },
    {
      "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": 214,
      "hash": "sha256:b73caa6f4c7b535a6ef572b06b202b06d85c889b481854bc9d29c22cf8f7eaea",
      "area": 10,
      "links": [
        "the-application-and-revocation"
      ]
    },
    {
      "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": 1304,
      "hash": "sha256:c53f83669094247900d92a4cf1b1624c24622e0e0b98a5723c0b8bee82fbb22c",
      "area": 10,
      "links": [
        "a-workers-deployable",
        "rate-limits",
        "the-request-timeline-in-jadpo-dev"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "time-types",
      "kind": "topic",
      "title": "Time types",
      "summary": "Store a moment as an `Instant`.",
      "tokens": 1074,
      "hash": "sha256:38d4d42ddc75479223b9599b56365a61e294b473fa2af4ebd168a7400fc77840",
      "area": 10,
      "links": [
        "controlling-time",
        "signatures-use-named-types",
        "the-current-time-clock-now",
        "time-and-calendar-additions",
        "tooling-for-translations"
      ]
    },
    {
      "id": "durations",
      "kind": "topic",
      "title": "Durations",
      "summary": "A duration is a length of time, such as a timeout.",
      "tokens": 382,
      "hash": "sha256:e6afccb8b8dc12256cc2fd702580842a39891b0d2a688151935c07efec66cd37",
      "area": 10,
      "links": [
        "every-boundary-through-the-contract",
        "zones-and-local-times"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": []
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "translations-as-messages",
      "kind": "topic",
      "title": "Translations as messages",
      "summary": "Text your server writes for people, such as emails, generated pages and a failure's text for client apps, is translated in Jadpo itself.",
      "tokens": 2710,
      "hash": "sha256:d8114b56333d4d02f2f118ddf3525b0a84b4cc9ff30983981234403ba783f34b",
      "area": 10,
      "links": [
        "email",
        "failures-for-client-apps",
        "files-and-names",
        "money-operations",
        "naming",
        "prices-discounts-and-rates",
        "sharing-and-promotion",
        "showing-dates-and-times-to-people",
        "tooling-for-translations"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 2812,
      "hash": "sha256:60005ff8fca46bfecb3a24f6cfc9c59680b30fb48e3b8f142e42532296d7853c",
      "area": 10,
      "links": [
        "built-in-emails",
        "data-requests",
        "declaring-a-failure",
        "kinds-of-package",
        "magic-links",
        "output-and-status",
        "passkeys",
        "the-operations-every-entity-gets",
        "ways-to-sign-in"
      ]
    },
    {
      "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": 3545,
      "hash": "sha256:749dcdfc1d457f3f39ac0ac65a1e3962b355bbc1440a3d1c112b2e95852a9592",
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 145,
      "hash": "sha256:c0fd418be70d1eda800fc4f65bd59e4e0d6c4acd7762eb01619d25975b9e535f",
      "area": 10,
      "links": [
        "lifecycle",
        "personal-data"
      ]
    },
    {
      "id": "configuration-and-time-built",
      "kind": "topic",
      "title": "What is built: Configuration and time",
      "summary": "Which parts of Configuration and time are built, and what the rest waits on",
      "tokens": 657,
      "hash": "sha256:d46d0806821a4772e3cd2cc11faa6f24b0b1a58e722db543820d23dc30f70386",
      "area": 10,
      "links": [
        "controlling-time",
        "locales"
      ]
    },
    {
      "id": "external-services",
      "kind": "topic",
      "title": "External services",
      "summary": "An external service is another company's API, such as Stripe, a courier or another Jadpo app, that your actions call.",
      "tokens": 819,
      "hash": "sha256:d1a1c776550b222b3eb08871ca37d31fa463d2b46e6e19d565c960c9f6228cd3",
      "area": 11,
      "links": []
    },
    {
      "id": "how-integrations-fit-together",
      "kind": "topic",
      "title": "How packages, connections, capabilities and services fit together",
      "summary": "Seven terms name the ways an app reaches past its own code: package, provider, connection, driver, capability, built-in service and service run by Jadpo.",
      "tokens": 3228,
      "hash": "sha256:5565ab8a9c1c10f23ddddcef1666366a4118c28da727358f96c4b9ce0529b73f",
      "area": 11,
      "links": [
        "a-native-deployable",
        "built-in-services",
        "calling",
        "capabilities",
        "connecting-in-app-jadpo",
        "declared-deployables",
        "kinds-of-package",
        "provider-calls-in-development",
        "tests-and-fakes",
        "the-package-format",
        "tooling",
        "what-package-code-may-do"
      ]
    },
    {
      "id": "kinds-of-package",
      "kind": "topic",
      "title": "Kinds of package",
      "summary": "A package is Jadpo code shared between apps.",
      "tokens": 893,
      "hash": "sha256:dd276d22eb225ea8eddd5f58ac8b02a994d7e6b64019119e0774089cc0772d59",
      "area": 11,
      "links": []
    },
    {
      "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": 3241,
      "hash": "sha256:71830238cbd6fdea469d67ad495e7a410e664fb94d4fe80b3ad5d834cf3bc47c",
      "area": 11,
      "links": [
        "identity",
        "packages-text-in-an-app",
        "project-layout-and-modules"
      ]
    },
    {
      "id": "where-packages-live",
      "kind": "topic",
      "title": "Where packages live",
      "summary": "`packages/` holds only packages you installed.",
      "tokens": 1262,
      "hash": "sha256:196ebbec28f92c33ff43668c0d7e64b8c8b260c9894b659e3d87d5779d624fc2",
      "area": 11,
      "links": [
        "failures-for-client-apps"
      ]
    },
    {
      "id": "where-packages-come-from",
      "kind": "topic",
      "title": "Where packages come from",
      "summary": "`jadpo package add <name>` looks for a package in a fixed order and records which step it used, so an agent never improvises where to look:",
      "tokens": 3718,
      "hash": "sha256:85ac0b3de8044b43331dad5959d3de7b7f2ea9f28a959752fa9ad35b9ac715c3",
      "area": 11,
      "links": [
        "developing-and-publishing-a-package",
        "packages-from-other-jadpo-apps",
        "records-and-manifest",
        "standard-library",
        "what-package-code-may-do"
      ]
    },
    {
      "id": "the-surface",
      "kind": "topic",
      "title": "The surface",
      "summary": "A package's surface is everything it offers an app, in one file you can read.",
      "tokens": 1268,
      "hash": "sha256:5d5e1223bff21c8e1e873b4fe11db89d44ea8ba52b9f35c7f513889981c12ce5",
      "area": 11,
      "links": [
        "records-and-manifest",
        "the-public-api-record"
      ]
    },
    {
      "id": "developing-and-publishing-a-package",
      "kind": "topic",
      "title": "Developing and publishing a package",
      "summary": "A package lives in its own repository.",
      "tokens": 1655,
      "hash": "sha256:a0ab7db1f4cd1bcf9d622fef56e7a103e03143e7ef6c44ba8035771e81daad7d",
      "area": 11,
      "links": [
        "configuration-and-time",
        "standard-library"
      ]
    },
    {
      "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": 1857,
      "hash": "sha256:a91bdc9ad7b5d46477a6bda597d88b8771ce20c9c92dd5299ed196e356c31201",
      "area": 11,
      "links": [
        "configuration-and-time",
        "stores",
        "the-permissions-report"
      ]
    },
    {
      "id": "calling",
      "kind": "topic",
      "title": "Calling",
      "summary": "Your app reaches an outside service, such as a courier's API, through a connection: a named entry under `connections:` in `app.jadpo` that says which package to use, which of your domains may use it…",
      "tokens": 3518,
      "hash": "sha256:532e10779fd9b5179061aa6aaaa8498aa0947a25f6bcf6f26b04cde79a1ded9e",
      "area": 11,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "batches-work-over-many-items",
        "connecting-in-app-jadpo",
        "decoding",
        "delivery-at-least-once-safe-to-repeat",
        "emitting-an-event",
        "faults",
        "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 3513,
      "hash": "sha256:1a883c51e574b08df6ce3a8d7d8903c49ca3d6ca22d684f97276b2d0d59ab277",
      "area": 11,
      "links": [
        "jobs-and-events",
        "several-changing-provider-calls"
      ]
    },
    {
      "id": "several-changing-provider-calls",
      "kind": "topic",
      "title": "Several changing calls in one action",
      "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": 2918,
      "hash": "sha256:1dae3bf7de8716bfeb98e47edb491af8a7c6c55df6b28e339b32f760db4dc306",
      "area": 11,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "configuration-and-time",
        "effect.call_in_loop",
        "http",
        "jobs-and-events",
        "reads-and-writes",
        "route.calls_past_deadline",
        "step.context",
        "step.large_output",
        "step.late_failure",
        "step.store_required",
        "step.too_many",
        "step.unkeyed",
        "testing",
        "tooling"
      ]
    },
    {
      "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": 3234,
      "hash": "sha256:fa7ee9a8706e2510653e9c1fc2d733424881e34e24f91749ac180550b3f70365",
      "area": 11,
      "links": [
        "capabilities",
        "field-restrictions",
        "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"
      ]
    },
    {
      "id": "acting-for-each-user-oauth-grants",
      "kind": "topic",
      "title": "Acting for each user: 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": 982,
      "hash": "sha256:cfc70ef69f98247e4a21d5badec8a225560c8a6bdfb582065f8c86c118566bc6",
      "area": 11,
      "links": [
        "acting-for-a-user-at-another-service-oauth-grants",
        "erasure",
        "external-services-built",
        "policy",
        "signing-keys"
      ]
    },
    {
      "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": 598,
      "hash": "sha256:f4907a297dff43b6eca237bdcfd95fc05e3fb07daaf70c7fd1e4f036f0148035",
      "area": 11,
      "links": [
        "openapi",
        "service-credentials",
        "the-public-api-record"
      ]
    },
    {
      "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": 3288,
      "hash": "sha256:c2465d35edd4784923447f356a31bb4b82e8e260de1865a912dae17f31aff489",
      "area": 11,
      "links": [
        "acceptances",
        "ai",
        "bot-protection",
        "built-in-services",
        "caches",
        "data",
        "declared-deployables",
        "delivery-at-least-once-safe-to-repeat",
        "documents",
        "email",
        "erasure",
        "files",
        "how-integrations-fit-together",
        "personal-data",
        "schedules",
        "search",
        "telemetry"
      ]
    },
    {
      "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": 960,
      "hash": "sha256:dc07a804201601ff3099929b9a3edda1338134ebbf2fcfe29731f436fc6d8de2",
      "area": 11,
      "links": [
        "debugging-and-review",
        "fakes-and-the-development-call-log",
        "fakes-for-integrations",
        "telemetry",
        "tests-and-fakes"
      ]
    },
    {
      "id": "compile-time",
      "kind": "topic",
      "title": "Compile time",
      "summary": "A provider's description doesn't slow your build, however large it is, because the compiler never reads it.",
      "tokens": 234,
      "hash": "sha256:f98190bc7c132ab5f0c2f06ddf62357ec2005b38a6ae33c8117f5f28f58894bd",
      "area": 11,
      "links": []
    },
    {
      "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": 332,
      "hash": "sha256:676d0895f3a9c9eb1ac1021a8a8e06baabc703328c7d6a72381827fcb3448e5d",
      "area": 11,
      "links": [
        "fakes-for-integrations",
        "several-changing-provider-calls"
      ]
    },
    {
      "id": "what-reviewers-see",
      "kind": "topic",
      "title": "What reviewers see",
      "summary": "The approval report (Reviewing a change) lists, for each change:",
      "tokens": 201,
      "hash": "sha256:0dcfcdf149010b95c1b9a3f0bd7fc1c45302dd97fa773ef8fd998fca82e169fc",
      "area": 11,
      "links": [
        "marking-personal-fields",
        "package-upgrades",
        "reviewing-a-change"
      ]
    },
    {
      "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": 1031,
      "hash": "sha256:2c887e7cd4a77a86ab26241b19b129208202c636713509522a91b3729c40addb",
      "area": 11,
      "links": [
        "the-package-format"
      ]
    },
    {
      "id": "how-the-surface-and-the-publishing-bar-work",
      "kind": "topic",
      "title": "How the surface and the publishing bar work",
      "summary": "This is the detail behind The surface and Developing and publishing a package: what a package's surface record holds, how its version is worked out, and what `jadpo package check` and `jadpo package…",
      "tokens": 1328,
      "hash": "sha256:70ee692282dbb1159ce95619865bb79195509a9b2f997f84db2b36b7f26d3981",
      "area": 11,
      "links": [
        "developing-and-publishing-a-package",
        "packages-text-in-an-app",
        "the-surface"
      ]
    },
    {
      "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": 1520,
      "hash": "sha256:bf7f9b87307bc87bff6cb79255479968ee7143b92624368e1310862739c8c9e7",
      "area": 11,
      "links": [
        "package-upgrades",
        "tooling",
        "where-packages-come-from"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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:221bc80b8219940900b9ee175b9481ab0857ba9754fd558ba070fbdddec0f256",
      "area": 11,
      "links": [
        "packages-text-in-an-app",
        "records-and-manifest"
      ]
    },
    {
      "id": "how-the-openapi-importer-reads-a-document",
      "kind": "topic",
      "title": "How the OpenAPI importer reads a document",
      "summary": "This is the detail behind Where packages come from: what `jadpo package import openapi <file>` reads from a provider's OpenAPI document, what it writes, and what it leaves for you or your agent to…",
      "tokens": 1347,
      "hash": "sha256:165ee82847444e8dff2e549121050b300693385b87f11cc50581410bfe101378",
      "area": 11,
      "links": [
        "command-errors",
        "decoding",
        "where-packages-come-from"
      ]
    },
    {
      "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": 1730,
      "hash": "sha256:0384a3f8ddb65d430437661124bbd03c20ad99ec174058d073ba2ef8419d5adc",
      "area": 11,
      "links": [
        "ai",
        "built-in-emails",
        "calling",
        "several-changing-provider-calls"
      ]
    },
    {
      "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:9a19283e5bc8d25b593b5d1298fc8eb8c265704d397355d5582c09ad5c59acdb",
      "area": 11,
      "links": [
        "calling",
        "decoding",
        "jobs-and-events",
        "standard-library"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "shape-and-name-detection",
      "kind": "topic",
      "title": "Shape and name detection",
      "summary": "This is the detail behind layers 2, 3 and 6 of Mapping imported types to standard types, for fields: how a provider's fields that together make a standard type, such as an amount and a currency, are…",
      "tokens": 1336,
      "hash": "sha256:c96cd495f706f17fc35954648d3d19afd8cc3de56a7ca972c5073ebcf0b6df90",
      "area": 11,
      "links": [
        "the-scoped-review-and-unconfirmed-operations",
        "where-packages-come-from"
      ]
    },
    {
      "id": "recordings",
      "kind": "topic",
      "title": "Recordings",
      "summary": "A recording is a provider's answer to one operation, its plain values replaced by placeholders, kept in the package as `recordings/<resource>.<operation>.json` so its decoding can be checked without…",
      "tokens": 959,
      "hash": "sha256:3e8fc8ceffcd1556c20f5c3e868746def1de6aa2a8be832e18e229e47e86c29d",
      "area": 11,
      "links": [
        "kinds-of-test",
        "several-changing-provider-calls"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1300,
      "hash": "sha256:ad07af0885b9b6a09a5ecaaef1119cedf1a897c6e47a991428f5cdd7d9f7a890",
      "area": 11,
      "links": [
        "capabilities",
        "receiving-from-outside"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1661,
      "hash": "sha256:52c173aa6d696f76a77b2539bbf492772c11c1f94d27f265dda8eb036599fe41",
      "area": 11,
      "links": [
        "field-restrictions",
        "receiving-from-outside"
      ]
    },
    {
      "id": "package-actions-and-recipes",
      "kind": "topic",
      "title": "Package actions and recipes",
      "summary": "This is the detail behind a package's actions, in What package code may do, and its Recipes: what a package action may call, how the app calls one, and how `jadpo package recipe` copies a recipe into…",
      "tokens": 1087,
      "hash": "sha256:f272680c81635588183d3af04a25e673d4486d10bcb0a7428f71e54de951a51a",
      "area": 11,
      "links": [
        "what-package-code-may-do"
      ]
    },
    {
      "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": []
    },
    {
      "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"
      ]
    },
    {
      "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": []
    },
    {
      "id": "external-services-built",
      "kind": "topic",
      "title": "What is built: External services",
      "summary": "The roadmap says when each comes.",
      "tokens": 785,
      "hash": "sha256:8e06bcf642605f0a5d328a1a1e2494ff7a02ab3c258b6781e0a2f89ca483427a",
      "area": 11,
      "links": [
        "external-services",
        "jobs-and-events",
        "logic",
        "personal-data",
        "project-layout-and-modules"
      ],
      "aliases": [
        "errors-still-to-build"
      ]
    },
    {
      "id": "jobs-and-events",
      "kind": "topic",
      "title": "Jobs and events",
      "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": 358,
      "hash": "sha256:0013054798bbbaf54be127282c6dfebc0968686321ea82b35788bb8776ef5d59",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "events-from-outside",
        "functions-and-actions",
        "http",
        "schedules"
      ]
    },
    {
      "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": 3502,
      "hash": "sha256:792d4258f675ad0cbc381ef7c471ba05f6adf9c0fa441f4bdc0ab39ee800d0c2",
      "area": 12,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "background-work",
        "background-work-and-tenants",
        "delivery-at-least-once-safe-to-repeat",
        "how-a-run-is-kept",
        "idempotent-writes",
        "identity",
        "lifecycle",
        "stores",
        "testing",
        "what-an-operator-sees",
        "where-events-travel"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "batches-work-over-many-items",
      "kind": "topic",
      "title": "Batches: work over many items",
      "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": 2665,
      "hash": "sha256:a02dbf7af1ddf393f9bcbeb04527f3ea60b4f032ee57791887899e8646b6bdb7",
      "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"
      ]
    },
    {
      "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": 2952,
      "hash": "sha256:6cb261c9303448f2320582d2ef88c443e104303e2df684402b21727fc6ab457d",
      "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"
      ]
    },
    {
      "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": 1659,
      "hash": "sha256:859d0d57965c1239e2b00b7d84056fc36d14ac9d4b96822c7dfb3cbd4efa467c",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "data-formats-json-csv-tsv-and-json-lines",
        "files",
        "how-a-run-is-kept",
        "the-seam-every-outside-call-goes-through"
      ],
      "aliases": [
        "how-a-file-s-run-is-kept"
      ]
    },
    {
      "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": 754,
      "hash": "sha256:ad13835d00a5c0e745947fcd0bf96147a24c065d8b5fd74ede4db3f282999fd9",
      "area": 12,
      "links": [
        "batches-work-over-many-items",
        "data-formats-json-csv-tsv-and-json-lines",
        "files",
        "how-a-run-is-kept",
        "the-seam-every-outside-call-goes-through"
      ],
      "aliases": [
        "how-an-export-s-run-is-kept"
      ]
    },
    {
      "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": 1285,
      "hash": "sha256:bad2f82f8dc2ff8c1862c7e4093a8baaf822b21a3f24a1e7a5f6665f931754dd",
      "area": 12,
      "links": [
        "background-work",
        "background-work-and-tenants",
        "tenancy"
      ]
    },
    {
      "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": 2170,
      "hash": "sha256:971ac69455eff283d889d795f5aa054481ab538d0703c7a47326d80e9ae0a4cb",
      "area": 12,
      "links": [
        "actions",
        "built-in-types",
        "subscribers"
      ]
    },
    {
      "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": 753,
      "hash": "sha256:7ffa1776b18ba9dd6b827a2d4c86d8802029d16f6171865fb45a093dfbd774d1",
      "area": 12,
      "links": [
        "acceptances",
        "declaring-a-failure",
        "the-public-api-record",
        "what-is-committed-and-why"
      ]
    },
    {
      "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": 661,
      "hash": "sha256:97e55b99fb74f808049a5fd2d1513da1ba20fdc3999faa437d29242de01ba37c",
      "area": 12,
      "links": [
        "faults",
        "idempotent-writes",
        "raising-a-failure-reject",
        "waiting-for-follow-on-work"
      ]
    },
    {
      "id": "subscribers",
      "kind": "topic",
      "title": "Subscribers",
      "summary": "A subscriber reacts to an event: each time the event is committed, it runs an action.",
      "tokens": 765,
      "hash": "sha256:7b211cfa2e4a302b55b764e315c631c3b8338c1b1568cc7e7f790b789381b685",
      "area": 12,
      "links": [
        "background-work",
        "declaring-an-event",
        "policy",
        "retries-and-giving-up"
      ]
    },
    {
      "id": "background-work-and-tenants",
      "kind": "topic",
      "title": "Background work and tenants",
      "summary": "In an app with a `tenant:` (Tenancy), each kind of background work reaches a stated set of tenants, and \"no tenant\" means the same thing for each: only the records every tenant shares (Background…",
      "tokens": 538,
      "hash": "sha256:8eb7074d0ef47b4757dbf2d6423d533c64ff2927c4d707ee490ff625122719e9",
      "area": 12,
      "links": [
        "background-work",
        "batches-tenants-and-grants",
        "magic-links",
        "tenancy"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1347,
      "hash": "sha256:38e487c660197c80cf29f4ba30b2b049c3dc4cdae0fc22bfc94cd232925c9b11",
      "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",
        "several-changing-calls-in-one-action",
        "standard-type-encodings",
        "structured-values",
        "where-events-travel"
      ]
    },
    {
      "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": 4081,
      "hash": "sha256:88ac0dbd6845823438cbb4ca3fa6e1af436224389262223d529526b857c21af5",
      "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"
      ]
    },
    {
      "id": "where-events-travel",
      "kind": "topic",
      "title": "Where events travel",
      "summary": "Events stay inside the Jadpo runtime.",
      "tokens": 1683,
      "hash": "sha256:a09ad39b8471fb796f4159826a7152677e5562d0d5c334a682070b09b2319852",
      "area": 12,
      "links": [
        "computed-backfills",
        "events-from-outside",
        "retries-and-giving-up",
        "waiting-for-follow-on-work"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1849,
      "hash": "sha256:b100b5d804d93ebdc5b040ed5bae61e31e553ea04c5503479eae3c20490ae97c",
      "area": 12,
      "links": [
        "calling",
        "kinds",
        "system-tables",
        "where-events-travel"
      ]
    },
    {
      "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": 4124,
      "hash": "sha256:8c8df09c0f0a6e52148494de4d84e65326ed1e2fd3ab6ab7f9002657575f43ae",
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "jobs-and-events-built",
      "kind": "topic",
      "title": "What is built: Jobs and events",
      "summary": "The roadmap says when.",
      "tokens": 356,
      "hash": "sha256:4b5526095e9a95b59a2af1ed1637815461dc494d9f789cf84806224344c3c2e8",
      "area": 12,
      "links": [
        "acceptances",
        "built-in-services",
        "debugging-and-review",
        "file-batch-runs",
        "how-a-run-is-kept",
        "personal-data",
        "retries-and-giving-up",
        "where-events-travel"
      ]
    },
    {
      "id": "testing",
      "kind": "topic",
      "title": "Testing",
      "summary": "A Jadpo test runs your real application against a real database.",
      "tokens": 221,
      "hash": "sha256:2a0f3543528de5543a8a15409fba9ac6c10f2778436aa4b2f2e8e728562dee1c",
      "area": 13,
      "links": []
    },
    {
      "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"
      ]
    },
    {
      "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": 299,
      "hash": "sha256:7d5a2dcf4ac2ace8dd7ac335d4dfd306bcbdd91d167691c744166ee03df655b5",
      "area": 13,
      "links": [
        "stable-identity"
      ]
    },
    {
      "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": 3148,
      "hash": "sha256:8787982e379406d28be0c19f3ab20251e8e9096cc30ab280165917c02ac76564",
      "area": 13,
      "links": [
        "actions",
        "ai-tests",
        "caches-and-events",
        "idempotent-writes",
        "in-development-and-tests",
        "recordings",
        "schedules",
        "shared-test-data-fixtures",
        "starting-and-ending-a-session",
        "streaming-a-model-s-answer",
        "the-operations-every-entity-gets"
      ]
    },
    {
      "id": "test-settings",
      "kind": "topic",
      "title": "Test settings",
      "summary": "A test needs no settings.",
      "tokens": 270,
      "hash": "sha256:c5a798383b4c8b4a6bc1481c0347b36fc28424c0c8f93c76e369af992eb93e82",
      "area": 13,
      "links": [
        "configuration-in-tests",
        "controlling-time",
        "fakes-for-integrations",
        "shared-test-data-fixtures"
      ]
    },
    {
      "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": 376,
      "hash": "sha256:233912b1e282c9fb6fcb23772143a3466b2d4458ceee60235917920bfbef835b",
      "area": 13,
      "links": [
        "concealing-records",
        "policy",
        "the-principal"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 2707,
      "hash": "sha256:c9702e6c385165f9ac596e24458f6d2d316522f482e5ee45e3d5f936da5c4d73",
      "area": 13,
      "links": [
        "acting-for-each-user-oauth-grants",
        "ai-tests",
        "batches-work-over-many-items",
        "calling",
        "debugging-and-review",
        "documents",
        "email",
        "external-services",
        "files",
        "search",
        "several-changing-calls-in-one-action",
        "test.subscriber_failed"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "assertions",
      "kind": "topic",
      "title": "Assertions",
      "summary": "`assert condition` fails the test when the condition is false.",
      "tokens": 1565,
      "hash": "sha256:bb1ebfe8d5cd28025e90bf24586675190ce329427a38b0f204e4a8d7195f8069",
      "area": 13,
      "links": [
        "debugging-and-review",
        "failures",
        "kinds-of-test",
        "passing-a-failure-on-attempt",
        "testing"
      ]
    },
    {
      "id": "running-tests",
      "kind": "topic",
      "title": "Running tests",
      "summary": "`jadpo test` runs every test in the project.",
      "tokens": 406,
      "hash": "sha256:f008eeca18756d096a0098ebf1aa1894c7eb12d08adb33b6eeab9fae11d6fc60",
      "area": 13,
      "links": [
        "tooling"
      ]
    },
    {
      "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": 306,
      "hash": "sha256:66ed14f407284a82e9e3167ac68c1ef339e7da5e9e87c6129337123453c8dcde",
      "area": 13,
      "links": [
        "stores"
      ]
    },
    {
      "id": "caches-and-events",
      "kind": "topic",
      "title": "Caches and events",
      "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": 1214,
      "hash": "sha256:a27d600076bb1623c726dd1a258fe2b72221504c3ccd4201ce3dcbda9b337328",
      "area": 13,
      "links": [
        "caches",
        "fakes-for-integrations",
        "retries-and-giving-up",
        "subscribers",
        "test.subscriber_failed",
        "waiting-for-follow-on-work"
      ]
    },
    {
      "id": "testing-built",
      "kind": "topic",
      "title": "What is built: Testing",
      "summary": "Which parts of Testing are built, and what the rest waits on",
      "tokens": 1900,
      "hash": "sha256:3ad832e63057e8d213cf8792759cc2f6f778e94f99e61483f9d7b9a779011f1c",
      "area": 13,
      "links": [
        "email",
        "kinds-of-test",
        "testing",
        "tooling"
      ]
    },
    {
      "id": "tooling",
      "kind": "topic",
      "title": "Tooling",
      "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": 109,
      "hash": "sha256:2413680fd2bbf57147757917716c2390ea6d3d2b4115e54bfbc0b08961699f14",
      "area": 14,
      "links": []
    },
    {
      "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": 2630,
      "hash": "sha256:b621526abc0381bee692a93d9acfb64dd2946ac0cc89c693c645a4e0d7dc51c8",
      "area": 14,
      "links": [
        "a-workers-deployable",
        "configuration-and-time",
        "debugging-and-review",
        "declared-deployables",
        "external-services",
        "formatting",
        "jobs-and-events",
        "kinds-of-test",
        "records-and-manifest",
        "testing",
        "the-build-folder",
        "the-root",
        "which-jadpo-runs"
      ]
    },
    {
      "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": 1030,
      "hash": "sha256:b5cc04824be1589197c40fa4e52d3841b71d1f5d1e0c4070cea845bf0398bdb5",
      "area": 14,
      "links": [
        "ai",
        "project-layout-and-modules"
      ]
    },
    {
      "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": 1242,
      "hash": "sha256:acd7b84efb5e9ff565ddcfbeacbc5fc3dfd3c1e4a037b44761bbda8abb1e9b18",
      "area": 14,
      "links": [
        "migrations",
        "seeds",
        "settings-config-jadpo"
      ]
    },
    {
      "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 (Records and manifest).",
      "tokens": 1122,
      "hash": "sha256:80b88384129a2326539557b90d2f19c1e8603ccdd86ece6242caca05ddcc5cb4",
      "area": 14,
      "links": [
        "records-and-manifest",
        "review-and-sign-off",
        "sharing-with-jadpo-hq",
        "suggestions"
      ]
    },
    {
      "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": 831,
      "hash": "sha256:2a610069b3501a9d2f76ff0d3943e01b699aa3e7059a01deb7e48305510b8085",
      "area": 14,
      "links": []
    },
    {
      "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": 1874,
      "hash": "sha256:5d951f3bf37b154bbad0c7dd5d0fdf6693a75efc8b44a98db746149007c96732",
      "area": 14,
      "links": [
        "ai"
      ]
    },
    {
      "id": "commands-for-services-calls-email-and-stored-data",
      "kind": "topic",
      "title": "Commands for services, calls, email and stored data",
      "summary": "These commands show what your app sent outside while you develop it, the provider calls and the email, and check a deploy before it happens.",
      "tokens": 1036,
      "hash": "sha256:fc6e27233c7ce3541dfcba7895907ceb0015d522119a71f9caeb87dc00cd826b",
      "area": 14,
      "links": [
        "ai",
        "debugging-and-review",
        "email",
        "files",
        "jobs-and-events",
        "search",
        "several-changing-calls-in-one-action"
      ]
    },
    {
      "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": 432,
      "hash": "sha256:cefefb5532c9ebd5cfea56ef58bebb07ea812c7304264df6ad0899e6855a5bb3",
      "area": 14,
      "links": [
        "editor-support",
        "what-an-operator-sees",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "running-tests-from-the-command-line",
      "kind": "topic",
      "title": "Running tests",
      "summary": "`jadpo test` owns everything a test run needs, so nothing about it appears in your source (Testing).",
      "tokens": 239,
      "hash": "sha256:7b1f53956ae955fd727595eb4020f77a024b0cc2586835dd6a2ece5b1c88862a",
      "area": 14,
      "links": [
        "testing"
      ]
    },
    {
      "id": "formatting",
      "kind": "topic",
      "title": "Formatting",
      "summary": "`jadpo fmt` lays out your code, so you never choose a style.",
      "tokens": 798,
      "hash": "sha256:010eb7aa9d0a08a4d4bc0b46056c0458edf1c4f58f0dc5f4914c4cc3f4c57560",
      "area": 14,
      "links": [
        "files-and-names",
        "imports",
        "project-layout-and-modules"
      ]
    },
    {
      "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:d2d9e3e11866aed294b681f92e831b608740457bf3446767c654dac706328905",
      "area": 14,
      "links": [
        "the-root",
        "what-is-committed-and-why"
      ]
    },
    {
      "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": 2074,
      "hash": "sha256:66c0519d10a7d69bbc306b71c77f680b9bb3474f30a6cd4ceab6fc90becdf59e",
      "area": 14,
      "links": [
        "data",
        "http",
        "imports",
        "reads-and-writes"
      ]
    },
    {
      "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": 669,
      "hash": "sha256:7dff38d6293742a89c35f664c1688a4cc108fe5208ef8e0ee4931ec569bb589a",
      "area": 14,
      "links": [
        "a-native-deployable",
        "faults"
      ]
    },
    {
      "id": "the-build-folder",
      "kind": "topic",
      "title": "The build/ folder",
      "summary": "`build/` holds only generated files.",
      "tokens": 595,
      "hash": "sha256:47d6466450ab9019af007a2ccda0557b65a6d1d075c9508c3094548c148e4a64",
      "area": 14,
      "links": [
        "data",
        "reads-and-writes",
        "stable-identity"
      ]
    },
    {
      "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": 866,
      "hash": "sha256:3aa2954f0310ff4a267e042a7535f97208a96a4f07131ec6026137ead803b2ff",
      "area": 14,
      "links": [
        "constants",
        "logic",
        "project-layout-and-modules"
      ]
    },
    {
      "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": 184,
      "hash": "sha256:f48b4a3f5425a4e67dc68ffc68decadf0f9b3e143b55b494fab48fb3781f3576",
      "area": 14,
      "links": []
    },
    {
      "id": "signals",
      "kind": "topic",
      "title": "Signals",
      "summary": "A signal is a pattern `jadpo suggest` looks for.",
      "tokens": 760,
      "hash": "sha256:56edcacc87357e9b79e25cd7b2eff317c57e1e8f02cc7999fb3c916be46f650c",
      "area": 14,
      "links": [
        "standard-library"
      ]
    },
    {
      "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": []
    },
    {
      "id": "the-report",
      "kind": "topic",
      "title": "The report",
      "summary": "Findings are numbered S1, S2… in file order, each with its place, what it suggests, the signal and the snippet.",
      "tokens": 438,
      "hash": "sha256:596f37376e0db8d4e91850b35cdedefbfb54a723645e8c798a589372f98d2223",
      "area": 14,
      "links": [
        "sharing-with-jadpo-hq"
      ]
    },
    {
      "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": 285,
      "hash": "sha256:9646cc352aeebd956ae81699f57d0d55259ce2fe6619a2e3cc89a8d36254123b",
      "area": 14,
      "links": []
    },
    {
      "id": "teaching-a-miss",
      "kind": "topic",
      "title": "Teaching a miss",
      "summary": "When the scan missed something, record it before you change the code:",
      "tokens": 464,
      "hash": "sha256:fc31dfa9406da08a0c2ee83aae407ef00d29666bf80f8b500c851dcbaeec3f53",
      "area": 14,
      "links": []
    },
    {
      "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"
      ]
    },
    {
      "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": []
    },
    {
      "id": "review-and-sign-off",
      "kind": "topic",
      "title": "Review and sign-off",
      "summary": "Some changes need a person to accept them before they ship: a change that can break an API client (Breaking changes), dropping something from the database (Data), a weaker policy (Policy), and a new…",
      "tokens": 270,
      "hash": "sha256:7d308ff2358111235a0858b74d0b29951e919dcb3f01648364b8270d23d52cf6",
      "area": 14,
      "links": [
        "acceptances",
        "data",
        "policy",
        "the-public-api-record"
      ]
    },
    {
      "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": 171,
      "hash": "sha256:67525aa9e944f9fd36a2a0b922c310d23c40379bd3d8485acf728251d54258bf",
      "area": 14,
      "links": [
        "identity",
        "logging"
      ]
    },
    {
      "id": "a-native-deployable",
      "kind": "topic",
      "title": "A native deployable",
      "summary": "A deployable is one program your app is built into.",
      "tokens": 1997,
      "hash": "sha256:a4f367287c0d8b0661cd6e22236900468d5190af043aab93dea0e94477be55fa",
      "area": 14,
      "links": [
        "debugging-and-review",
        "declared-deployables",
        "failures",
        "migrations"
      ]
    },
    {
      "id": "declared-deployables",
      "kind": "topic",
      "title": "Declared deployables",
      "summary": "An app can be built into several programs, for example a Worker that serves its public API and a server that runs its back office.",
      "tokens": 1908,
      "hash": "sha256:e07d671275042419aa98e3f5902a6330fc0454a05fb24d353bbfabe966a6023a",
      "area": 14,
      "links": [
        "records-and-manifest"
      ]
    },
    {
      "id": "a-workers-deployable",
      "kind": "topic",
      "title": "A Workers deployable",
      "summary": "A deployable with `target: Target.wasm` runs on Cloudflare Workers.",
      "tokens": 3405,
      "hash": "sha256:2795f23439d60bd9e1021557dee8b8254fc712ce6723ecad6a0ae2ace4a11555",
      "area": 14,
      "links": [
        "deployable.target_unsupported",
        "external-services",
        "openapi",
        "rate-limits",
        "schedules"
      ]
    },
    {
      "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.",
      "tokens": 4612,
      "hash": "sha256:1db8aba989a0f2525ab287c5b9710ed1f9c0b10169e525b2bdd80084ae2ca6fa",
      "area": 14,
      "links": [
        "a-native-deployable",
        "external-services"
      ]
    },
    {
      "id": "tooling-built",
      "kind": "topic",
      "title": "What is built: Tooling",
      "summary": "Each row says what is built and what is specified but not built yet.",
      "tokens": 1108,
      "hash": "sha256:8ad30f2531f92e89267f4aebacdf62174bf946acce1a11f1f4d919b4f2a3c425",
      "area": 14,
      "links": [
        "editor-support",
        "error-messages",
        "records-and-manifest",
        "testing",
        "the-jadpo-command",
        "the-root"
      ]
    },
    {
      "id": "personal-data",
      "kind": "topic",
      "title": "Personal data",
      "summary": "Your app says which data is about a person, and Jadpo does the rest: it exports that data when the person asks for a copy, erases it when they ask to be forgotten, deletes it when its time is up, and…",
      "tokens": 391,
      "hash": "sha256:62bf90f2965666de689bad3579d5e0031e0b356402cbd4852e91321c37ba3601",
      "area": 15,
      "links": []
    },
    {
      "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": 715,
      "hash": "sha256:1cfd619fe92377daa0ce5a38181b99e4a20950f34cfa759e01ac752ee1222d84",
      "area": 15,
      "links": [
        "access-records",
        "every-standard-type-meets-one-contract",
        "logging",
        "person-entities"
      ]
    },
    {
      "id": "person-entities",
      "kind": "topic",
      "title": "The person",
      "summary": "An entity that represents a person says `person: true`.",
      "tokens": 197,
      "hash": "sha256:38f99e1f66f9be08ea5c872b9417b26950ec42766f803532832485e2c83c83b0",
      "area": 15,
      "links": [
        "the-personal-data-report"
      ],
      "aliases": [
        "the-person"
      ]
    },
    {
      "id": "erasure",
      "kind": "topic",
      "title": "Erasure",
      "summary": "Erasing a person is a generated operation, `User.erase(user_id)`.",
      "tokens": 2145,
      "hash": "sha256:18b71699a36a69af0dade30ec4dca49e4eb884cc1acf279e371112ce90961676",
      "area": 15,
      "links": [
        "absent-values",
        "acceptances",
        "acting-for-each-user-oauth-grants",
        "built-in-emails",
        "caches",
        "capabilities",
        "files",
        "lifecycle",
        "marking-personal-fields",
        "references-and-on-delete",
        "retention",
        "subscribers",
        "the-personal-data-report"
      ]
    },
    {
      "id": "personal-data-export",
      "kind": "topic",
      "title": "Export",
      "summary": "`User.export(user_id)` returns everything held about the person: their record and every record that belongs to them, as JSON, one list per entity, with the same field names as the API.",
      "tokens": 301,
      "hash": "sha256:af54c250bcd054ba795d542a518ba2448ab1400100d355b296224dfbcd1f7fbd",
      "area": 15,
      "links": [
        "grants",
        "policy"
      ],
      "aliases": [
        "export"
      ]
    },
    {
      "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": 327,
      "hash": "sha256:331a9b1b0c67eeec05db72722266dd332630aebce00916e1da98a5f280a31425",
      "area": 15,
      "links": [
        "erasure",
        "lifecycle",
        "schedules",
        "settings-config-jadpo"
      ]
    },
    {
      "id": "personal-data-checks",
      "kind": "topic",
      "title": "What the compiler checks",
      "summary": "or action reads is an error, because you are holding data you don't use (data minimisation, Article 5).",
      "tokens": 317,
      "hash": "sha256:7a4cab397c51b8bb8dc1eb24c7fac96426b12f04a3c8ba5ff5a76a141f7a11e2",
      "area": 15,
      "links": [
        "declining-a-judgement-call"
      ],
      "aliases": [
        "what-the-compiler-checks"
      ]
    },
    {
      "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": 1177,
      "hash": "sha256:30bf6764ad3c3cf4a3ac20a76f165dc00b144d5c95a5d82d362b59d7e2e6e1e1",
      "area": 15,
      "links": [
        "built-in-emails",
        "failures-for-client-apps",
        "generated-routes",
        "rate-limits",
        "routes-signed-in-by-default"
      ]
    },
    {
      "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": []
    },
    {
      "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"
      ]
    },
    {
      "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 report).",
      "tokens": 345,
      "hash": "sha256:09f9df9660369d00d0b59fc0fc933584fe8516afb76a2346eecea26f6fad5f95",
      "area": 15,
      "links": [
        "review-and-sign-off",
        "several-changing-calls-in-one-action",
        "the-report"
      ]
    },
    {
      "id": "encrypted-fields",
      "kind": "topic",
      "title": "Encrypted fields",
      "summary": "An entity field can be stored encrypted: `notes: ClinicalNote { encrypted: true }`.",
      "tokens": 169,
      "hash": "sha256:2b351fbcef69016cdfeb9e40abec46cb0562d405e3e1efbf751cdcadb3d4a29b",
      "area": 15,
      "links": [
        "erasure",
        "following-personal-data",
        "hashing-and-cryptography"
      ]
    },
    {
      "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": []
    },
    {
      "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": 94,
      "hash": "sha256:89f3698598e1bb1b4c5a63e0efea786a2a05b1338f3ea027e59fdf0c19aaa3ed",
      "area": 15,
      "links": [
        "ai"
      ]
    },
    {
      "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: feature flags, rate limits, files, an audit trail, telemetry, email, documents, search and…",
      "tokens": 952,
      "hash": "sha256:73f250476129b555c65264eb6f8ee490b4158f7b366f4008fefc741650681472",
      "area": 16,
      "links": [
        "built-in-services-built",
        "caches",
        "caches-drivers-and-what-they-hold",
        "encrypted-fields",
        "how-integrations-fit-together"
      ]
    },
    {
      "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": 515,
      "hash": "sha256:3ffa6a19c060acd8eb90ad5fa330b76467067b5252da8dd347773ce0ba0613a5",
      "area": 16,
      "links": [
        "capabilities",
        "fakes-for-integrations",
        "telemetry",
        "where-events-travel"
      ],
      "aliases": [
        "capabilities-on-this-page"
      ]
    },
    {
      "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": 1149,
      "hash": "sha256:f0016f628bee779468312ddceb1edc469378438372a69bb6ce7ac4e660494461",
      "area": 16,
      "links": [
        "background-work",
        "commands-for-services-calls-email-and-stored-data",
        "settings-config-jadpo",
        "tenancy",
        "test-settings"
      ]
    },
    {
      "id": "rate-limits",
      "kind": "topic",
      "title": "Rate limits",
      "summary": "A rate limit caps how many requests a caller may make in a period.",
      "tokens": 1195,
      "hash": "sha256:59dfb21e7e7c3a68b4beeead33cb7d13d15e240a20eedeaea76e82d197420e0b",
      "area": 16,
      "links": [
        "built-in-services-built",
        "caches",
        "calling",
        "client-addresses",
        "magic-links",
        "rate-limited-requests",
        "rate-limits-on-workers"
      ]
    },
    {
      "id": "caches-drivers-and-what-they-hold",
      "kind": "topic",
      "title": "Caches: drivers and what they hold",
      "summary": "Nothing is cached unless you add it.",
      "tokens": 402,
      "hash": "sha256:b92a694b466b98a36128df0037f72afee022ee34f9f668110cc453843f5763ab",
      "area": 16,
      "links": [
        "caches",
        "connecting-in-app-jadpo"
      ]
    },
    {
      "id": "files",
      "kind": "topic",
      "title": "Files",
      "summary": "To store a file, such as a user's avatar, give an entity a field of type `File`.",
      "tokens": 2839,
      "hash": "sha256:3ff3ba84e09800b709b32107ac75c5b21cbc4fb3afdd41abfadf4d291d105b66",
      "area": 16,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "batches-work-over-many-items",
        "built-in-types",
        "data-formats-json-csv-tsv-and-json-lines",
        "deployable.target_unsupported",
        "grants",
        "one-input",
        "one-store-per-action",
        "personal-data",
        "reading-gzip",
        "several-changing-calls-in-one-action",
        "what-package-code-may-do"
      ]
    },
    {
      "id": "audit-trail",
      "kind": "topic",
      "title": "Audit trail",
      "summary": "An entity keeps no history of its changes unless you ask.",
      "tokens": 523,
      "hash": "sha256:ee584acae56bd26053c5de9dd55e618d852872d5d6e7f6adc9279f716c42c072",
      "area": 16,
      "links": [
        "access-records",
        "delivery-at-least-once-safe-to-repeat",
        "marking-personal-fields"
      ]
    },
    {
      "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": 1197,
      "hash": "sha256:325e95b5440b1294b6a0f84031e04747901004ae964c8e286c265d4b1719eb18",
      "area": 16,
      "links": [
        "connecting-in-app-jadpo",
        "logging",
        "monitoring-thresholds",
        "project-layout",
        "settings-config-jadpo",
        "the-manifest",
        "traces-metrics-and-logs-in-development"
      ]
    },
    {
      "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": 469,
      "hash": "sha256:81b8fb3e7e9e3b2c1e27e07fcda7df333a9fec4e3c49ad0d7fd599535d69aaa3",
      "area": 16,
      "links": [
        "built-in-services-built",
        "stable-identity",
        "the-request-timeline-in-jadpo-dev"
      ]
    },
    {
      "id": "monitoring-thresholds",
      "kind": "topic",
      "title": "Monitoring thresholds",
      "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": 682,
      "hash": "sha256:f79c7b7fa0222295f259db057d9f59a33bfca32dd40592e7c8e6be00cf9298ad",
      "area": 16,
      "links": [
        "acceptances",
        "telemetry",
        "the-developer-console-and-mcp"
      ]
    },
    {
      "id": "email",
      "kind": "topic",
      "title": "Email",
      "summary": "Most apps send a handful of emails: confirm your address, an invoice, a welcome.",
      "tokens": 3130,
      "hash": "sha256:00651a054614d657a427af8abbe7d20c542447c109aebe350b7f0a68695b6ab0",
      "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",
        "every-standard-type-meets-one-contract",
        "retries-and-giving-up",
        "spamassassin-in-the-health-score",
        "text-formats",
        "the-dev-inbox-and-the-health-score",
        "the-smtp-driver",
        "translations-as-messages"
      ]
    },
    {
      "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": 674,
      "hash": "sha256:1c40e8b4dea1dd46a5876a86a6e5b1c9bbfc77a6f536500a639563e6579f66ee",
      "area": 16,
      "links": [
        "connecting-in-app-jadpo",
        "stores",
        "the-seam-every-outside-call-goes-through"
      ]
    },
    {
      "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": 3399,
      "hash": "sha256:a87da25df274b04ebfc868a0c63c6e182a03b77323f3c38530136e86e419d69a",
      "area": 16,
      "links": [
        "custom-magic-link-email",
        "data-requests",
        "default-magic-link-email",
        "email",
        "erasure",
        "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"
      ]
    },
    {
      "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": 615,
      "hash": "sha256:956f4a82e73e37f42b979aba8e492045006dc8f70da89d790b48910970a630b4",
      "area": 16,
      "links": [
        "email",
        "fakes-for-integrations",
        "how-polls-and-max-concurrent-run",
        "what-package-code-may-do"
      ]
    },
    {
      "id": "search",
      "kind": "topic",
      "title": "Search",
      "summary": "Give an entity a `search:` section and people can search its records by words.",
      "tokens": 767,
      "hash": "sha256:f9450d78d0401bf9d56784c8dc5691471e2403bdffe4426eb04dc3e559368818",
      "area": 16,
      "links": [
        "delivery-at-least-once-safe-to-repeat",
        "erasure",
        "indexes",
        "order-and-pages",
        "policy"
      ]
    },
    {
      "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": 486,
      "hash": "sha256:41f11476ba1906bf99c3cabfbfca02d3c253c473952b9621a1fe67870b13f441",
      "area": 16,
      "links": [
        "acceptances",
        "failures-for-client-apps",
        "fakes-for-integrations"
      ]
    },
    {
      "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": 230,
      "hash": "sha256:a5e7c92d839d877db4d035d18eea9093d9564cd46be3338e5c8dc77c7f51b127",
      "area": 16,
      "links": [
        "built-in-services-built",
        "connecting-in-app-jadpo",
        "where-events-travel"
      ]
    },
    {
      "id": "not-built-in",
      "kind": "topic",
      "title": "Not built in",
      "summary": "Some features other frameworks offer aren't part of Jadpo, because the compiler gains little by knowing about them.",
      "tokens": 310,
      "hash": "sha256:d0be87d33731dbb9ea2c7d6deb42d30cd6c9568762fe87bcc59077d0bd0da16a",
      "area": 16,
      "links": [
        "commands-for-background-work",
        "counters-and-other-one-step-updates",
        "external-services",
        "the-jadpo-command",
        "webhooks",
        "write-revisions"
      ]
    },
    {
      "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": 889,
      "hash": "sha256:9ec36855ea673aeb66b07a459a10bc8864d12fafb4e0a43341e0489e3edd7a8c",
      "area": 16,
      "links": [
        "built-in-services-built",
        "rate-limits"
      ]
    },
    {
      "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": 1367,
      "hash": "sha256:3795761d077118ede7bacb4176b31d39e128191d49b7c19ae362dfb4a45d597b",
      "area": 16,
      "links": [
        "declining-a-judgement-call",
        "email",
        "spamassassin-in-the-health-score",
        "the-developer-console-and-mcp",
        "the-request-timeline-in-jadpo-dev"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "mail-packages-partials-and-email-sent",
      "kind": "topic",
      "title": "Mail packages, partials and email.sent",
      "summary": "This topic has the exact rules for partials, for `email.sent` in tests, and for a mail package that fills the `email` capability (Email has the overview).",
      "tokens": 1400,
      "hash": "sha256:cf8d022d734da130881f822e1807b30343358b54e85c5f096cf0b579b4cb46e5",
      "area": 16,
      "links": [
        "capabilities",
        "email",
        "in-development-and-tests"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "email-templates-and-sending",
      "kind": "topic",
      "title": "Email templates and sending",
      "summary": "This topic has the exact rules for how an email's templates are checked and how the email is sent (Email has the overview).",
      "tokens": 1035,
      "hash": "sha256:f5ec9dd0d71f82720d67fbbcca81a52dca8c717d86e817b5abe96342a729d03a",
      "area": 16,
      "links": [
        "email",
        "limits-and-runtime-faults",
        "prompts-as-files"
      ]
    },
    {
      "id": "the-seam-every-outside-call-goes-through",
      "kind": "topic",
      "title": "The seam every outside call goes through",
      "summary": "Every call that leaves your app's process, to a capability or to a provider, goes through one entry point in the runtime: the seam.",
      "tokens": 1207,
      "hash": "sha256:2f08528749d69c4e1810165abaa71c3509b8096c102b8d2305437e155121ae48",
      "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"
      ]
    },
    {
      "id": "files-put-read-and-the-disk-driver-in-development",
      "kind": "topic",
      "title": "Files: put, read and the disk driver in development",
      "summary": "This topic has the exact rules for `File` fields, `store.put`, `store.read`, and the store `jadpo dev` and tests keep files in (Files has the overview).",
      "tokens": 818,
      "hash": "sha256:9568c1b1581c23f6eef69fadf3f60659c0b05ed4ae8345564c2aaf48a4bf625e",
      "area": 16,
      "links": [
        "built-in-services-built",
        "fakes-for-integrations",
        "files"
      ]
    },
    {
      "id": "export-file-pieces",
      "kind": "topic",
      "title": "Files: an export's pieces",
      "summary": "A large export is written a page of rows at a time, and each page is a piece of the file.",
      "tokens": 366,
      "hash": "sha256:10b05dafbd0a8272187de759620d2ddcde4cefbe9c96e4eebd84044210999bfe",
      "area": 16,
      "links": [
        "data-formats-json-csv-tsv-and-json-lines",
        "export-batch-runs"
      ],
      "aliases": [
        "files-an-export-s-pieces"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1046,
      "hash": "sha256:e99a4b6066116ba5a2fbc94da5295bc8f95c960084c52db7ed1778351e587d31",
      "area": 16,
      "links": [
        "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-put-read-and-the-disk-driver-in-development",
        "mail-packages-partials-and-email-sent",
        "rate-limits-on-workers",
        "reading-gzip",
        "spamassassin-in-the-health-score",
        "the-dev-inbox-and-the-health-score",
        "the-seam-every-outside-call-goes-through"
      ]
    },
    {
      "id": "debugging-and-review",
      "kind": "topic",
      "title": "Debugging and review",
      "summary": "Jadpo code is written mainly by coding agents and read by people, so two jobs matter most.",
      "tokens": 616,
      "hash": "sha256:d1ee78ffecd2f8231b4da159064976f5d48d1b014af0d8f2b59d2cfb73818eba",
      "area": 17,
      "links": [
        "debugging-and-review-built",
        "tools-for-agents"
      ]
    },
    {
      "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": 293,
      "hash": "sha256:5d8bfb97ec03d6b0a4ab434cadd95985c80fd6342bd5a77424e4523d3d66dd57",
      "area": 17,
      "links": [
        "logging"
      ]
    },
    {
      "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": 331,
      "hash": "sha256:0f747195af1091f000f94a5deede527a83a188a026fc1bd495b2e41beb23932f",
      "area": 17,
      "links": [
        "production-builds",
        "stable-identity"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 680,
      "hash": "sha256:18a1210ff0f2242f9c4bb1fa6358a31fbcbf123243aa5d4e985d6b86fef0d566",
      "area": 17,
      "links": [
        "logging",
        "provider-calls-in-development-jadpo-calls",
        "several-changing-calls-in-one-action",
        "telemetry",
        "tools-for-agents"
      ]
    },
    {
      "id": "watching-code-run-jadpo-watch",
      "kind": "topic",
      "title": "Watching code run: jadpo watch",
      "summary": "Your agent can wait for one part of the code to run and then see its inputs and outputs, without reading whole logs.",
      "tokens": 456,
      "hash": "sha256:d4c0ce193e29bf88f48781c1315d5d82568974e01139f76fa218bfd6e9d210d3",
      "area": 17,
      "links": [
        "provider-calls-in-development-jadpo-calls",
        "telemetry",
        "what-an-operator-sees"
      ]
    },
    {
      "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": 1169,
      "hash": "sha256:d491e1c57694baff5ff8479af1c1e4dfc86f4feea07d8334d55333f372994121",
      "area": 17,
      "links": [
        "acting-for-each-user-oauth-grants",
        "fakes-for-integrations",
        "provider-calls-in-development",
        "telemetry"
      ]
    },
    {
      "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": 277,
      "hash": "sha256:cf780189054588c74317523bc00afcea0e6d4f405224bdbe5fc57f4b1a09ebfa",
      "area": 17,
      "links": [
        "telemetry",
        "what-package-code-may-do"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "running-a-query-or-action-jadpo-call",
      "kind": "topic",
      "title": "Running a query or action: jadpo call",
      "summary": "Where Rails has an interactive `rails console`, Jadpo has a one-shot command.",
      "tokens": 306,
      "hash": "sha256:b0c7cfbe5f182b198031c0c39fe3930f06d1c31594d93f74b9dea6f7dc92aa1a",
      "area": 17,
      "links": [
        "seeds",
        "the-principal"
      ]
    },
    {
      "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": 478,
      "hash": "sha256:0f48cdb95b0d535ec3f554687c984a3f470337ffa8d42cb47849e69cd3d97395",
      "area": 17,
      "links": [
        "commands-for-background-work",
        "delivery-at-least-once-safe-to-repeat",
        "identity"
      ]
    },
    {
      "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": 752,
      "hash": "sha256:b5941346adf4574c8319e8714308d47f6b76e884b38fca464faaadb6fb0d37eb",
      "area": 17,
      "links": [
        "acceptances",
        "bot-protection",
        "erasure",
        "migrations",
        "the-permissions-report",
        "the-personal-data-report",
        "the-public-api-record",
        "tooling-for-translations"
      ]
    },
    {
      "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": 482,
      "hash": "sha256:3b13b758c82b0c9ead227a988436a8bb156d2bad1172b35e7e4cfbedb24bf78d",
      "area": 17,
      "links": [
        "marking-personal-fields",
        "path-ids"
      ]
    },
    {
      "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": 344,
      "hash": "sha256:f613a71cff95c01b98e457fe7be142dd5cb9fcb134259eeaef3249eacbd2e04e",
      "area": 17,
      "links": [
        "every-boundary-through-the-contract",
        "personal-data",
        "tools-for-agents"
      ]
    },
    {
      "id": "debugging-and-review-built",
      "kind": "topic",
      "title": "What is built: Debugging and review",
      "summary": "Which parts of Debugging and review are built, and what the rest waits on",
      "tokens": 301,
      "hash": "sha256:896ec28e2420324fe0eac1a4cf553bdaec3742cb171c43feb3903718babbf2f5",
      "area": 17,
      "links": [
        "what-an-operator-sees"
      ]
    },
    {
      "id": "records-and-manifest",
      "kind": "topic",
      "title": "Records and manifest",
      "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": 978,
      "hash": "sha256:906081f657db93fa70812338fee17f4ecfd2cff146c01af281a3546aa32c072a",
      "area": 18,
      "links": [
        "declaring-an-event",
        "external-services",
        "suggestions",
        "translations-as-messages"
      ]
    },
    {
      "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": 3664,
      "hash": "sha256:b124956de6c926d4a127bff91b7ab61f0c534d9d8becb1b35f3b0a4415d43268",
      "area": 18,
      "links": [
        "external-services",
        "migrations",
        "records-and-manifest-built",
        "suggestions",
        "the-root",
        "translations-as-messages",
        "which-jadpo-runs"
      ]
    },
    {
      "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": 1099,
      "hash": "sha256:0859cb1e67860890fd4179150e3bc3b2e8da5240657d386ada21f707477472d1",
      "area": 18,
      "links": [
        "all-or-nothing-actions-and-concurrent-changes",
        "policy",
        "prompts-as-files",
        "records-and-manifest-built"
      ]
    },
    {
      "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": 891,
      "hash": "sha256:b08e372b0bccaed7108dc16558f8b526f2e5baac5bbaceffed8307c61d189095",
      "area": 18,
      "links": [
        "files-and-names",
        "path-ids",
        "system-tables",
        "tooling"
      ]
    },
    {
      "id": "comparing-two-builds",
      "kind": "topic",
      "title": "Comparing two builds",
      "summary": "Every review is a diff of two manifests.",
      "tokens": 446,
      "hash": "sha256:8290a1a7b99781736ad38d32cff0042ffa324419be876bccfabb247abc74a4c0",
      "area": 18,
      "links": [
        "records-and-manifest-built",
        "review-and-sign-off",
        "reviewing-a-change"
      ]
    },
    {
      "id": "acceptances",
      "kind": "topic",
      "title": "Acceptances",
      "summary": "Some changes can break someone else, such as removing a field clients read.",
      "tokens": 728,
      "hash": "sha256:7cd83e180d8f8b392e6ec5470ca7a843a2bee37948ad19df8387c51fb2cf599d",
      "area": 18,
      "links": [
        "domains",
        "erasure",
        "external-services",
        "migrations",
        "monitoring-thresholds",
        "package-upgrades",
        "policy",
        "records-and-manifest-built",
        "review-and-sign-off",
        "the-public-api-record"
      ]
    },
    {
      "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": 278,
      "hash": "sha256:32aba3ec890d34009576212fb41fb8865df57e72bb1624d69eddcdb8c4b6a7ec",
      "area": 18,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "production-builds",
      "kind": "topic",
      "title": "Production builds",
      "summary": "A deployable carries a small build stamp, not its manifest.",
      "tokens": 375,
      "hash": "sha256:1dc88fb532de48f8dbe32a06f82d1d0bf07c7d5be44021624ad033d5b3bae964",
      "area": 18,
      "links": [
        "errors-point-at-the-jadpo-line",
        "records-and-manifest-built",
        "tooling"
      ]
    },
    {
      "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": 237,
      "hash": "sha256:930ecd1541e66525e56a0d74f05ae3a8151cfb80728bdb1837caea9174167c3c",
      "area": 18,
      "links": [
        "tools-for-agents"
      ]
    },
    {
      "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": 627,
      "hash": "sha256:cab6c3d7b788b35d24dee3d6c58de08711eb23d6838b5f769dfe8745bf5924dd",
      "area": 18,
      "links": [
        "records-and-manifest-built"
      ],
      "aliases": [
        "three-journeys"
      ]
    },
    {
      "id": "records-and-manifest-built",
      "kind": "topic",
      "title": "What is built: Records and manifest",
      "summary": "Which parts of Records and manifest are built, and what the rest waits on",
      "tokens": 1333,
      "hash": "sha256:8a57731e120d3f97b9d182616cab2afbc36c9a083eacb122453544ede5879b56",
      "area": 18,
      "links": [
        "a-native-deployable",
        "a-workers-deployable",
        "acceptances",
        "configuration-and-time",
        "declared-deployables",
        "declaring-an-event",
        "external-services",
        "failures",
        "identity",
        "jobs-and-events",
        "logic",
        "package-upgrades",
        "project-layout-and-modules",
        "tooling",
        "values-and-types"
      ]
    },
    {
      "id": "standard-library",
      "kind": "topic",
      "title": "Standard library",
      "summary": "The standard library is the set of types and operations every program can use without declaring them, such as `Money`, `list.count(items)` and `temporal.in_zone(at, zone)`.",
      "tokens": 979,
      "hash": "sha256:4a8af6b0ad275f9603bf3760f5e205f20f71e1ba026fc573c65738374d69d744",
      "area": 19,
      "links": [
        "ai",
        "batches-work-over-many-items",
        "collections",
        "configuration-and-time",
        "every-standard-type-meets-one-contract",
        "geospatial",
        "locales",
        "logic",
        "passing-functions",
        "standard-library-built",
        "the-standard-operator-table",
        "values-and-types",
        "zones-and-local-times"
      ]
    },
    {
      "id": "shared-vocabulary-types",
      "kind": "topic",
      "title": "Shared vocabulary types",
      "summary": "Some types are needed by nearly every package and app, and each would otherwise invent its own.",
      "tokens": 571,
      "hash": "sha256:ebc08bfc4adb1dd9f24b5708e8ae466aa78941132fffe9a0bd857a4665984919",
      "area": 19,
      "links": [
        "declining-a-judgement-call",
        "packages-use-the-standard-types",
        "standard-type-clashes",
        "values-and-types"
      ]
    },
    {
      "id": "the-standard-types",
      "kind": "topic",
      "title": "The standard types",
      "summary": "There are 247 standard types, listed here by group.",
      "tokens": 2643,
      "hash": "sha256:56fdeb2b0d163ee7d1bbce9db1544c8e45e83c395afa815116f17b5f756e5fff",
      "area": 19,
      "links": [
        "ai",
        "every-standard-type-meets-one-contract",
        "geospatial",
        "identity",
        "personal-data"
      ]
    },
    {
      "id": "every-standard-type-meets-one-contract",
      "kind": "topic",
      "title": "Every standard type meets one contract",
      "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": 3814,
      "hash": "sha256:0f1ff6144207861d205fdfdc65cca38b33526ed8afde112e3d632c118f6423df",
      "area": 19,
      "links": [
        "ai",
        "configuration-and-time",
        "enums",
        "every-boundary-through-the-contract",
        "geospatial",
        "objects",
        "predicates-and-shapes",
        "standard-library-operations",
        "suggestions"
      ]
    },
    {
      "id": "every-boundary-through-the-contract",
      "kind": "topic",
      "title": "Every boundary through the contract",
      "summary": "A standard value keeps its currency, unit and precision wherever it goes into or out of your program.",
      "tokens": 3718,
      "hash": "sha256:69c151a12ea3591f4b0b69a3d1ce68d24001838d6531074cab5e6a38ca28bc5d",
      "area": 19,
      "links": [
        "acceptances",
        "built-in-services",
        "caches",
        "configuration-and-time",
        "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"
      ]
    },
    {
      "id": "standard-type-encodings",
      "kind": "topic",
      "title": "Changing a standard type's encoding",
      "summary": "Upgrading Jadpo never makes your stored data unreadable.",
      "tokens": 941,
      "hash": "sha256:4d7270312b8c12085901d549af503f2b558c3243f976699c5c276b80d2a2a453",
      "area": 19,
      "links": [
        "system-tables"
      ],
      "aliases": [
        "changing-a-standard-type-s-encoding"
      ]
    },
    {
      "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": 1369,
      "hash": "sha256:f62b7da36c255b95f925b0a61c6595e23aadea7e5ab3471d2e78bcb852c393aa",
      "area": 19,
      "links": [
        "acceptances",
        "declining-a-judgement-call",
        "decoding",
        "geospatial-interop",
        "records-and-manifest",
        "standard-library",
        "standard-type-clashes"
      ]
    },
    {
      "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": 2093,
      "hash": "sha256:acaf544ae3c17af4c8546fc9aac67d4be282fe071028890efb2b02ee3ce72213",
      "area": 19,
      "links": [
        "editor-support",
        "records-and-manifest",
        "standard-library"
      ],
      "aliases": [
        "a-release-that-adds-a-standard-type"
      ]
    },
    {
      "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": 1087,
      "hash": "sha256:e15c70376a607f41edb41d114ccefed9216db37100b41d476fc4d32ab651ad05",
      "area": 19,
      "links": [
        "expressions-and-operators",
        "failures",
        "functions-and-actions",
        "project-layout-and-modules",
        "values-and-types",
        "zones-and-local-times"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "standard-library-operations",
      "kind": "topic",
      "title": "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": 306,
      "hash": "sha256:a96dcb03615915a6c85419696647e44763747a2ec1e9edf3dcf033c4719c5f61",
      "area": 19,
      "links": [
        "every-standard-type-meets-one-contract",
        "locales"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1841,
      "hash": "sha256:ac561666b70457f2e4ac90f7f02a6150b488d29f94c7076a6f06ffee8240f03c",
      "area": 19,
      "links": [
        "computed-backfills",
        "counters-and-other-one-step-updates",
        "counts-sums-and-groups",
        "data",
        "filters",
        "indexes",
        "order-and-pages",
        "storage-types"
      ]
    },
    {
      "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": 3014,
      "hash": "sha256:2eb1f25574585da6972e425641d9c19aaeccb6b0050f167a67ad696be581a7f2",
      "area": 19,
      "links": [
        "collections",
        "expressions-and-operators",
        "maps",
        "passing-functions",
        "standard-library",
        "text",
        "values-never-change"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 3884,
      "hash": "sha256:b82a4ae9f87feac4b3cb48fd63b7858e0105b9aefd4f9573244278f10be1927d",
      "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"
      ]
    },
    {
      "id": "money-and-payments",
      "kind": "topic",
      "title": "Money and payments",
      "summary": "Use `Money` for an amount of money and `Currency` for its currency.",
      "tokens": 1732,
      "hash": "sha256:102cc5dd58af503fb926bea398838c37419ddbabab3d28080ecc18e96d33cb45",
      "area": 19,
      "links": [
        "signatures-use-named-types"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 4020,
      "hash": "sha256:4528256591acfa6be33872862c41e15dc694d43133ce2cdf047147f03f2a600f",
      "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"
      ]
    },
    {
      "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": 3317,
      "hash": "sha256:e8a6ec811592d0787b8684fecf340ce81d3e5c80d07fb4e1d153aeaa05774353",
      "area": 19,
      "links": [
        "arithmetic-and-comparison",
        "objects",
        "ranges",
        "standard-library",
        "the-standard-operator-table",
        "time-types",
        "zones-and-local-times"
      ]
    },
    {
      "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": []
    },
    {
      "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"
      ]
    },
    {
      "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": 4688,
      "hash": "sha256:05886a663ac0efd991fd53fe46489c5f53cbe48891469dbdf096566206f59b0b",
      "area": 19,
      "links": [
        "built-in-types",
        "creating-values",
        "enums",
        "every-standard-type-meets-one-contract",
        "expressions-and-operators",
        "language-gaps-this-page-depends-on",
        "locales",
        "named-types",
        "numbers",
        "one-input",
        "showing-dates-and-times-to-people",
        "standard-library",
        "time-types"
      ]
    },
    {
      "id": "text-formats",
      "kind": "topic",
      "title": "Text formats",
      "summary": "Four standard types hold text with structure:",
      "tokens": 3790,
      "hash": "sha256:ed2ead22c08eb9bc986d0ab81ae0ca91c2e85934c959ee9d6672ec1c5083d11f",
      "area": 19,
      "links": [
        "collections",
        "email",
        "enums",
        "locales"
      ]
    },
    {
      "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": 4112,
      "hash": "sha256:460650ec40f2bca2165cb656b4ebfdd510cc3fdfe671df34198e6a7ae651454f",
      "area": 19,
      "links": [
        "built-in-services",
        "checking-values-before-the-app-starts",
        "encrypted-fields",
        "external-services",
        "identity",
        "language-gaps-this-page-depends-on",
        "secrets",
        "signing-keys"
      ]
    },
    {
      "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": 3555,
      "hash": "sha256:e6d2e06c2ebbec1d1b46b6b88097d338d27e7969e96be73f4d523a1dfbfa5785",
      "area": 19,
      "links": [
        "language-gaps-this-page-depends-on",
        "policy",
        "secret-values",
        "the-standard-types"
      ]
    },
    {
      "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": 2726,
      "hash": "sha256:a4b4d872cd6c2d2233b93e42506b228dc853d757c196ef8ece04fd88162906e1",
      "area": 19,
      "links": [
        "encrypted-fields",
        "language-gaps-this-page-depends-on",
        "randomness",
        "secrets",
        "starting-and-ending-a-session",
        "what-the-graph-and-production-evidence-add"
      ]
    },
    {
      "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": 4054,
      "hash": "sha256:e143be6bcf32a81ad90b0d2c7c3ca472e39d334fbf296439c046d5f1a5e6455e",
      "area": 19,
      "links": [
        "hashing-and-cryptography",
        "passkeys",
        "values-never-change"
      ]
    },
    {
      "id": "randomness",
      "kind": "topic",
      "title": "Randomness",
      "summary": "`random` gives your app random tokens, codes, whole numbers, shuffles and samples.",
      "tokens": 1331,
      "hash": "sha256:b74ee019d97aa80a7b2df9a4abcf87a1d3ec904eda833e8d1c655a422adfd42f",
      "area": 19,
      "links": [
        "debugging-and-review",
        "secret-values",
        "what-the-graph-and-production-evidence-add"
      ]
    },
    {
      "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": 1757,
      "hash": "sha256:26f4f5b57ea8fb2c4ea211aac7645edcfd0a6389bbfbac1f242e6cc185c07560",
      "area": 19,
      "links": [
        "data-formats-json-csv-tsv-and-json-lines",
        "identity",
        "paths-and-placeholders"
      ]
    },
    {
      "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": 2830,
      "hash": "sha256:4fdbb097ad2daa4e9efbdf0ab7cca05c13992fa807ad23a546c99197f878ec73",
      "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"
      ]
    },
    {
      "id": "json",
      "kind": "topic",
      "title": "json",
      "summary": "`json` reads and writes JSON.",
      "tokens": 4200,
      "hash": "sha256:efc36a970c5031cc65b9d1b87a53ea15416bd9e834b1cb71018d97bf19de866b",
      "area": 19,
      "links": [
        "batches-work-over-many-items",
        "configuration-and-time",
        "file-batch-runs",
        "how-failures-reach-the-client",
        "http",
        "logging",
        "magic-links",
        "values-and-types"
      ]
    },
    {
      "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": 2237,
      "hash": "sha256:6afb04629f9a83dbf1f4c820a66889ed0882e0d6733abb28fea49d19697a9b15",
      "area": 19,
      "links": []
    },
    {
      "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": []
    },
    {
      "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": 3613,
      "hash": "sha256:89663087c89d27ba14149beba7fad27f4400f33c82cedf2b3eb1527ef73ced4c",
      "area": 19,
      "links": [
        "external-services",
        "http",
        "marking-personal-fields",
        "software-types",
        "testing"
      ]
    },
    {
      "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": 2847,
      "hash": "sha256:41142c37aac855011e1c1be09f4709e9926d1f92efdfcd24542fa3c33db1deb7",
      "area": 19,
      "links": [
        "files",
        "named-types",
        "telemetry"
      ]
    },
    {
      "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": 2190,
      "hash": "sha256:6b660a20d297c526ef5d03d5e8e9f986da0578906d6bc807102ed6cfa473f6e3",
      "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"
      ]
    },
    {
      "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": 2801,
      "hash": "sha256:9e405504b5144b019d2a09c276053477fc64369a9f70efd30198e6c040b369b1",
      "area": 19,
      "links": [
        "bank-accounts",
        "creating-values",
        "money-and-payments"
      ]
    },
    {
      "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": 3283,
      "hash": "sha256:97ab23129bc29a33ee1f42b7cb6da62049475cc59f580de8983724622026e690",
      "area": 19,
      "links": [
        "match",
        "naming"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 1838,
      "hash": "sha256:11ef5c06eb016d8e1a97f443e39c527eac9c6075ae07693c22ae2023244a2f57",
      "area": 19,
      "links": [
        "groups-with-the-baseline-only"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 2211,
      "hash": "sha256:d1a71400a3fc13f6c1299eae9db6011fc1f8711836b6f4bd75ca00700e78c2e6",
      "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"
      ]
    },
    {
      "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": 2060,
      "hash": "sha256:6d0f94185c3d69c6d9408955b61656abdd47aea6a05421050761a9deeb4f9363",
      "area": 19,
      "links": [
        "ai",
        "ai-built",
        "ai-left-out",
        "embeddings-and-search",
        "external-services",
        "personal-data",
        "the-ai-capability",
        "vector-index"
      ]
    },
    {
      "id": "scenario-applications",
      "kind": "topic",
      "title": "Scenario applications",
      "summary": "Nine kinds of application Jadpo is meant for, what each does, and the operations it uses.",
      "tokens": 1354,
      "hash": "sha256:e45eb22437121c5c9c4855c48080d1e0cb9941c8cad1c857ed7073b8c72937c6",
      "area": 19,
      "links": [
        "arithmetic-and-comparison",
        "counts-sums-and-groups",
        "embeddings-and-search",
        "geospatial",
        "logic-and-bits",
        "objects",
        "safety-and-privacy",
        "standard-library-built",
        "streaming",
        "the-personal-data-report",
        "typed-output",
        "ways-to-sign-in"
      ]
    },
    {
      "id": "language-gaps-this-page-depends-on",
      "kind": "topic",
      "title": "Language gaps this page depends on",
      "summary": "Some operations on this page rely on parts of the language that other pages describe: `for` over a set, `[]` as an empty map, inline functions of two values, maths on `Decimal`, secrets used only as…",
      "tokens": 506,
      "hash": "sha256:89cf09c3ceec5a38c2e5eff8f88076cbec6565adbd27dc0f77aaf97e08ed0aeb",
      "area": 19,
      "links": [
        "external-services",
        "generic-code",
        "named-types",
        "personal-data",
        "standard-library-built"
      ]
    },
    {
      "id": "how-the-five-languages-compare",
      "kind": "topic",
      "title": "How the five languages compare",
      "summary": "If you know TypeScript, a few of the standard library's choices will differ from what you expect:",
      "tokens": 242,
      "hash": "sha256:b670bbd64896cc80f7a48358583efa5f5b309df36e31cf84e79ca13047459ce7",
      "area": 19,
      "links": []
    },
    {
      "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": 467,
      "hash": "sha256:06cb2b26f5426e0557f9571e4eb6febf52476639327b5aeccac18b7832eecb1d",
      "area": 19,
      "links": [
        "ai-built",
        "debugging-and-review",
        "geospatial-built",
        "personal-data",
        "policy",
        "records-and-manifest",
        "tooling"
      ]
    },
    {
      "id": "geospatial",
      "kind": "topic",
      "title": "Geospatial",
      "summary": "Geospatial values say where things are, and what is near or inside what: a bakery's position, the patches it delivers to, the shops within five kilometres of a customer, the pins inside the map a…",
      "tokens": 459,
      "hash": "sha256:260855baf2f14b5786fe8c7f828267ac181e9e2bbec9d557a4a6c16315bd7fc0",
      "area": 20,
      "links": [
        "geometry-operations",
        "geospatial-interop",
        "geospatial-queries",
        "geospatial-storage",
        "geospatial-types",
        "reads-and-writes",
        "storage-types",
        "what-every-operation-follows"
      ]
    },
    {
      "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": 696,
      "hash": "sha256:b680f6cc80402214310855b4d1e9a7406247fe5542c422e72ed1cb5edbaa2b40",
      "area": 20,
      "links": [
        "geospatial-interop",
        "precision-and-determinism"
      ]
    },
    {
      "id": "geometry-operations",
      "kind": "topic",
      "title": "Operations",
      "summary": "The `geo.` operations measure distances, lengths, directions and areas, and say whether one shape touches or holds another:",
      "tokens": 2808,
      "hash": "sha256:a6e56de4cec864b1d7678889fe0b1c61d1491b4e6149ff0762ed5f31536daaa2",
      "area": 20,
      "links": [
        "counts-sums-and-groups",
        "geospatial-left-out",
        "geospatial-queries",
        "objects",
        "precision-and-determinism",
        "predicates-and-shapes",
        "scenario-applications",
        "zones-and-local-times"
      ]
    },
    {
      "id": "predicates-and-shapes",
      "kind": "topic",
      "title": "Predicates and shapes",
      "summary": "The predicates `geo.contains`, `geo.within` and `geo.intersects` answer yes-or-no questions about where things are, and `geo.centroid` and `geo.bounding_box` give a shape a place for its label and a…",
      "tokens": 3054,
      "hash": "sha256:f49c9cc675708e26d9aba5075d4f33615c2cc885b36e961bcf8322d844bde800",
      "area": 20,
      "links": [
        "every-boundary-through-the-contract",
        "geospatial-types",
        "objects"
      ]
    },
    {
      "id": "geospatial-storage",
      "kind": "topic",
      "title": "Storage",
      "summary": "A geometry field of an entity is stored in one PostgreSQL column of PostGIS's `geography` type.",
      "tokens": 2868,
      "hash": "sha256:eb9c4213669d6d435a5fb0cde0dcc8d53d5b970fdf24a2475cfe7242bc4246b8",
      "area": 20,
      "links": [
        "ai",
        "data",
        "geospatial-interop",
        "geospatial-types",
        "indexes",
        "migrations",
        "precision-and-determinism",
        "queries-on-entities-in-redis",
        "storage-types"
      ],
      "aliases": [
        "storage"
      ]
    },
    {
      "id": "geospatial-queries",
      "kind": "topic",
      "title": "Queries",
      "summary": "You find records by where they are with a `geo.` call as a query's `where:` condition: the bakeries within six kilometres of a customer, the pins inside a map's view, the patches that deliver to a…",
      "tokens": 3387,
      "hash": "sha256:1fae957406ba736052a3da40625f229f6f3ced9bf421a5c85dc94d512bbd9a40",
      "area": 20,
      "links": [
        "filters",
        "geometry-operations",
        "reads-and-writes"
      ],
      "aliases": [
        "queries"
      ]
    },
    {
      "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": 1503,
      "hash": "sha256:0b67cac3a8213a4be8d543604156fec73bb72b5c124acd816ad170762ae4e6bb",
      "area": 20,
      "links": [
        "geometry-operations",
        "geospatial-queries",
        "numbers"
      ]
    },
    {
      "id": "geospatial-interop",
      "kind": "topic",
      "title": "Interop",
      "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": 4329,
      "hash": "sha256:becae5d53a17518b54b75d4e8e10538f88e87a9ea19f29c46e14c07972f49526",
      "area": 20,
      "links": [
        "a-query-giving-a-map-layer",
        "geospatial-types",
        "output-and-status",
        "precision-and-determinism",
        "predicates-and-shapes",
        "structured-values"
      ],
      "aliases": [
        "interop"
      ]
    },
    {
      "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:7d45e801360097661d54c43e82758a120bfeeaa9b5db416b54d207f402cd1b96",
      "area": 20,
      "links": [
        "external-services",
        "geospatial-queries",
        "scenario-applications",
        "what-every-geospatial-operation-follows"
      ]
    },
    {
      "id": "geospatial-built",
      "kind": "topic",
      "title": "What is built: Geospatial",
      "summary": "Which parts of Geospatial are built, and what the rest waits on",
      "tokens": 232,
      "hash": "sha256:f50eeb500206a4a672df0266a0d356218c4f7ef857450fda598c9d8f290ad85c",
      "area": 20,
      "links": [
        "counts-sums-and-groups",
        "indexes",
        "queries-on-entities-in-redis"
      ]
    },
    {
      "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": 505,
      "hash": "sha256:9e8ec7c6a4c506eb933c16a23195bd10cb37b2c18419a7f20ee382100dd713e1",
      "area": 21,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "the-ai-capability",
      "kind": "topic",
      "title": "The ai capability",
      "summary": "Your code asks a model through `ai`, never through a provider's own operations.",
      "tokens": 3451,
      "hash": "sha256:55894cbda313b0312ff311a4488cadb7711da8cd1f896b67886367eda33f2a94",
      "area": 21,
      "links": [
        "ai-tests",
        "all-or-nothing-actions-and-concurrent-changes",
        "calling",
        "capabilities",
        "failures",
        "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "prompts-as-files",
      "kind": "topic",
      "title": "Prompts as files",
      "summary": "A prompt is what your app sends a model.",
      "tokens": 2510,
      "hash": "sha256:ecbf026b7b8332c24e5444ee6797007076a1845284494c2edcedc0cae855f657",
      "area": 21,
      "links": [
        "project-layout",
        "safety-and-privacy",
        "secret-values",
        "secrets",
        "the-manifest",
        "what-the-compiler-checks-of-translations"
      ]
    },
    {
      "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": 3309,
      "hash": "sha256:4180b35af45156f1b661b7a1f54906f50bcd30a7311ceccbdb608356f2814f3a",
      "area": 21,
      "links": [
        "naming",
        "output-and-status"
      ]
    },
    {
      "id": "vector-index",
      "kind": "topic",
      "title": "The vector index",
      "summary": "You don't write an index for a vector search.",
      "tokens": 1416,
      "hash": "sha256:7db1025e486d333afeac0a588af4a3c07349f61142dbfc14d97ca6b23d7acc7e",
      "area": 21,
      "links": [
        "declining-a-judgement-call",
        "indexes",
        "lifecycle",
        "query.nearest_exact"
      ],
      "aliases": [
        "the-index"
      ]
    },
    {
      "id": "without-pgvector",
      "kind": "topic",
      "title": "Without pgvector",
      "summary": "Vectors need PostgreSQL with the pgvector extension, which the major hosted services offer.",
      "tokens": 1000,
      "hash": "sha256:c502ac41a38d57cc38ac179717b619ff6dda72901cb834129c1f0d0be5f98f17",
      "area": 21,
      "links": [
        "command-errors",
        "geospatial"
      ]
    },
    {
      "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": 966,
      "hash": "sha256:4f9e8ce0a77b2d827701f79c2f2212e886fa130ef938dc04b3b44eccf4ea5cb3",
      "area": 21,
      "links": [
        "safety-and-privacy"
      ]
    },
    {
      "id": "keeping-embeddings-current",
      "kind": "topic",
      "title": "Keeping embeddings current",
      "summary": "When a record's text changes, its embedding must be made again.",
      "tokens": 341,
      "hash": "sha256:20d78aa3dc45dddbe27184b43ab4dfb63bcaa99cb0019309f617aee49793282b",
      "area": 21,
      "links": [
        "batches-work-over-many-items",
        "subscribers"
      ]
    },
    {
      "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": 2811,
      "hash": "sha256:cafeff5e85b9695931c9b0ffe2f03bb08fb0bf016a67c8c595dff826645edc6d",
      "area": 21,
      "links": [
        "acceptances",
        "ai-built",
        "ai-types",
        "counters-and-other-one-step-updates",
        "erasure",
        "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"
      ]
    },
    {
      "id": "ai-tests",
      "kind": "topic",
      "title": "Testing AI calls",
      "summary": "A test never reaches a real model.",
      "tokens": 2516,
      "hash": "sha256:f5ff54f6e0a4cf03b25e8c1e578378d3877486b99ec6fb45df7c41df0e91ec11",
      "area": 21,
      "links": [
        "ai-left-out",
        "controlling-time",
        "embeddings-and-recordings",
        "every-error-has-the-same-shape",
        "fakes-and-the-development-call-log",
        "fakes-for-integrations",
        "recording-an-answer",
        "recordings",
        "tests-and-fakes",
        "the-ai-capability"
      ],
      "aliases": [
        "tests"
      ]
    },
    {
      "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"
      ]
    },
    {
      "id": "generating-its-fake-and-the-local-driver",
      "kind": "topic",
      "title": "Generating, its fake and the local driver",
      "summary": "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": 1944,
      "hash": "sha256:e25e22b7548e42014a5c00157cc089d287bee8e31ca475a31043fd629293d995",
      "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"
      ]
    },
    {
      "id": "streaming",
      "kind": "topic",
      "title": "Streaming",
      "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": 976,
      "hash": "sha256:9193f7ca9eb9339e5acb06d1efdafa211f08213afd763ae106361b7b72379e4f",
      "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"
      ]
    },
    {
      "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": 1563,
      "hash": "sha256:b0513d81b7c4e9f05c9c1902be856eb26d84d5bf477e490ce9f5847b3ec83c82",
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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"
      ]
    },
    {
      "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": 804,
      "hash": "sha256:83db2ba36ba195708fa930226b228e4dc28610dd49e69ffcc77b19981e38b54e",
      "area": 21,
      "links": [
        "ai-built",
        "field-restrictions",
        "marking-personal-fields",
        "safety-and-privacy"
      ]
    },
    {
      "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": 2550,
      "hash": "sha256:3a4c690d9b04e994cf9f1386746a53f9cca528ec96293909f5c2f2459f0c8222",
      "area": 21,
      "links": [
        "generating-its-fake-and-the-local-driver",
        "the-ai-capability"
      ]
    },
    {
      "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": []
    },
    {
      "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": 240,
      "hash": "sha256:58f891973280e7027d71e217f0cd0ee36fe612a580e28dfe9c5dcd942d06c94e",
      "area": 21,
      "links": [
        "acceptances",
        "encrypted-fields",
        "the-personal-data-report"
      ]
    },
    {
      "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": "AI usage's database couldn't be read",
      "tokens": 93,
      "hash": "sha256:d6cdc35ae2a53b6a6703fda74f05c1449551af6dbd126cc0dd8806545d5c34c4",
      "area": 14,
      "links": [
        "command-errors",
        "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.serve_openapi_invalid",
      "kind": "error",
      "title": "api.serve_openapi_invalid",
      "summary": "API serve_openapi is not true or false",
      "tokens": 227,
      "hash": "sha256:ca0ced2cc72e0846f51f0c72cdc3e140659448c682c6d17b9dee4e4c999eb08d",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "api.setting_unknown",
      "kind": "error",
      "title": "api.setting_unknown",
      "summary": "API setting is not one an API takes",
      "tokens": 175,
      "hash": "sha256:6a853787afd1aac1ee001fb6ff0440a444bb49fac1c261ed97c2d12466fc0878",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "cli.ai_arguments",
      "kind": "error",
      "title": "cli.ai_arguments",
      "summary": "AI command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:8870a6e3afed3b2a70816d76f393544ceb88f7c684cb0c2a9ba773485352491d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.api_arguments",
      "kind": "error",
      "title": "cli.api_arguments",
      "summary": "Api command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:b4b9882f9c9aa6e1305aac97cbfa89dbec5d4bb6b0d1ee38b5fda4243b5b3a80",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.build_arguments",
      "kind": "error",
      "title": "cli.build_arguments",
      "summary": "Build command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:ae4f62999f870e4861aa6a62e681d0bc5cf89aa32cd2435f1be3d4ebe0db8556",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.calls_arguments",
      "kind": "error",
      "title": "cli.calls_arguments",
      "summary": "Calls command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:f33105aa73f6b3dc9fb1d9aabf253d12196b0166b8a63e5bacb4361032748ef6",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.check_arguments",
      "kind": "error",
      "title": "cli.check_arguments",
      "summary": "Check command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:96b9d6e206ffda7b40ac55f8e53ffadebb82588c32d933865096b3ae8e8daca6",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.completions_arguments",
      "kind": "error",
      "title": "cli.completions_arguments",
      "summary": "Completions command has invalid arguments",
      "tokens": 95,
      "hash": "sha256:634325cc9fcec13ea2830f9ecc87a5a4f8e073935a64e7312284248b52805d25",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.config_arguments",
      "kind": "error",
      "title": "cli.config_arguments",
      "summary": "Config command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:9f506f1d7d3ab892947b049039502f62251a978a4afd29ec1fdd6257b0ed2adc",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.config_prompt_failed",
      "kind": "error",
      "title": "cli.config_prompt_failed",
      "summary": "Secure configuration prompt failed",
      "tokens": 93,
      "hash": "sha256:e36a8bb7cd50fee9e2e99a440abf49aaa802b6f0e0b7805f89f6a8bc20a36510",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.config_tty_required",
      "kind": "error",
      "title": "cli.config_tty_required",
      "summary": "Configuration entry requires an interactive terminal",
      "tokens": 98,
      "hash": "sha256:5ea1bd325b0a6cedeeaffa41e06905e3edd71f08e0320c942dc1b48a7449ab7b",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.declines_arguments",
      "kind": "error",
      "title": "cli.declines_arguments",
      "summary": "Declines command has invalid arguments",
      "tokens": 94,
      "hash": "sha256:e804a783811a1cabfc9ebc72bbb52deb83ffa2f9099ad8fc15e9c4e027b59f69",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.deliveries_arguments",
      "kind": "error",
      "title": "cli.deliveries_arguments",
      "summary": "Deliveries command has invalid arguments",
      "tokens": 95,
      "hash": "sha256:c69170bf25b4a6d2bd20da55afc391c47b514feeb9bfc88b026eddb2069127b5",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_arguments",
      "kind": "error",
      "title": "cli.dev_arguments",
      "summary": "Dev command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:48294ff0cc35c4681812115a0d23fc500f983b0b4dc3e8e883e6d2e24bfa70eb",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_port_invalid",
      "kind": "error",
      "title": "cli.dev_port_invalid",
      "summary": "Development port is invalid",
      "tokens": 91,
      "hash": "sha256:70c9df7a9f30992c73a42af052c53cb38c686f52c38dc7bc7e8f9be7390d486d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.dev_start_failed",
      "kind": "error",
      "title": "cli.dev_start_failed",
      "summary": "Development server could not start",
      "tokens": 92,
      "hash": "sha256:8416304ad0c6356ad50c230077e5c8ef06b44ef8e6189dab2978dc2250036fdc",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.email_arguments",
      "kind": "error",
      "title": "cli.email_arguments",
      "summary": "Email command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:67e906a61a4f4b2b7105116d4a34b3381c0388439070e4eab88942bdbc621cc1",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.fix_arguments",
      "kind": "error",
      "title": "cli.fix_arguments",
      "summary": "Fix command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:5fca8c05efe3b8288318114ebb2eaf69dcaaad8038b36eac404f8ca7bc4bb474",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.fmt_arguments",
      "kind": "error",
      "title": "cli.fmt_arguments",
      "summary": "Format command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:d39d789946d76da929d0ff400d733ec236f3c6e0e1d91f0d679a5ea98ed0ec06",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.help_arguments",
      "kind": "error",
      "title": "cli.help_arguments",
      "summary": "Help command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:cac0974738fd8e30f52ce8b20588ed7e2a011e9adc95dcac5c0248e156d49bae",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.lsp_arguments",
      "kind": "error",
      "title": "cli.lsp_arguments",
      "summary": "Language-server command has invalid arguments",
      "tokens": 94,
      "hash": "sha256:2f4243864a6a4c70fcaf81ec2feb5b9d1c9ab5569756be1f8cf4cb5d8cab4713",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.migrate_arguments",
      "kind": "error",
      "title": "cli.migrate_arguments",
      "summary": "Migrate command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:fde6204d991e01cbfb6db4521c775f31e3dec586604ebc2d1a201e28d88a7195",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.new_arguments",
      "kind": "error",
      "title": "cli.new_arguments",
      "summary": "New command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:4f9b081bd9758e07c00a16c89a1b1d17c8955478d0db8fbbb0ae3c7f343ce93a",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.package_arguments",
      "kind": "error",
      "title": "cli.package_arguments",
      "summary": "Package command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:321ed0de362de09bb56a57e16ae8d1e1681ea4c9c90770b09cc6f385ef8d40e7",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.package_not_openapi",
      "kind": "error",
      "title": "cli.package_not_openapi",
      "summary": "Description to import is not an OpenAPI 3 document",
      "tokens": 97,
      "hash": "sha256:7fe4eec69ffaa9bd6bca6f9f96de7fa8d88e29ddc0a529e8c57eb2919524122a",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.package_unreadable",
      "kind": "error",
      "title": "cli.package_unreadable",
      "summary": "Description to import could not be read as JSON",
      "tokens": 96,
      "hash": "sha256:d17ee3cb66a0de69b09f3a681e75418bbc4d663b9ce32e51f1ba9af3489a19b8",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.presentation_arguments",
      "kind": "error",
      "title": "cli.presentation_arguments",
      "summary": "Terminal presentation option is invalid",
      "tokens": 95,
      "hash": "sha256:0726b3cc2005d775d003f4dd51bb74095c867d3d11c7da7cc6fc232bf7fc2fce",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.records_arguments",
      "kind": "error",
      "title": "cli.records_arguments",
      "summary": "Records command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:e725eb584b7b6b37fe3aab66d8ab55a9cbe3ba675e986d6b18d2ea334f0e1867",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.routes_arguments",
      "kind": "error",
      "title": "cli.routes_arguments",
      "summary": "Routes command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:f94424757ce1ed50d0bc078eb17cbb0abe65a61d208d0bc651a5435806b32325",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.runs_arguments",
      "kind": "error",
      "title": "cli.runs_arguments",
      "summary": "Runs command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:3d9f4d1f554aeb8ff49f6be8f1397948927da1e16140ff0fbab31897e8f2e006",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.schedules_arguments",
      "kind": "error",
      "title": "cli.schedules_arguments",
      "summary": "Schedules command has invalid arguments",
      "tokens": 94,
      "hash": "sha256:faaea01be8669f087ab0c3d9d3c373334e10b265e2d8f14123a8bab069a4c033",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.sql_arguments",
      "kind": "error",
      "title": "cli.sql_arguments",
      "summary": "Sql command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:3c6e54e574e0b7f64145b85e100e46ef1cefbad111539cf3c144301fa16991d0",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.suggest_arguments",
      "kind": "error",
      "title": "cli.suggest_arguments",
      "summary": "Suggest command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:76a9d4786d6618b5f0b4204fba302c03d9f533bb3f56baa6dac9d7912557af2d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.test_arguments",
      "kind": "error",
      "title": "cli.test_arguments",
      "summary": "Test command has invalid arguments",
      "tokens": 92,
      "hash": "sha256:ecc0bee8956b2a2a308c6256b20b413c7f1208055587a9c5674fca6a19b55e98",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.toolchain_arguments",
      "kind": "error",
      "title": "cli.toolchain_arguments",
      "summary": "Toolchain command has invalid arguments",
      "tokens": 94,
      "hash": "sha256:507eaf5b9bd1d0887ffae9683bf8a7a3899423507a127477a664436576101a50",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.translations_arguments",
      "kind": "error",
      "title": "cli.translations_arguments",
      "summary": "Translations command has invalid arguments",
      "tokens": 96,
      "hash": "sha256:3e521daa9093e7818cf45fe6ebaccd0f5e06fb6616c472e5fe98da680d9a4ec8",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.unknown_command",
      "kind": "error",
      "title": "cli.unknown_command",
      "summary": "Unknown Jadpo command",
      "tokens": 89,
      "hash": "sha256:9015dd2afcd19cf1572dc1dfd196720874c11ec29ccfa042628b0d71d151f817",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.unknown_flag",
      "kind": "error",
      "title": "cli.unknown_flag",
      "summary": "Unknown flag",
      "tokens": 86,
      "hash": "sha256:453f1dff7721387bf4aafcfa2d968d6eadc163de5e85e1627031f395e19b9a06",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.version_arguments",
      "kind": "error",
      "title": "cli.version_arguments",
      "summary": "Version command has invalid arguments",
      "tokens": 93,
      "hash": "sha256:3bb61f615c1accad704b50b71c61c2e722a19625730e5316b45928bce87218ba",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "cli.why_arguments",
      "kind": "error",
      "title": "cli.why_arguments",
      "summary": "Why command has invalid arguments",
      "tokens": 91,
      "hash": "sha256:08adf4beb9a661864aff9a91592b958621566545c9c8600dbcbc0a4a1a16899c",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.binding_empty",
      "kind": "error",
      "title": "configuration.binding_empty",
      "summary": "Setting names an empty environment variable",
      "tokens": 187,
      "hash": "sha256:073f83940256259ea778a95b2dbdbd1ad98e6cff73e6aaacbbe6de0ff807ef32",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.binding_invalid",
      "kind": "error",
      "title": "configuration.binding_invalid",
      "summary": "Setting names a variable that is not in capitals",
      "tokens": 192,
      "hash": "sha256:9d307930fc1da9ff8f1970d532843d1ab64bfd49b0810343da28f604b92f3ccc",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.client_address_duplicate",
      "kind": "error",
      "title": "configuration.client_address_duplicate",
      "summary": "Client address is declared twice",
      "tokens": 251,
      "hash": "sha256:a4e700aba2de3e8f430423980eb7c9d5ab788feccc80a7f45a173afb3753ed5b",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 261,
      "hash": "sha256:c7f3ae3814e6ae38e22d58e4eef0a7d029a3f1c015139ee53b1fdf100b339720",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 234,
      "hash": "sha256:c32d09dd541e13fb223833073d9233fb90ed7c5edd844f397a92bb340999d8ed",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 227,
      "hash": "sha256:e3242f08dc61342698e33a64045c65ac38de27fbc1bc92dbd82f97047e3567e7",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 266,
      "hash": "sha256:79d049f346f67e1d6401b9a8d18f8b4ed3199c706be84bff3d36b48e6bfc1593",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.default_invalid",
      "kind": "error",
      "title": "configuration.default_invalid",
      "summary": "Setting value breaks its type's rules",
      "tokens": 250,
      "hash": "sha256:0c1c6a8bccc3a14e9c316e396270a1aabb0cb78e8c42069b77f1dd3be647ad98",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.default_literal_required",
      "kind": "error",
      "title": "configuration.default_literal_required",
      "summary": "Setting value is not a literal",
      "tokens": 542,
      "hash": "sha256:015809ef66aa2f27aad2564fbf0050efdf8020180117fa77886c159b43e42723",
      "area": 10,
      "links": [
        "configuration-and-time",
        "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": 193,
      "hash": "sha256:8ffa268a6e828747419869589aa486bea744b92893a8e23b4a8599e80ba19ea5",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.duplicate_binding",
      "kind": "error",
      "title": "configuration.duplicate_binding",
      "summary": "Two settings read the same environment variable",
      "tokens": 244,
      "hash": "sha256:0769d0278ec704b5adf6b27166ceed737d4ccbfed27979aa554a32ef3bf255d8",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.duplicate_option",
      "kind": "error",
      "title": "configuration.duplicate_option",
      "summary": "Setting option is given twice",
      "tokens": 206,
      "hash": "sha256:41feabad1b409c8f034d2ee412ae75c2ecf0dc6c7f1ab7e068e7bad618e1139c",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.expected_field",
      "kind": "error",
      "title": "configuration.expected_field",
      "summary": "Configuration holds something that is not a setting",
      "tokens": 186,
      "hash": "sha256:e2fa90b2c93806ac1e527370e76413b743aeae4a972dece9d455f150a3519c1e",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.field_unknown",
      "kind": "error",
      "title": "configuration.field_unknown",
      "summary": "Configuration has no setting with this name",
      "tokens": 408,
      "hash": "sha256:b740b29b351d4b8a5f43a4f9f5086dc75eeabfb643a85f31c884bff1742a0ba0",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.local_changed",
      "kind": "error",
      "title": "configuration.local_changed",
      "summary": "Local configuration changed during the update",
      "tokens": 97,
      "hash": "sha256:041b380c37f5f21d31390e7a98336929f37ca6259bdb7a7f1b2cd62d120b846d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.local_invalid_encoding",
      "kind": "error",
      "title": "configuration.local_invalid_encoding",
      "summary": "Local configuration is not UTF-8 text",
      "tokens": 97,
      "hash": "sha256:1953f4165ec62220c08ae28a060fceec9fb5e545297fa97c9c4fc48261a172f7",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.local_read_failed",
      "kind": "error",
      "title": "configuration.local_read_failed",
      "summary": "Local configuration could not be read",
      "tokens": 96,
      "hash": "sha256:39dde52bfbb9bd0a58b5e7f9b8ffb9a821bd68354b97914e53e24f31f5e82739",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.local_syntax",
      "kind": "error",
      "title": "configuration.local_syntax",
      "summary": "Local configuration syntax is invalid",
      "tokens": 95,
      "hash": "sha256:a8990eb1bc487acc6b255c99e5e06438e83ebb70df3bd6ae69049a6b39d0487d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.local_unsafe_target",
      "kind": "error",
      "title": "configuration.local_unsafe_target",
      "summary": "Local configuration target is unsafe",
      "tokens": 96,
      "hash": "sha256:87bcc634357566c0a8a5a1f659c5332164e1042d2e43502931b28c03e9dd1b49",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.local_write_failed",
      "kind": "error",
      "title": "configuration.local_write_failed",
      "summary": "Local configuration could not be saved",
      "tokens": 96,
      "hash": "sha256:c1676649ac963a178de4fa1fa13ad59d44219630fa6e5cf0e6799f023918cda3",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.move_name_taken",
      "kind": "error",
      "title": "configuration.move_name_taken",
      "summary": "A setting already has the constant's name",
      "tokens": 96,
      "hash": "sha256:71431507ca3179750d7d78e641e77580558b169a45e4ebf5d65bb3c60d858153",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.move_read_unsupported",
      "kind": "error",
      "title": "configuration.move_read_unsupported",
      "summary": "Constant is read where a setting can't be",
      "tokens": 98,
      "hash": "sha256:a92536de7ec2d80a28713554527d46aeadfbd9761168d3a66539f9c23aa6a2ae",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.move_type_unsupported",
      "kind": "error",
      "title": "configuration.move_type_unsupported",
      "summary": "Constant's type can't be a setting",
      "tokens": 96,
      "hash": "sha256:40927c2fbf2ff1860be2cdc99dc7ca34f85927f9fbb732edb74774a706de6224",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.multiple_declarations",
      "kind": "error",
      "title": "configuration.multiple_declarations",
      "summary": "Configuration is declared more than once",
      "tokens": 231,
      "hash": "sha256:0d7f8cd6636488ce16bc11b32670fc462703f8c2d6d5db537b5e725be91cc582",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.secret_default",
      "kind": "error",
      "title": "configuration.secret_default",
      "summary": "Secret setting has a value in source",
      "tokens": 245,
      "hash": "sha256:196910ad62c4fd83e3f6aae3785cc4fc3838a39fd326a0e98dd80b7af04a1c22",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.secret_flow",
      "kind": "error",
      "title": "configuration.secret_flow",
      "summary": "Secret setting is used where it could leave the server",
      "tokens": 325,
      "hash": "sha256:bd8caee88f740b5e7ee88f7d32896354b7611ff0aa7703c932355b3a669d14d7",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.secret_invalid",
      "kind": "error",
      "title": "configuration.secret_invalid",
      "summary": "Secret option is not true or false",
      "tokens": 183,
      "hash": "sha256:eaf973e84fbabc6b6c260edf3250883d419d8db1e4690a93738aaeb21ab34dc9",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.test_value_missing",
      "kind": "error",
      "title": "configuration.test_value_missing",
      "summary": "Setting read by a test has no value in tests",
      "tokens": 282,
      "hash": "sha256:bbf816be774f86d13b55bed776f852f7775d38b67d839aaa8d11de73c6e16a69",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.type_unsupported",
      "kind": "error",
      "title": "configuration.type_unsupported",
      "summary": "Setting type cannot be read from one variable",
      "tokens": 256,
      "hash": "sha256:f2217163a04a38a8fd319c4de4f3d5419623045ac02dade8ee3727c9d970e73a",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.unknown_option",
      "kind": "error",
      "title": "configuration.unknown_option",
      "summary": "Setting option is not one a setting takes",
      "tokens": 211,
      "hash": "sha256:6d186953c004597cbccf4062ccf2748cc1b97f0a8a5d4f87fbe7e5c41aca6c10",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.url_type",
      "kind": "error",
      "title": "configuration.url_type",
      "summary": "Connection address is not a setting of the type its driver needs",
      "tokens": 253,
      "hash": "sha256:478bc29644ad1dd6d4fab947861beda98ea626ead5912a7bd13f97224cd88573",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "configuration.value_invalid",
      "kind": "error",
      "title": "configuration.value_invalid",
      "summary": "Configuration value is invalid",
      "tokens": 93,
      "hash": "sha256:ad51d7ae37ef996a334e011a2cf3a8ad842f5b99ed82fe2500985125523fde00",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "configuration.value_missing",
      "kind": "error",
      "title": "configuration.value_missing",
      "summary": "Required configuration is missing",
      "tokens": 94,
      "hash": "sha256:df8fcb0ab7c65aa54dd6117e61af64cb149fed456c775225c2d192c6d74007c4",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "conform.failed",
      "kind": "error",
      "title": "conform.failed",
      "summary": "Package's answers don't conform to its capability",
      "tokens": 95,
      "hash": "sha256:f91a25b24b835283523d149124e452ac40854db0117cafc2caf16e5dc942c01a",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "conform.refused",
      "kind": "error",
      "title": "conform.refused",
      "summary": "Conformance suite can't run against the provider's API",
      "tokens": 96,
      "hash": "sha256:c4f12d4513c66d9e0ef8e9fee014bfe6c51d31c660d9a5542e0a34ab09b488e0",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "connection.domain_not_listed",
      "kind": "error",
      "title": "connection.domain_not_listed",
      "summary": "Action calls a connection its domain isn't listed on",
      "tokens": 331,
      "hash": "sha256:1e1ea697c170f413b8e22e0dec7fd3d8bf6e2f48f734c912c05547b75e8b00be",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": 526,
      "hash": "sha256:569652da666192279864e7abe4ca2f6ee1f6a63829812b4bd1d7919fac3cbbd2",
      "area": 11,
      "links": [
        "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": 225,
      "hash": "sha256:8fdb8ed2748477d8a855ea05c1b27e5f0939904a7d19156151558d9ae70e4ea3",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.conflict_cannot_break",
      "kind": "error",
      "title": "data.conflict_cannot_break",
      "summary": "Conflict mapping for a rule the write can't break",
      "tokens": 359,
      "hash": "sha256:227dd75a7bd9897fbe3cdf9240b010add90f6f81121469fbe299ae97dd103d21",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": "Write can break a rule its `conflict:` doesn't map",
      "tokens": 285,
      "hash": "sha256:f2853869749faf2ece98b35e5ac9b651aa7c4587b6fcd5a6c549d698851666ac",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.duplicate_rule",
      "kind": "error",
      "title": "data.duplicate_rule",
      "summary": "Unique rule or index repeats another",
      "tokens": 234,
      "hash": "sha256:bfd122bb3d6efc5dd5d52a51012643963050c6723ae43ae34ee50b0995d9631e",
      "area": 5,
      "links": [
        "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": 183,
      "hash": "sha256:0617a4c4ab31ea3915a0ae214c0f0b71d0e97c0976aefde2efd6e31f301a230d",
      "area": 5,
      "links": [
        "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": 193,
      "hash": "sha256:aec8e7cadea3aba65529ca22ecc0b9ddebbe27871451ff8f983c96c8e885a284",
      "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": 338,
      "hash": "sha256:b0a42bedece05c0f6d53bf5347a8b267eaea91ee375174d29131ddea14d54b79",
      "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": 192,
      "hash": "sha256:f98e368c919b079da5ca965703df4fe33a0bed20aba158aec4bd8ad2f09c5c91",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.identity_missing",
      "kind": "error",
      "title": "data.identity_missing",
      "summary": "Entity has no `id` field",
      "tokens": 166,
      "hash": "sha256:81d1a7203d82ff4d7235bf8cc81c917aeb23149763eda26d868088f720c3ac9e",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.identity_type",
      "kind": "error",
      "title": "data.identity_type",
      "summary": "Entity's `id` is not a required `Uuid`",
      "tokens": 146,
      "hash": "sha256:f54eece9c6293b68d65ff69c6f1e6665dc6d5acd5ceb6f09752517b11f26070d",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_condition",
      "kind": "error",
      "title": "data.lifecycle_condition",
      "summary": "Lifecycle condition isn't a test of the record's own fields",
      "tokens": 303,
      "hash": "sha256:d49ad14cbe71a843aa6ae35e3085a65d3f3fece8e6f9158beba4a41e2ef2d39a",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_hard_delete",
      "kind": "error",
      "title": "data.lifecycle_hard_delete",
      "summary": "Delete would remove a record its lifecycle keeps",
      "tokens": 325,
      "hash": "sha256:974a6b966dadad7809641a637e17153c23beef8b6f79fa0537a762af15f11280",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.lifecycle_initial_required",
      "kind": "error",
      "title": "data.lifecycle_initial_required",
      "summary": "Required field a transition sets has no starting value",
      "tokens": 303,
      "hash": "sha256:1da301a5ef31131f4ac97796ebb47cbead5dcc4925cf75b1d82995ef238a1b46",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_owned_field",
      "kind": "error",
      "title": "data.lifecycle_owned_field",
      "summary": "Write sets a field only the lifecycle changes",
      "tokens": 322,
      "hash": "sha256:2c358e83d871be7f8929aa947c9f47c2726d2bda43556a58479b456ba0eac99d",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "data.lifecycle_purge_after",
      "kind": "error",
      "title": "data.lifecycle_purge_after",
      "summary": "Purge's `after:` isn't a positive duration",
      "tokens": 247,
      "hash": "sha256:dbce05d7b0dde179370ff3b0316fe83bf9054a453ec953b02d1f0e0efce350a7",
      "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": 239,
      "hash": "sha256:c74cb2ee71f9bd49494b2c9bc8cad194777827ec2f3f0a9386835645743a4d85",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_purge_visible",
      "kind": "error",
      "title": "data.lifecycle_purge_visible",
      "summary": "Lifecycle purges records but hides none",
      "tokens": 276,
      "hash": "sha256:5a8de3a360583e313ee706cc51be5dc58805a6e4ab0c144eac214e1f29c04523",
      "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": 230,
      "hash": "sha256:9325d1f67eae817bc5a8cfdaa297091fb382780bee3db16c8ff1f81ac3cb6e6d",
      "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": 261,
      "hash": "sha256:408b7fe63a1b9b7f1048440f75d2cc1594b51119af26ed77ceeefd1b8d5e425b",
      "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": 214,
      "hash": "sha256:0732035e36e400ef20652e51806c34389562eeb03bfd854f17e89ce1d0a7442e",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.lifecycle_value",
      "kind": "error",
      "title": "data.lifecycle_value",
      "summary": "Lifecycle sets a value that isn't fixed",
      "tokens": 277,
      "hash": "sha256:e733d1cee132cef2d4317440012ef9f49064516f47d37e7afc52f2c7f7e23f5d",
      "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": 244,
      "hash": "sha256:b07469e3fb18aa07dbd78bf7da2cd5e2d7845c948f957a12bca97edefbc42d46",
      "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": 183,
      "hash": "sha256:1c1a4ef689f1c240df68023f7663fc6e037ab03d6d71644089226ce5613f6750",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.on_delete_required",
      "kind": "error",
      "title": "data.on_delete_required",
      "summary": "Reference does not say what deleting its record does",
      "tokens": 229,
      "hash": "sha256:676f81c0cf99bdc7d283578315fe3bb0ae172743a26637400a06ce265ae94eab",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "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.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": "Reference points at an entity in another store",
      "tokens": 237,
      "hash": "sha256:8be92375ec2250a31a6b749cfac757e350c70a8801e49b40a6cd62e8571b9bba",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.reference_cycle",
      "kind": "error",
      "title": "data.reference_cycle",
      "summary": "Required references form a cycle",
      "tokens": 243,
      "hash": "sha256:3902d19b2eec11fbc99b61f8a4730456b858079a0ea3f44d7bff15fe27c3b95b",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.repeated_field",
      "kind": "error",
      "title": "data.repeated_field",
      "summary": "Unique rule or index lists a field twice",
      "tokens": 166,
      "hash": "sha256:d9b0090239220bcb3df1808044c52cdfaf8809d98f72af7d9c89a8a4a4b50028",
      "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": 176,
      "hash": "sha256:de9dd192568d72e282fd7cdc5e04bcd2fb0d7af1bccb25c743aaf188dc5e9a45",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "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": "Entity names no store and there is no `main`",
      "tokens": 190,
      "hash": "sha256:0dd2e36b07760f2689f0ad25353cd7e8ee6cba01f4b0f560294d7637502a25fe",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.store_unknown",
      "kind": "error",
      "title": "data.store_unknown",
      "summary": "Entity's store is not a database connection",
      "tokens": 193,
      "hash": "sha256:089a2ddfc559c03983f3552004dfd440d4025f8e73bfc663bc65889c34ce6d85",
      "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": "Update by `id` builds a value from a stored field that could break its type's rules",
      "tokens": 332,
      "hash": "sha256:ad32ab331de0fa8a4095c1d01af5905bd5e88075b691663675e8cf5c8b74e8a5",
      "area": 6,
      "links": [
        "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": 205,
      "hash": "sha256:4bf95569bf79cc9b052bc97e3b48a32ac7cca65d75bd72ef74760057bd836faf",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.unique_single_field",
      "kind": "error",
      "title": "data.unique_single_field",
      "summary": "Unique rule has only one field",
      "tokens": 189,
      "hash": "sha256:b5d4dbfeffb18d765741e153dd3000d61c8e9e1093671a96378cbf30964eb3a9",
      "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": 176,
      "hash": "sha256:4980e39cf6974d78ea5db3e88e936d56341cff83734cf744482a9ede70b26c22",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.unknown_section",
      "kind": "error",
      "title": "data.unknown_section",
      "summary": "Entity has a section Jadpo does not know",
      "tokens": 220,
      "hash": "sha256:797e4209616c7a27bc6c9a7df9a594fc7bc6f0efe12dc3b4b6fe7fe515facf33",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "data.update_by_id_value",
      "kind": "error",
      "title": "data.update_by_id_value",
      "summary": "Update by `id` sets a value from something it can't use",
      "tokens": 360,
      "hash": "sha256:797da6d56fad3d54510ca84b42d0d6ee27f99a0737c9b6158ee761b025a80948",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": 351,
      "hash": "sha256:43cc3d351052fc994e3adedf1e040eef3ce66a970f1197b2b46950676fcb17c6",
      "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": "No delivery or schedule run has the id given",
      "tokens": 95,
      "hash": "sha256:aa8d1c38a0ff184f3176ea5ab1f4cb90766048b0fe0bed737c08ccda8b688030",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "deliveries.unavailable",
      "kind": "error",
      "title": "deliveries.unavailable",
      "summary": "Deliveries' database couldn't be read",
      "tokens": 94,
      "hash": "sha256:1d33cb67747e0450823171ecfd2dfdaf6df02ff92518305ad4d09b97c2e0987b",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "deliveries.wrong_state",
      "kind": "error",
      "title": "deliveries.wrong_state",
      "summary": "Delivery or schedule run isn't in a state the action applies to",
      "tokens": 100,
      "hash": "sha256:ff9e23b93ff215b69e363b901ba856eb3d1973c5631f6d260fd3445f3b407d08",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "deployable.api_unknown",
      "kind": "error",
      "title": "deployable.api_unknown",
      "summary": "Deployable serves an API the app doesn't have",
      "tokens": 208,
      "hash": "sha256:5f29107a4cb09f0ee264a466dd3a4a0a55d922ffbbac536d7b824d9df33a79c4",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.empty",
      "kind": "error",
      "title": "deployable.empty",
      "summary": "Deployable serves nothing and runs nothing",
      "tokens": 215,
      "hash": "sha256:a9e4e02109fbb0cd8fe8b65262687178ed326f8f9ce32442477dcb0ea8202be7",
      "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:23ec7841145e4f203c7cdc7711cb3339a1b53ae0a25b07da76f8f56ac0c720b8",
      "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": 428,
      "hash": "sha256:050a89779b43fd8350d830640c0586af6078c768a4d33978dae4e0453467743f",
      "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:f5d95b8dea7d066cae82ef2e0c2520be2bd1799f9d385d771242342ef2a9c92c",
      "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": 1315,
      "hash": "sha256:e3c2961db2b82e47d008e4beb8ae3298801b4c7a0beed7b3bebd2646886f738d",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "deployable.trigger_unknown",
      "kind": "error",
      "title": "deployable.trigger_unknown",
      "summary": "Deployable runs something that isn't a trigger",
      "tokens": 236,
      "hash": "sha256:5f52d8c6d41f1d2766f08975efdff1c431c410eda610835ead624e91e2cf089d",
      "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": 388,
      "hash": "sha256:6710cbaef3cb272645e68f3ffa8d66c5cb1273e944bfc15fcbb0bcc53a35b644",
      "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": "Action is part of a call cycle",
      "tokens": 233,
      "hash": "sha256:bc26862a937b297df83de3737ebefa63152ab0b5c15d92b2b1b9f0d1d48a1022",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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.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": "Template includes a partial that doesn't exist, can't be reached or is given the wrong fields",
      "tokens": 326,
      "hash": "sha256:fd7a0b5d8f80a13d7338ca8e8da6dd79ff3e5f863e471b516669a0db842b3647",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "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": "Template does more than read fields, translate and format",
      "tokens": 313,
      "hash": "sha256:3d94f61e88c6acd639343f268345856e42162a9a62cffca76b50140f3dca5a6b",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "id": "email.template_value_invalid",
      "kind": "error",
      "title": "email.template_value_invalid",
      "summary": "Template writes out something that isn't text or a number",
      "tokens": 296,
      "hash": "sha256:f5f1b96f2895f6abcc58ab5aea2267ff8f23cd0336e2a9a5892271614a9e9e88",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "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:76318c067480c5f2e61d5e2c4f09d6f72b4502fb054826ecb9b20fa1f452921b",
      "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:e20d6f279e01aafbc6068b55f99d3abe4a85762e3a304831a95269b95c037821",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "event.store_required",
      "kind": "error",
      "title": "event.store_required",
      "summary": "Action emits an event but writes no store to keep it in",
      "tokens": 275,
      "hash": "sha256:f775ce98c2f29e515332bd81540609652cdc1c5aba6a9b997aaa4b2ae9d7970d",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "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": "Call that can fail is not handled",
      "tokens": 236,
      "hash": "sha256:556db5e9c11c0bf14e4f7daff50283db578507f9c76032a31ea126be0a79e269",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": "Failure code is already in use",
      "tokens": 331,
      "hash": "sha256:a738aa403bfebd74f9480a4e6b68cf2a58c715cc98a368801da05ea8e5628fc1",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "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": "Failure has no kind",
      "tokens": 181,
      "hash": "sha256:9f6033edb3fadc4d4190886bf2d05521cf86ebf4f402f6d1bec4ac7429176421",
      "area": 4,
      "links": [
        "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": "Arm maps a rule the value cannot break",
      "tokens": 278,
      "hash": "sha256:9cc0cbf68299cc82f9095d39e682e142d69e87ec2c20240f757f617b8542df56",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.rule_unmapped",
      "kind": "error",
      "title": "failure.rule_unmapped",
      "summary": "Rule that can break has no arm and no catch-all",
      "tokens": 334,
      "hash": "sha256:89e65eb0bc682245f816ef21e0a592a5620915f91ba4ad75a850cd792826ae93",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.stale_declaration",
      "kind": "error",
      "title": "failure.stale_declaration",
      "summary": "Listed failure can never happen",
      "tokens": 226,
      "hash": "sha256:875c7e2da3744b45ed561d99acd7839d70488c8985268d51551c7b732a62a692",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "id": "failure.undeclared_propagation",
      "kind": "error",
      "title": "failure.undeclared_propagation",
      "summary": "Failure that can leave is not listed after `fails`",
      "tokens": 223,
      "hash": "sha256:c2cf80c0e28170425c4eebbf031ef1a7c10a5bc8a57c17cb2c8b5e34a20a0f06",
      "area": 4,
      "links": [
        "failures"
      ]
    },
    {
      "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": "format.changes_required",
      "kind": "error",
      "title": "format.changes_required",
      "summary": "Source file is not formatted",
      "tokens": 92,
      "hash": "sha256:880737f70ccdef298f8197ea331f3b8e06cf6c1a9507f233d834e8ad9e7ae0c6",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "format.unsafe",
      "kind": "error",
      "title": "format.unsafe",
      "summary": "Formatting would change the file's meaning",
      "tokens": 93,
      "hash": "sha256:50eec801a1df09eef401416c0fac1971ddb46893a19cffce0e66142cb9df5926",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "format.write_failed",
      "kind": "error",
      "title": "format.write_failed",
      "summary": "Formatted source could not be written",
      "tokens": 93,
      "hash": "sha256:86cafbed18246a5f2e90014645004b909f5fbf9b83c4699d95a3d3bad7e2cd9b",
      "area": 14,
      "links": [
        "command-errors",
        "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": "Name used without its import",
      "tokens": 252,
      "hash": "sha256:1a8b2008d8dd89760640682e94581d96c5f962ee712682102501f34ea385a2cc",
      "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": "Import of a name the file sees without one",
      "tokens": 277,
      "hash": "sha256:9b17233e9076f755352dc86f0b69aca1a6f047da1ae488efb74721073f4372ee",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "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": "Package's git repository or tag couldn't be read",
      "tokens": 159,
      "hash": "sha256:c62bc72d07218cbc7fa6795e99768210c7e1ca212d8add5063af64d697af6e59",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "install.in_use",
      "kind": "error",
      "title": "install.in_use",
      "summary": "Package to remove is still used by the app",
      "tokens": 170,
      "hash": "sha256:8f1c7f3449d625effb4bcffc0db0336f8478ca58d34ce31fc3c88a9439342c1f",
      "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:455916a370b0f75becbfac53fc6a9aea49384d58e8333aa8cbaf2eeba157d940",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "install.surface_mismatch",
      "kind": "error",
      "title": "install.surface_mismatch",
      "summary": "Package's committed surface doesn't match its code",
      "tokens": 205,
      "hash": "sha256:90542691339a05e8c285db6df3c2e97148580aa8a2088899904db9e6584b56a5",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "layout.call_direction",
      "kind": "error",
      "title": "layout.call_direction",
      "summary": "Shared code depends on a domain",
      "tokens": 211,
      "hash": "sha256:2e67ecfec6233a38fe9cdec98511874c4dfdd7d55e70b7c394d772e359516765",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "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": 583,
      "hash": "sha256:2e9e1b4e9f1b0408596c158497e587a9a83da8d9ca004a1cbeafa899c8ab881c",
      "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": 494,
      "hash": "sha256:b3ae0b468028357ca6ba87e94b64b05946f4b36fc5006c7ca28ee4dc2d0a5503",
      "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": "Migrations could not be applied",
      "tokens": 92,
      "hash": "sha256:8db1f01bc51ce97ef5c740bef5cc6608d4790371f7a544dd47edce827e34f3f8",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "migration.backfill_can_fail",
      "kind": "error",
      "title": "migration.backfill_can_fail",
      "summary": "Computed backfill can fail",
      "tokens": 304,
      "hash": "sha256:6e29b33dc15555e18c0bf8da45e3f5dd88e6465714de4df50b58db18b1fc80b5",
      "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": 760,
      "hash": "sha256:819bc79d0660c45373e46bd938f9aafa2364e8080ddc949af90db93637e43caa",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.decision_invalid",
      "kind": "error",
      "title": "migration.decision_invalid",
      "summary": "Migration decision does not fit its change",
      "tokens": 185,
      "hash": "sha256:351ad733c5bf9133373d02e61d5bb3603cbed556b30cb85bda0193ee4e584199",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.decision_required",
      "kind": "error",
      "title": "migration.decision_required",
      "summary": "Migration needs a decision",
      "tokens": 223,
      "hash": "sha256:b3eefdc78dcf90f3e3ca34aaed3f463d8a16619cb905ff81e3812836c83574e6",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.decision_unknown",
      "kind": "error",
      "title": "migration.decision_unknown",
      "summary": "Migration decides about something that is not changing",
      "tokens": 237,
      "hash": "sha256:016bb473796ea982c99c59f0091a1988ee9e1b868afcd778d948f72049f257f4",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.extension_missing",
      "kind": "error",
      "title": "migration.extension_missing",
      "summary": "Database lacks a PostgreSQL extension the project's migrations need",
      "tokens": 102,
      "hash": "sha256:ae13bafc5784847e4ef3ca2f08de9e9dbc6087f239cb11ecaa6980b2e969bb26",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "migration.extension_outdated",
      "kind": "error",
      "title": "migration.extension_outdated",
      "summary": "Database's PostgreSQL extension is older than the project's queries need",
      "tokens": 104,
      "hash": "sha256:b29bf30aeab5b920aee84f9e3eac9e4e5c3758cd50ecfb78451aaa5cbda795c4",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "migration.out_of_date",
      "kind": "error",
      "title": "migration.out_of_date",
      "summary": "Entities and the latest migration disagree",
      "tokens": 230,
      "hash": "sha256:0f2bc348439272b45ae6919bd19f1127e3e61390dfc41609d7be3ee87b1c1306",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.record_invalid",
      "kind": "error",
      "title": "migration.record_invalid",
      "summary": "Migration folder cannot be read",
      "tokens": 171,
      "hash": "sha256:c7d9fbe8195af2b6fe04fdfb4bfc4064e4b6fac8c85a7b9c56ef38aa3f7ae37f",
      "area": 5,
      "links": [
        "data"
      ]
    },
    {
      "id": "migration.store_diverged",
      "kind": "error",
      "title": "migration.store_diverged",
      "summary": "Database does not match the project's migrations",
      "tokens": 97,
      "hash": "sha256:6ff31cb19177e73fb2ed561201ef0b54eb5a3d0ffa64314aa0ed57d6bbdbf7be",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "migration.unfinished",
      "kind": "error",
      "title": "migration.unfinished",
      "summary": "Latest migration is not finished",
      "tokens": 209,
      "hash": "sha256:4e491d93b52944b81b36ee3bce82764baa8862245200eb90911a63ec156cbb73",
      "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": "Domain or library has a generic name",
      "tokens": 213,
      "hash": "sha256:adbdc646f97325942f9311e7556602ab63a8c2770076f5267c3d28f60287744a",
      "area": 1,
      "links": [
        "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.digest_mismatch",
      "kind": "error",
      "title": "package.digest_mismatch",
      "summary": "Installed package's files differ from its digest in the lock",
      "tokens": 332,
      "hash": "sha256:5eb99e8b44fad016998d85c705c498c2911ce781b40f463448b93f3600e01442",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": 260,
      "hash": "sha256:ce3bb87ccfa6f75d5c34b701addbdf2dc5b2454c6a76101e4bb33f04e32af246",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.licence_not_allowed",
      "kind": "error",
      "title": "package.licence_not_allowed",
      "summary": "Proprietary package isn't installed from git",
      "tokens": 292,
      "hash": "sha256:ff48be1c5f7944d236939abf5a63dd0616ff0407d85426387d2611404d0382bd",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": "Package's name is already one of the app's",
      "tokens": 211,
      "hash": "sha256:b48b2a74358bf47cfbd3ba6a076fdc7e278f86cc2221c7cbefa53219407200ba",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.not_installed",
      "kind": "error",
      "title": "package.not_installed",
      "summary": "Lock names a package that isn't installed",
      "tokens": 264,
      "hash": "sha256:5cf9b7c0c7b7b7b4b9de2e3aa9c5ccccc4ecef5ee3f5c412ae5bbca3cf4e6e3d",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "id": "package.not_locked",
      "kind": "error",
      "title": "package.not_locked",
      "summary": "Installed package has no line in the lock",
      "tokens": 234,
      "hash": "sha256:fea7176a5364fd85d5aa0467b0b6b663e925811a425b66d9de1c2efd62af076b",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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.provider_invalid",
      "kind": "error",
      "title": "package.provider_invalid",
      "summary": "Provider file holds what it can't, or lacks `protocol:`",
      "tokens": 550,
      "hash": "sha256:a69de69b1089fd205cf8fe517b197029d9118b63156e294421181e49474e3264",
      "area": 11,
      "links": [
        "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": 245,
      "hash": "sha256:e3dc32f083d9338e6c36328cca8e0d99b633fcfd80adf634bfee3186130635a6",
      "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": "Name written through a package held in two versions doesn't say which",
      "tokens": 303,
      "hash": "sha256:6675bb91ddaa1e18438caa10804364228a1ea4bb90da37c53e627f561c0f1a3d",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": 304,
      "hash": "sha256:39ff1ed6b7976f4db53a860aaec5e1f716b05d67619a246aa99e01b2852198f0",
      "area": 9,
      "links": [
        "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": "Route reaches something no grant allows",
      "tokens": 693,
      "hash": "sha256:df59dc0c39c0a7486126a389bbd562f8fa3bd37fd407c46d884984e9b529558d",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "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": "Field policy lets in someone its record's grants don't",
      "tokens": 364,
      "hash": "sha256:f1ad22bae7b5024202ffade696681ae170a1e5833bcc99674a9f7ce9fb4eaa41",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "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": "Output carries a value not every caller may read",
      "tokens": 6152,
      "hash": "sha256:4164b766dab8bd3af6774bce36f14efcbe384f5be278f140dbcd9a1491e48d81",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "policy.public_grant_missing",
      "kind": "error",
      "title": "policy.public_grant_missing",
      "summary": "Route anyone may call reaches what not everyone may do",
      "tokens": 391,
      "hash": "sha256:a41f3860f97b717af755c3727bb6bfaffe57a7c1029b351c66535bcebe3aa244",
      "area": 9,
      "links": [
        "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": "Entity has no reference a role or the tenant applies through",
      "tokens": 400,
      "hash": "sha256:695334554cb447e6216b71f951e422a9a8c0d41a166d6df76f452f11e91ce043",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "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": "Schedule or subscriber reaches what only `Access.public` grants, not `Access.system`",
      "tokens": 837,
      "hash": "sha256:636d7c08e3bcdd0ad0547a4cf87421f757c0ebee7b93de71c7cb603b9cdbf517",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "prompt.free_text_in_instructions",
      "kind": "error",
      "title": "prompt.free_text_in_instructions",
      "summary": "A free-text placeholder is written in a prompt's instructions",
      "tokens": 325,
      "hash": "sha256:0ea2921ebba8ab17878e898fdbc9fbc67d116d1e77a356415b5187ac33d94a92",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "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": 249,
      "hash": "sha256:7d4e3b0f8519ec52bc116c6f690b19a50bfdc5a4347c59945d53f94be657ae15",
      "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 field is written nowhere in its text",
      "tokens": 255,
      "hash": "sha256:6cd3b162db2c48251a4fbd04ebe1753ebd13dc4b69d0b942fc6defb2e6a15aa4",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "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": "publish.breaking_change",
      "kind": "error",
      "title": "publish.breaking_change",
      "summary": "Package's surface breaks its last release within one major version",
      "tokens": 354,
      "hash": "sha256:08f897f8d4a68ce753d886aad5d6a33122eca4e53876e3d0cf26fc334b3db6e1",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "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:c0b8370368371ba8c1a14b02fe11aff0eefb9beaf6b9dfe70f81baec4d0afeb1",
      "area": 14,
      "links": [
        "tooling"
      ]
    },
    {
      "id": "publish.description_missing",
      "kind": "error",
      "title": "publish.description_missing",
      "summary": "Package's public declaration has no description",
      "tokens": 365,
      "hash": "sha256:b50f7a0962d1d26d4de718772451285c9d998be3cc3284b9155a63bfc46b3d8c",
      "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:5f922bd1b04fed314e5202bc720b0fb13a247e918aedc0a1f295b813238edb4d",
      "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": 297,
      "hash": "sha256:1d84d0426a38b4fa4af6ff31e91a8e08b59e5f06c3336c8a77347f21febb9a62",
      "area": 14,
      "links": [
        "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": 415,
      "hash": "sha256:63a1e66bc2330b0cacd0516eab5cdef82a2b145166f42d4f31eba1ae88fd9fc1",
      "area": 14,
      "links": [
        "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": "Map layer's geometry field is not a stored geometry of its type",
      "tokens": 283,
      "hash": "sha256:0de201d0c0533d1a50577b6b4447ddeb963348f898842918f389077e03223c8a",
      "area": 6,
      "links": [
        "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": "Includes nest more than two levels",
      "tokens": 449,
      "hash": "sha256:b6dcdd1cf50ee1a89f62d313de252e2dde6d9249e7aaf17c4a49330545a93472",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": "Query limit or page size is below 1",
      "tokens": 415,
      "hash": "sha256:6d24c0bf87bb4dd1b5a5a3a825c48f8e59d868fb25582a7fea0be9cfe69a5ba4",
      "area": 6,
      "links": [
        "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": "Query for one record can match several",
      "tokens": 218,
      "hash": "sha256:2d1c4d15c7deb6ec5aeaf0de49bc3dcb2890922ec5d35261fb894aecbae5d345",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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": "Field cannot be in a query's order",
      "tokens": 230,
      "hash": "sha256:4f79a5a3a8ec89f5c7f49a90d1fa93ea436ca45193fcb053937d0a11e179c297",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "id": "query.other_domain",
      "kind": "error",
      "title": "query.other_domain",
      "summary": "Query reads another domain's entity",
      "tokens": 216,
      "hash": "sha256:b54f3cd71f29c3c354ee17325b1cc6f3daed6e6234d70065b2f84808fea4beb3",
      "area": 6,
      "links": [
        "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": "Query is missing a section its result needs",
      "tokens": 239,
      "hash": "sha256:d0de38dc947bf5e47458307456dba4149477f70add50f4b6a9f3c045aea1a795",
      "area": 6,
      "links": [
        "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": 240,
      "hash": "sha256:b46b59d899a58f44f36fc07649f7cb011daee3886b93680cdd33b0533c1817b5",
      "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": "receiving.invalid",
      "kind": "error",
      "title": "receiving.invalid",
      "summary": "A queue in `receiving:` doesn't say how its messages are read",
      "tokens": 377,
      "hash": "sha256:772e57a4a3bf7b3a24fe1b286b20f6c557a06f654821f0abcf83414688c3b835",
      "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:13b2060bbeef3f43f857c3f93bf421f082e28d8eb76346d57114534db30c1c33",
      "area": 18,
      "links": [
        "records-and-manifest"
      ]
    },
    {
      "id": "record.format_newer",
      "kind": "error",
      "title": "record.format_newer",
      "summary": "Record was written by a newer Jadpo",
      "tokens": 254,
      "hash": "sha256:91bf6e1fd7533093fa0f0804a412b20d1b2a9b53d9b6e85769ef03a3f21dcfda",
      "area": 18,
      "links": [
        "records-and-manifest"
      ]
    },
    {
      "id": "record.out_of_date",
      "kind": "error",
      "title": "record.out_of_date",
      "summary": "Generated record disagrees with the source",
      "tokens": 259,
      "hash": "sha256:cf2ce924bca12222c120b88687467cc517ce89f792372671a0b3e8f5ce3b591d",
      "area": 18,
      "links": [
        "records-and-manifest"
      ]
    },
    {
      "id": "recording.failed",
      "kind": "error",
      "title": "recording.failed",
      "summary": "Sandbox or model gave no answer to record",
      "tokens": 93,
      "hash": "sha256:12931edc2fc73a318186347084919bdfa8bfbbfe249e25370b48eafae5f140dc",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "recording.refused",
      "kind": "error",
      "title": "recording.refused",
      "summary": "Answer can't be recorded through this connection",
      "tokens": 95,
      "hash": "sha256:9cc370ea48ccf2b420326e0a609212fbb8bd27bf3fe3ae51f1d139ad636171ca",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "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": "Route authentication is not RouteAuthentication.none or .fresh",
      "tokens": 374,
      "hash": "sha256:91dd4615b713f307098d0e7e7df2e669c1f4cc2985acfba18db82904d2891612",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "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.calls_past_deadline",
      "kind": "error",
      "title": "route.calls_past_deadline",
      "summary": "Outside calls a route reaches can take longer than its deadline",
      "tokens": 694,
      "hash": "sha256:35704d45791998273359841d7003cb6f884de95b9d1cc79aed751a843853087c",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": "Input field reads a header authentication owns",
      "tokens": 404,
      "hash": "sha256:e7e057c60d8e2a4cae5492dca98330bdb7b6421c3065cd03c5385a7715002e2c",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "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": 324,
      "hash": "sha256:155f92ba89857bd45f1f1d429ad4748a3afbb68a03df61cfabb97cb7937481bb",
      "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.run_invalid",
      "kind": "error",
      "title": "route.run_invalid",
      "summary": "Route `run:` is not a call of a named action or query",
      "tokens": 282,
      "hash": "sha256:1dc1ce40f42566ae8b1f956bf2784d34ca3a86128f31511d1b2458d9447282d6",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.run_kind",
      "kind": "error",
      "title": "route.run_kind",
      "summary": "A `GET` route runs a query and other methods run an action",
      "tokens": 274,
      "hash": "sha256:a82f5f39401a6d84e273e03490c5c710ed22564c503b685c66c598e7c2a51d81",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "id": "route.run_required",
      "kind": "error",
      "title": "route.run_required",
      "summary": "Route does not say what it runs",
      "tokens": 247,
      "hash": "sha256:c28d263d64e943121220da10467becaca9cdd7a908dd5edb940c8761421a301e",
      "area": 7,
      "links": [
        "http"
      ]
    },
    {
      "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": 371,
      "hash": "sha256:4adef86539d466301d2dd500d14682cd953d9259258a418ea5cc4a92e3c997da",
      "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": "Unfinished runs' database couldn't be read",
      "tokens": 93,
      "hash": "sha256:7a8074c1162893cb683883d4c3fd7930cea263185a1e0b57bccd5e848cfc508b",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "schedule.every_invalid",
      "kind": "error",
      "title": "schedule.every_invalid",
      "summary": "Schedule's `every:` isn't a whole number of seconds, minutes, hours or days",
      "tokens": 231,
      "hash": "sha256:cdabfc700ece15a1a4925cb397566f4151723a36d12fd95407ec762fa1bae55e",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "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:a0c35d0382cea429ba2aa232ee827cd39e7cbc2e1f2eeb644a5230a9fddb19c8",
      "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:6562c3355f944463b2e143b0ed3a5963b95104de9ff420dbfbd7239a3a3dc6cb",
      "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:1b98d5bf35e032306cb4fe4dae7719b636215251dcb0d0185385e3c01f1230a8",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "schedule.store_required",
      "kind": "error",
      "title": "schedule.store_required",
      "summary": "Schedule has no database named to keep its state and lease in",
      "tokens": 596,
      "hash": "sha256:6267c25eeaafa080e3d0a28cf459ca88b3e9b483d3381c0772128f922e2a8d4c",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "schedules.lease_held",
      "kind": "error",
      "title": "schedules.lease_held",
      "summary": "Schedule is already running",
      "tokens": 91,
      "hash": "sha256:b404043ea9b9ebc9fed81660d72cfe40e544df3fe26f5f808eb8992bfa3dbe62",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "schedules.no_tick",
      "kind": "error",
      "title": "schedules.no_tick",
      "summary": "No tick picked up the run asked for",
      "tokens": 92,
      "hash": "sha256:3fa57b8caba5514832a47b6b029b9c269327b9f765e37eb1694fd6d0e9174c4d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "schedules.run_failed",
      "kind": "error",
      "title": "schedules.run_failed",
      "summary": "Schedule's run failed",
      "tokens": 89,
      "hash": "sha256:ad39bbac8fbcb9cb7c0af0cbf1a0503fdb0d59c9b79775633d9b7382758462e1",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "schedules.unavailable",
      "kind": "error",
      "title": "schedules.unavailable",
      "summary": "Schedules' database couldn't be read",
      "tokens": 93,
      "hash": "sha256:5d8d99a09b64140a440b650881457e8d02e0e0a34aee7f86d1a73b6e3c221c6b",
      "area": 14,
      "links": [
        "command-errors",
        "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 field marked `to_models: false` reaches a prompt or an embedded text",
      "tokens": 532,
      "hash": "sha256:9fecaed2d6b153fa7699da36d8fa7acf13dc54261842c3f74a566b479a205d85",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.ai_field_unmarked",
      "kind": "error",
      "title": "semantic.ai_field_unmarked",
      "summary": "A marked field's value is stored in a field without its marks",
      "tokens": 1015,
      "hash": "sha256:3bff4f66f0a0f5115aea421fbf6c68bf665d3169b24f0753ae90ac3698fdb8dc",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "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": "Personal data reaches a model in a category `ai: { personal_data: { allowed: } }` doesn't list",
      "tokens": 761,
      "hash": "sha256:0526497a5d99c2e4dea3272723933995968aff79ee92e8eeb2fd10616da6eb8e",
      "area": 21,
      "links": [
        "ai"
      ]
    },
    {
      "id": "semantic.auth_method_duplicate",
      "kind": "error",
      "title": "semantic.auth_method_duplicate",
      "summary": "Sign-in method is declared twice",
      "tokens": 262,
      "hash": "sha256:7bbf18df6455f1f210afea2ed89a778d42a417527f36c903bc055adea6e62012",
      "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": 219,
      "hash": "sha256:c5d5e75090f687d7087d4c0ff7027f8e2e216c758d7d195e1a076c36ee17daf1",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_not_set_up",
      "kind": "error",
      "title": "semantic.auth_not_set_up",
      "summary": "Routes need a signed-in caller, but nothing signs anyone in",
      "tokens": 340,
      "hash": "sha256:fc8dc85da521d474fd5465d65958dd2b918e57553979b9325579d4f78414d7e9",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.auth_principal_required",
      "kind": "error",
      "title": "semantic.auth_principal_required",
      "summary": "Sign-in method has no principal variant to sign in",
      "tokens": 213,
      "hash": "sha256:e49dda3012c69df059787f4361e389c18d54617e1fbb5f0e86f56f2a67adffa9",
      "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": 243,
      "hash": "sha256:5af7ed57ca2a5fc68e482cbf774c894ef4a7b8e8881fc6eac54cfc8e85ce3106",
      "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": 227,
      "hash": "sha256:0632d95adb136541255f3ae1b561cb1616a7317b1b2b656a98602b76cc95f37d",
      "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": 259,
      "hash": "sha256:1ad3456ff632f4f38e0b3ed6715f143cd8f0e2f88febc1198b9b7f5d80ff2faa",
      "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": 191,
      "hash": "sha256:633f64e86152f6866d94d994fb06f64575e3e8c4732b87b21455c2eab0ac9a93",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_authentication",
      "kind": "error",
      "title": "semantic.multiple_authentication",
      "summary": "Project declares more than one authentication block",
      "tokens": 259,
      "hash": "sha256:069b97509158a832da26d310cdc6993ebd233c2ebd66d418f07fdbfd8f5b31dd",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_locale_declarations",
      "kind": "error",
      "title": "semantic.multiple_locale_declarations",
      "summary": "Locales are declared more than once",
      "tokens": 222,
      "hash": "sha256:bf48063cfe89d9f4e778826c81a19b14184d7ae27d3eeb494131d33517c0a364",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "semantic.multiple_principals",
      "kind": "error",
      "title": "semantic.multiple_principals",
      "summary": "Project declares more than one principal",
      "tokens": 240,
      "hash": "sha256:e771e0df3abe6f7a04052e06fc2b84dc7bdccd5b8b86a1834aafdf7cf0f19f3c",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "semantic.multiple_suggestions",
      "kind": "error",
      "title": "semantic.multiple_suggestions",
      "summary": "Suggestions settings are declared more than once",
      "tokens": 204,
      "hash": "sha256:87993b8e913c53575a011534659da09385eb03ea35c02ebc6b64b74c66ae4aef",
      "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": 403,
      "hash": "sha256:84b766faf2d04ac4f9e2c4aa85b563f8499e9dcc3b850c1688939c3f9451bea9",
      "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": 216,
      "hash": "sha256:4cc67e8e0bb2c80f9266008eedae20a54a5760a923dcd0c08cc9f69e38c1e5d8",
      "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": 214,
      "hash": "sha256:e95e489f587db91013b3d00ef3428264d778a8019b086c9482f0f90f92a00b86",
      "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": 172,
      "hash": "sha256:7671c2f63a81324126de5b915c1e33c9e649c73d751735b52e39351cf3a45ad4",
      "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": 249,
      "hash": "sha256:a7feac8955f0e3040d7d58bec05d6c652c3906efb8d9c5bd68346d6c817ec28c",
      "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_route_unknown",
      "kind": "error",
      "title": "semantic.request_route_unknown",
      "summary": "No route answers a route test's request",
      "tokens": 389,
      "hash": "sha256:1f04e29f4c125b6d4e3d3231ee988f87084ceb1119c4656c20d3ba0a6317e43f",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "semantic.revocation_delay_invalid",
      "kind": "error",
      "title": "semantic.revocation_delay_invalid",
      "summary": "Revocation delay is not a positive duration",
      "tokens": 202,
      "hash": "sha256:a765d76ea217743ca5d17a660f1d5f85ac2adf01c3d5fce36986fa3129480b1a",
      "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.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": "Name is not declared",
      "tokens": 157,
      "hash": "sha256:6a620a85f03f8b2e5f7467475d3f312c3e3db059a71c6f4974ba6c5ff26bc2de",
      "area": 1,
      "links": [
        "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": "Variable is never used",
      "tokens": 188,
      "hash": "sha256:52e063794bc34cd625ea7d8473b4366103465dcc2cd2fc01966b48844dc9dbdd",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": "Several changing calls where a retry can't resume them",
      "tokens": 602,
      "hash": "sha256:e60f4ce651a6dc564b4d938990c440fe8fa032471a89129cb67c1efe03ee4c2f",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.encryption_key_required",
      "kind": "error",
      "title": "step.encryption_key_required",
      "summary": "Actions make several changing calls but no key encrypts their answers",
      "tokens": 487,
      "hash": "sha256:3b7842fa8e6e9bdd9800572e0c43dadfc2dcd590f139874afaa2f2d74925aa20",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.large_output",
      "kind": "error",
      "title": "step.large_output",
      "summary": "Operation with a large answer among several changing calls",
      "tokens": 413,
      "hash": "sha256:99da8df9723dd378adb9a191add81b0e9cf03e0ec42ed370dcef01f28041b2cb",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.late_failure",
      "kind": "error",
      "title": "step.late_failure",
      "summary": "Action can fail for good after a changing call took effect",
      "tokens": 563,
      "hash": "sha256:816a5b648f384bd1835b4553812100ae34035d73c3be713fc967d8bb8f8bf7b6",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.settings_invalid",
      "kind": "error",
      "title": "step.settings_invalid",
      "summary": "Steps setting in `application { }` doesn't read",
      "tokens": 267,
      "hash": "sha256:35610bcba7ac3474f7a0bc6766739b48fa9342b1aff410aff555bfb35387fffc",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "step.store_required",
      "kind": "error",
      "title": "step.store_required",
      "summary": "Action makes several changing calls but writes no store to keep their record in",
      "tokens": 428,
      "hash": "sha256:47dd803ac0229a1e28db0684ca9f17039701bfafe030c3e86bf4fbf0f83af2b0",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "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:8f5d2b5871ed718948d0a107c38fd406bb09e4a4782fce5094da36246a00db53",
      "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:c4d8f166150920c225a78d771b520715d1f24be7c0c61ef751136ef4cbd97775",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "store.action_spans_stores",
      "kind": "error",
      "title": "store.action_spans_stores",
      "summary": "Action writes more than one store",
      "tokens": 289,
      "hash": "sha256:82cdce2bd4241df52058489f2fbd85347e00e385d411b653c4178a796a44ca59",
      "area": 6,
      "links": [
        "reads-and-writes"
      ]
    },
    {
      "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:11ebe0b93ac72084547936c2729820c9bb570789095a8052412a779ba135667b",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "subscriber.event_invalid",
      "kind": "error",
      "title": "subscriber.event_invalid",
      "summary": "Subscriber's `on:` doesn't name an event type",
      "tokens": 314,
      "hash": "sha256:bb2a4bfd9b010b43135535aeb337351ffbb04c8bdfcebeb69f78896d423193b7",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "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:8ae460339b134a97ba2ff9ae1f89ad143fb409e476fab5f3402898a42c50204f",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "subscriber.retry_invalid",
      "kind": "error",
      "title": "subscriber.retry_invalid",
      "summary": "Subscriber's `retry:` isn't attempts and a duration within their limits",
      "tokens": 360,
      "hash": "sha256:678c60c38002011668012684e14ba29df085ee9b34b60ce33cf73ecdbad79295",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "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:8961328ee292efe5ae554504ff00b309397edf3a79fd22674c86eae81392adb6",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "suggest.record_invalid",
      "kind": "error",
      "title": "suggest.record_invalid",
      "summary": "Suggestions record can't be read",
      "tokens": 92,
      "hash": "sha256:9bf6e9cb3a56ed3569a2b550cf3a3db6497d3d51394a835488ba002dd4344898",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "suggest.share_failed",
      "kind": "error",
      "title": "suggest.share_failed",
      "summary": "Jadpo HQ couldn't be reached or refused what was shared",
      "tokens": 98,
      "hash": "sha256:6a24e4d5e02aa0724ffddf99a61f6cb9d42848524765072e6d127d4c5f446568",
      "area": 14,
      "links": [
        "command-errors",
        "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": 142,
      "hash": "sha256:3467756263438aee3f1dcbfbe5b1e2e63b3f641d77919323ef1a837c4055a7d0",
      "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": 179,
      "hash": "sha256:15f86d8cf32abdb0cfcb16224dbfeeb464c7e6ed3127f425fd8942a6e9f5f302",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "syntax.locales_duplicate_option",
      "kind": "error",
      "title": "syntax.locales_duplicate_option",
      "summary": "Locales option is given twice",
      "tokens": 197,
      "hash": "sha256:43c764565a16d53128ce72de3fb865a2651d093dc5fa2510c41703da238f43b5",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "syntax.locales_supported_required",
      "kind": "error",
      "title": "syntax.locales_supported_required",
      "summary": "Locales declaration lists no supported locales",
      "tokens": 199,
      "hash": "sha256:13418faa7260739983e764621dcfc197e5d7a497509575c06f780cb177be4910",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "syntax.locales_unknown_option",
      "kind": "error",
      "title": "syntax.locales_unknown_option",
      "summary": "Locales declaration has no such option",
      "tokens": 260,
      "hash": "sha256:8018b0cec891d052bf40d11dacf1e96ba280bea4324d9f33f131bfbd1674dbcf",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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:538a7af16983b021539f60e2f70c8474866d5d183b5fa4dbfa031ec95151af92",
      "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:3a3c48ae4ec54e9bc1dc49b7e9d1c83917004235df18561965c0b1c4302c0c8a",
      "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": "Variable declared with `let`, `const` or `val`",
      "tokens": 208,
      "hash": "sha256:6166c0df19e0144e406d9e299107f95eb147ebd5961cb0c5e79786da8b1a2a17",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": "Test assertion does not hold",
      "tokens": 250,
      "hash": "sha256:031cbc8671ea40268d22294a3d9df188688fa31ab9ff782494ce80d9fcf4090e",
      "area": 13,
      "links": [
        "testing"
      ]
    },
    {
      "id": "test.failed",
      "kind": "error",
      "title": "test.failed",
      "summary": "Test run failed",
      "tokens": 85,
      "hash": "sha256:06f63beaa02673ef616e4078f5727c32a3efb7eebf4fe2930935ec97321129d0",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "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": "Test left a faked operation's scripted answers unused",
      "tokens": 287,
      "hash": "sha256:5b0e59e711d70a1488de1e474f11765442b78ab92610813bdfaa3b0fcf7bc4aa",
      "area": 13,
      "links": [
        "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": "No tests to run",
      "tokens": 86,
      "hash": "sha256:4dac6b7b310dfb250c68050c9ef51d5ffc8c81d9373734fc6459b8013e446671",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "test.recording_undecodable",
      "kind": "error",
      "title": "test.recording_undecodable",
      "summary": "Recorded provider answer its operation's decoders don't read",
      "tokens": 309,
      "hash": "sha256:9a2b42bcf2cb7e3e95299702025f0ba7f7644226e508d081c102663071501ed0",
      "area": 11,
      "links": [
        "external-services"
      ]
    },
    {
      "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": "Test runtime could not start",
      "tokens": 92,
      "hash": "sha256:83c5b25dee7d8c5b984729a9743e9bbecc8dbeebce7f5014ccbbaa4292ac5197",
      "area": 14,
      "links": [
        "command-errors",
        "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": "toolchain.artifact_write_failed",
      "kind": "error",
      "title": "toolchain.artifact_write_failed",
      "summary": "Generated file could not be written",
      "tokens": 95,
      "hash": "sha256:c81f444247ef1a44648731a2cc77434ee09f08cadbb46cd824c41becb8728053",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.build_failed",
      "kind": "error",
      "title": "toolchain.build_failed",
      "summary": "Rust compiler couldn't build the deployable",
      "tokens": 95,
      "hash": "sha256:2b0590afb0444832362366a369ce66ab3428820fb8ffcf7f456986a31646fd07",
      "area": 14,
      "links": [
        "command-errors",
        "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": "Rust toolchain or crates couldn't be fetched",
      "tokens": 98,
      "hash": "sha256:c67f42a84e7a18cb2d79c9aea8a1587d1fb989b601ea9ca4483bfacab2480f30",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.not_built_yet",
      "kind": "error",
      "title": "toolchain.not_built_yet",
      "summary": "Operation is declared but not built yet",
      "tokens": 231,
      "hash": "sha256:78afd2ab1aea060e1c55a5006203456306e85fb400a6e16e36ffc754cab57884",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "toolchain.project_not_found",
      "kind": "error",
      "title": "toolchain.project_not_found",
      "summary": "Project could not be found",
      "tokens": 92,
      "hash": "sha256:eb0b1b08a167cbf74a2da9e617a263baae1765dc52abfa207353a0201f07f987",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_destination_exists",
      "kind": "error",
      "title": "toolchain.scaffold_destination_exists",
      "summary": "Scaffold destination is an existing file",
      "tokens": 98,
      "hash": "sha256:d2c44bfc1c8720a00c5b53f889752f71caa77ddfd7c38d89e29851f483153ceb",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_destination_not_empty",
      "kind": "error",
      "title": "toolchain.scaffold_destination_not_empty",
      "summary": "Scaffold destination directory is not empty",
      "tokens": 248,
      "hash": "sha256:d33b855e7fe0270c4dc95393a85078d2cb4f1a7160fb9cbeae590c4c56d32794",
      "area": 14,
      "links": [
        "the-jadpo-command",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_name_invalid",
      "kind": "error",
      "title": "toolchain.scaffold_name_invalid",
      "summary": "Project destination has no valid name",
      "tokens": 96,
      "hash": "sha256:a34397c06e02bc160457ba870ec8b2c23f0700104dfb25e93a7177e783284748",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_read_failed",
      "kind": "error",
      "title": "toolchain.scaffold_read_failed",
      "summary": "Scaffold destination could not be inspected",
      "tokens": 97,
      "hash": "sha256:24f970ed760427def057d0e5a1f4d89903bd92eb3c31af23a8577cc6f4fa549d",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.scaffold_write_failed",
      "kind": "error",
      "title": "toolchain.scaffold_write_failed",
      "summary": "Project scaffold file could not be written",
      "tokens": 97,
      "hash": "sha256:92dc377a27a74da71dc7f2c75ccfdbc5cb4a572cc22e128a3b9941e228572d92",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "toolchain.source_read_failed",
      "kind": "error",
      "title": "toolchain.source_read_failed",
      "summary": "Jadpo source file could not be read",
      "tokens": 95,
      "hash": "sha256:1c28f7d9bbe7417c694ec0046408ad5ac441ee8ed0057607dcd4f1062d12656c",
      "area": 14,
      "links": [
        "command-errors",
        "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": "Project is on a later Jadpo line",
      "tokens": 435,
      "hash": "sha256:f5ee927b50ffd3f7c73f387702d84538fc15f03efacc4ef7ee5b760f309ad2cf",
      "area": 1,
      "links": [
        "project-layout-and-modules",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "toolchain.version_older",
      "kind": "error",
      "title": "toolchain.version_older",
      "summary": "Project is on an earlier Jadpo line",
      "tokens": 477,
      "hash": "sha256:8fe3f380c8ba456a600dafd8ca0a2ec3339fc01eeeef74f4ad47e848aea9cbc5",
      "area": 1,
      "links": [
        "project-layout-and-modules",
        "which-jadpo-runs"
      ]
    },
    {
      "id": "translation.exchange_file_invalid",
      "kind": "error",
      "title": "translation.exchange_file_invalid",
      "summary": "Translation exchange file can't be read or written",
      "tokens": 100,
      "hash": "sha256:0aacf1f5ac33b2dd5baee108589158e9249338760ff0579680a0bd12cece4b9b",
      "area": 14,
      "links": [
        "command-errors",
        "tooling"
      ]
    },
    {
      "id": "translation.exchange_unit_unknown",
      "kind": "error",
      "title": "translation.exchange_unit_unknown",
      "summary": "Translation file holds a unit the project does not have",
      "tokens": 101,
      "hash": "sha256:07c52473c4bce823e8ffa9bf0cd3236b172c14f79e87457985e8f31622bd4295",
      "area": 14,
      "links": [
        "command-errors",
        "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": 310,
      "hash": "sha256:8feb55cd57942a865fbc313498773f2d177bbb5fefcc47d0438220b0a1d9e516",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.field_type",
      "kind": "error",
      "title": "translation.field_type",
      "summary": "A message field is a type a wording can't hold",
      "tokens": 635,
      "hash": "sha256:2192eedb7af5a6a1b0de0e73edb65b5f080140070221f94e5383032743b32e58",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.field_unused",
      "kind": "error",
      "title": "translation.field_unused",
      "summary": "No wording in a language uses one of a message's fields",
      "tokens": 309,
      "hash": "sha256:609960fc069b52f6b6b4f9863e73f723e2a8416aef996b2cfd75ee3c0ee00c81",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.file_missing",
      "kind": "error",
      "title": "translation.file_missing",
      "summary": "A supported locale has no language file",
      "tokens": 296,
      "hash": "sha256:2f579b113df9ff2e92393cdde927490d915706672e07bc60eb8b38a0da939b4b",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.file_name_invalid",
      "kind": "error",
      "title": "translation.file_name_invalid",
      "summary": "A language file is not named for a locale",
      "tokens": 248,
      "hash": "sha256:d34206da91ce472c623302b4fc1b6f432adcebaf83db1075bd52fbbfd55d4049",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.group_unknown",
      "kind": "error",
      "title": "translation.group_unknown",
      "summary": "A group in the root language file is not one Jadpo reads",
      "tokens": 277,
      "hash": "sha256:cbd28fdf97abceb1892da295cdacc4b9dbb9894df4cdf0d9d3d684b9f5a5099f",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.jadpo_missing",
      "kind": "error",
      "title": "translation.jadpo_missing",
      "summary": "A supported locale lacks wording for Jadpo's own messages",
      "tokens": 464,
      "hash": "sha256:440c0a9a8f6ffb2dce9232c103e11b848f7ee37daa48069009ad3d6771e9e63d",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.locale_unsupported",
      "kind": "error",
      "title": "translation.locale_unsupported",
      "summary": "A language file is for a locale the application does not support",
      "tokens": 266,
      "hash": "sha256:f6a21414cdc1ad22fab99010586a338f5944972bde922f0c27db1d6cd66d2d6f",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.locales_required",
      "kind": "error",
      "title": "translation.locales_required",
      "summary": "Translations without declared locales",
      "tokens": 276,
      "hash": "sha256:788514cfb2550f85e4c429ef84a1640a9251a0193e20258b5fe73a2ce4a1c2a4",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.member_duplicate",
      "kind": "error",
      "title": "translation.member_duplicate",
      "summary": "A member is written twice in a language file",
      "tokens": 275,
      "hash": "sha256:4da5d9745569583639b373b9050b8a4491656465a71db0f33c6e62a320f11ed2",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.member_unknown",
      "kind": "error",
      "title": "translation.member_unknown",
      "summary": "A language file words something that is no message, enum or email",
      "tokens": 302,
      "hash": "sha256:07fcda4905875db91bb78abca5cf3350eace57370ceeb23c3d82c599f5cfdd91",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.message_unknown",
      "kind": "error",
      "title": "translation.message_unknown",
      "summary": "A translation call names no message or enum",
      "tokens": 290,
      "hash": "sha256:126f7af72c982180ffd8059f991cff1ee06e00d899e582254ec9a4bd98d34468",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.option_unknown",
      "kind": "error",
      "title": "translation.option_unknown",
      "summary": "An option of translations in app.jadpo is not one it takes",
      "tokens": 211,
      "hash": "sha256:ee4977f4aa94e0be52de5305d889923011ebbd83f583c06401d5cbc687d8098f",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 317,
      "hash": "sha256:f6a1d2e19b5a83f155a933b4d5aff4e0ca75f195b00cff360ab0cc50ac4297d5",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.placeholder_unknown",
      "kind": "error",
      "title": "translation.placeholder_unknown",
      "summary": "A wording writes a field the message does not have",
      "tokens": 226,
      "hash": "sha256:6ea3896398925f6341a791e3b24e7f1b1bb56a18452a2cfe124df178462dfeda",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.review_invalid",
      "kind": "error",
      "title": "translation.review_invalid",
      "summary": "Translation review is not a TranslationReview",
      "tokens": 268,
      "hash": "sha256:1babeeb0c7744c6ed0fbd121d199adb4f1a19684d2d57b11f0f5e672058ff184",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.sources_invalid",
      "kind": "error",
      "title": "translation.sources_invalid",
      "summary": "A translations folder's sources record cannot be read",
      "tokens": 349,
      "hash": "sha256:e617f240b81e2f4c87e1896090c81bc722e30d5f894c58988ec8a08480588f74",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.stale",
      "kind": "error",
      "title": "translation.stale",
      "summary": "A translation was made from default wording that has changed",
      "tokens": 325,
      "hash": "sha256:f6dd427fecf9ff0c5be5448ffca51b789a27c1568a871c43956fa2d6bb401d85",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.too_many_selectors",
      "kind": "error",
      "title": "translation.too_many_selectors",
      "summary": "A message has more than one enum or plural field",
      "tokens": 316,
      "hash": "sha256:e8b82e532df14e411a28cce2e7b22d76487f4fdc55a066ba4c6e2f446df0a0d8",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.variant_missing",
      "kind": "error",
      "title": "translation.variant_missing",
      "summary": "A wording lacks a value of the enum or a plural form",
      "tokens": 244,
      "hash": "sha256:09658fc6bd4cc3e7cb5c4ddeb0b003f407f52b0d42c6f0a2a9a955c543571158",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 274,
      "hash": "sha256:7c37fee89407da9fccbf7cbaf6a05b92a936ef70b673c5bcd6d5978254d09016",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.wording_invalid",
      "kind": "error",
      "title": "translation.wording_invalid",
      "summary": "A wording is not a plain string with {field} placeholders",
      "tokens": 252,
      "hash": "sha256:e3c542614795702ce0d041ce6a4405720708c406f54f03173f27fa51acf223c3",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.wording_missing",
      "kind": "error",
      "title": "translation.wording_missing",
      "summary": "A supported locale has no wording for a message",
      "tokens": 451,
      "hash": "sha256:3b1985179dcbac5bc34b4f138f31a47cc79b64ea4a66de7c26978c9c7769ccb8",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "translation.wording_shape",
      "kind": "error",
      "title": "translation.wording_shape",
      "summary": "A member is written in the wrong shape for what it words",
      "tokens": 284,
      "hash": "sha256:bca636a1389698d212d0efffeb85de9ae5f8ec4c91c733d280bfedff02b92136",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": "Call has the wrong number of arguments",
      "tokens": 186,
      "hash": "sha256:d0132bfa5d9770bc67916ebdb237acf1bd392101787b19d974e776eeb1152535",
      "area": 3,
      "links": [
        "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": "Count or position may be negative",
      "tokens": 371,
      "hash": "sha256:78ec3b20cb6c7a4a38fdcc10a5031292bf4432aadcd3dc4492a4fb13688e3cd0",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "id": "type.arithmetic_operand",
      "kind": "error",
      "title": "type.arithmetic_operand",
      "summary": "Arithmetic operand has the wrong type",
      "tokens": 244,
      "hash": "sha256:47f1f2a858ccacaf86d68c7c2328784106879dc279e33900ae39a1e40c637c0c",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.assign_immutable",
      "kind": "error",
      "title": "type.assign_immutable",
      "summary": "Value that never changes is assigned",
      "tokens": 200,
      "hash": "sha256:d91664caa3624f31ceb6c1c3f820de508bc49455eee630c7acb1a23a04f2d8f8",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": 277,
      "hash": "sha256:13b127ef01e1e796b01cd751e230063ec556ebbd65a9571b493094ced649988d",
      "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": 293,
      "hash": "sha256:aaca421cb40f09311611995fcad030061835e9cc6020263b2cbbbd57b5debb9d",
      "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": 256,
      "hash": "sha256:338df32ddb56fa0c4fd6aeea7051727c1fa043098da6a69e9f1bcb5638c77ff9",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_input",
      "kind": "error",
      "title": "type.auth_principal_input",
      "summary": "Input field holds a caller",
      "tokens": 229,
      "hash": "sha256:96fde23c68214248bc307490f494b8e890ae027417b2face6e9b4a33e0a093a7",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_principal_output",
      "kind": "error",
      "title": "type.auth_principal_output",
      "summary": "Output field holds a caller",
      "tokens": 236,
      "hash": "sha256:27be3f4a2be31755865d133901d950532d4ddd9351e7ddc7868f07c67e470885",
      "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": 355,
      "hash": "sha256:9a1bf79938d2d30e9d2d19b91c0130a0afda7c8f8f18655dc659194c55d2c552",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "id": "type.auth_public_principal",
      "kind": "error",
      "title": "type.auth_public_principal",
      "summary": "Public route passes a caller it never reads",
      "tokens": 380,
      "hash": "sha256:5c843e30a93cf18cbc80fbca77f541817a2f38d9d40a3661fe14263ebe2b6161",
      "area": 8,
      "links": [
        "identity"
      ]
    },
    {
      "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": 255,
      "hash": "sha256:9a2fe7f3898204ce7500439a06dc6c105f31c6ea415f62dddeb3ef2b5f66d09f",
      "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:d4e291b26006462517ef26d2e012be044b0ba0d8cc416dde766ff26ab2b073c1",
      "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:bdfba2821db7b9884a9023764c48d458a90db66af619b52a6ae49316b2bf1d79",
      "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:dfac05164515d68a59a9cd95d2eeba189c5a6b03b2403fa947970e1a69acb2ca",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_from_invalid",
      "kind": "error",
      "title": "type.batch_from_invalid",
      "summary": "A batch's `from:` is not a call of a named query giving a `Page`",
      "tokens": 322,
      "hash": "sha256:8ab68c5e3d51da90957012476d65259391e1d994284c7d94b41fb37365f44852",
      "area": 12,
      "links": [
        "jobs-and-events"
      ]
    },
    {
      "id": "type.batch_input",
      "kind": "error",
      "title": "type.batch_input",
      "summary": "An `Input` or a route placeholder holds a batch type, which only the runtime builds",
      "tokens": 363,
      "hash": "sha256:7028f4fc5138e13316a222ec3eb25fc1efdbedecd6fc558b9f7f3542ae2cb052",
      "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:f2d4730e9b7fe8fa324d868db6cbfb57ea96a8a63ad949651577d0a6c1dd8e62",
      "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:6b8f5dfe6dfb0800f6506e88134eb5a60f13703f11cf20ebbb97e228afeaf857",
      "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": 214,
      "hash": "sha256:81b166e30a2d6808f2f9cc55a56b9e93d2a5c6731b156b03677dd73701809fed",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": "Refinement loosens a rule it inherits",
      "tokens": 263,
      "hash": "sha256:894498082e04bb50346ec3ddd2c53d3e61c367e965025984cc8e05a693853013",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "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": "Value cannot be converted to this type",
      "tokens": 214,
      "hash": "sha256:f753bad8e7368fba29a6daa4ea3339f055b8509ce697b9179e575fdbb6267fc5",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "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": "Input copies every field of another type",
      "tokens": 181,
      "hash": "sha256:6a596381e82004a9bd145e7e69edda1094bac95dac05817cb53938bae261dc2a",
      "area": 2,
      "links": [
        "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": "Divisor may be zero",
      "tokens": 228,
      "hash": "sha256:8dfd3a7ed1dc046905299e3d4a03e4dcf8069a8f76e23130bbda4de0398a87b7",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": 188,
      "hash": "sha256:f19979e8bc22fe621385083c955ba36d1471ef0ff81da362e869e12d4446c342",
      "area": 2,
      "links": [
        "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": "Update changes a field that never changes",
      "tokens": 409,
      "hash": "sha256:25ad91edc60109ed67918ee40dd6aad5ae36d1b53a5c4cb0b3ebc636e618e39b",
      "area": 9,
      "links": [
        "policy"
      ]
    },
    {
      "id": "type.file_read_too_large",
      "kind": "error",
      "title": "type.file_read_too_large",
      "summary": "A whole read of a file field that can hold more than 10 MB",
      "tokens": 342,
      "hash": "sha256:820572937f51d587a1c8ade8bf5c4df8e184a608ca085b181ec0a9c7db6468ff",
      "area": 16,
      "links": [
        "built-in-services"
      ]
    },
    {
      "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": "Literal breaks its type's rules",
      "tokens": 218,
      "hash": "sha256:a8101495615da03b4de26040474a4ba1c2419c61dbd185b579a702cf2367d07c",
      "area": 2,
      "links": [
        "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.locale_default_unsupported",
      "kind": "error",
      "title": "type.locale_default_unsupported",
      "summary": "Default locale is not a supported one",
      "tokens": 240,
      "hash": "sha256:b1a628f03d39a2a47ac3e862caead1ec5632eecc2c550f1254f76f631b294d89",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.locale_duplicate",
      "kind": "error",
      "title": "type.locale_duplicate",
      "summary": "Locale is listed twice",
      "tokens": 190,
      "hash": "sha256:02e25134655bb765e6039270508b96da734795d85bc74591a89565d9fa5fdc4f",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.locale_in_progress_default",
      "kind": "error",
      "title": "type.locale_in_progress_default",
      "summary": "The default locale is listed as in progress",
      "tokens": 278,
      "hash": "sha256:eb37e8f955fd6f488b278d8ca44e6b4dc47c6886fed429017530ead3df580471",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 300,
      "hash": "sha256:088127f8008c0aad26ed13c2df5e234371db3799c9d0e84a969995f49a75cb6b",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.locale_invalid",
      "kind": "error",
      "title": "type.locale_invalid",
      "summary": "Locale is not written as a Locale",
      "tokens": 235,
      "hash": "sha256:9bb4599a008feb4f88910b1e3f6871c52583771c0f5bb8a27d49b958a9c74cd7",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.locale_unsupported",
      "kind": "error",
      "title": "type.locale_unsupported",
      "summary": "Locale is not one the application supports",
      "tokens": 279,
      "hash": "sha256:b92134aa31ec23312f3ded35be5dc0346b12e42b2175f61ecd32ea0e75d168cf",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": "Match does not cover every case",
      "tokens": 214,
      "hash": "sha256:f5a90977ee128aa1b3f016e527d054773adf4f6e1c806e131d0f5c594670761a",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "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": "Open value space needs a wildcard arm",
      "tokens": 185,
      "hash": "sha256:16901169203913b68eaecf5e628ba5f7e28e0d32499560b76bedc92ce4976727",
      "area": 3,
      "links": [
        "logic"
      ]
    },
    {
      "id": "type.mismatch",
      "kind": "error",
      "title": "type.mismatch",
      "summary": "Value has the wrong type",
      "tokens": 176,
      "hash": "sha256:a0371ac2cc138e1787f89449617bd44dd32c0d81fb651abdf540bb94794715e4",
      "area": 2,
      "links": [
        "values-and-types"
      ]
    },
    {
      "id": "type.missing_field",
      "kind": "error",
      "title": "type.missing_field",
      "summary": "Object is missing a field",
      "tokens": 181,
      "hash": "sha256:af03ea298f86d8b5c82633577951870551cfdc785ee2e98ea42867dc66abf1db",
      "area": 2,
      "links": [
        "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": "Values cannot be ordered",
      "tokens": 207,
      "hash": "sha256:598ff0ae78328f8d028acd5f2c751b7d1a0f1abeeb2ee2eeab7649422484297c",
      "area": 3,
      "links": [
        "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": 270,
      "hash": "sha256:dac268051784f91a8011a0f2fefcec3a2173d2478d0c2ba2ff2767cc2b43f988",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": 247,
      "hash": "sha256:9b47416d77e3495d36117988927a20592a1d8f211d5a1cf58a8192f1ccdf52da",
      "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": 197,
      "hash": "sha256:81f941fa077d887b46b3d8063321da10a44df4ce8943cb4ca0f31f3b84408c58",
      "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": 220,
      "hash": "sha256:0e2504c88208caa4938774053049488b9551e219f66eacef19fa6d99e9f0e6e0",
      "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.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": 217,
      "hash": "sha256:68f5a442fd9b18b4625a0729dc5247008325e3725750ebfce0688f9ae6521a5d",
      "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": "Type has a standard type's shape under another name",
      "tokens": 1024,
      "hash": "sha256:6a581cb034fda10263e337562e7c3d8964053e0a8aa5b0e1635722af91278113",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "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:087b060ceda271c67efde3bab40597640e4e4b5785b3b9c9a1948a5a099bb9df",
      "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": 249,
      "hash": "sha256:1b720567ade422e69f86aeba5c2d2c9b07a311a20ca992df635e201cf1258daa",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_format_component_duplicate",
      "kind": "error",
      "title": "type.temporal_format_component_duplicate",
      "summary": "Format component is given twice",
      "tokens": 211,
      "hash": "sha256:5e1058954ff0c45371d8dd0f956fdec911faf74cf2b58ad131eb6397cee24957",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_format_component_invalid",
      "kind": "error",
      "title": "type.temporal_format_component_invalid",
      "summary": "Format component takes no such style",
      "tokens": 239,
      "hash": "sha256:0ce686e5d0075e84b1e8b2a3044e41dfa1d9dffca18bb5a4531051788e69045d",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_format_components_empty",
      "kind": "error",
      "title": "type.temporal_format_components_empty",
      "summary": "Declared format shows nothing",
      "tokens": 205,
      "hash": "sha256:21d61ea70e1dfb9fdd33aa60089010e0c2b53dd8c9f1f39a0dea668861cae04a",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_format_invalid",
      "kind": "error",
      "title": "type.temporal_format_invalid",
      "summary": "Format is not a written-out time format",
      "tokens": 334,
      "hash": "sha256:40471184694c773e97fe7974de7d9a04702e31d0ba18de78975eff59ff8c8bae",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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": "Format shows a clock time a date doesn't have",
      "tokens": 288,
      "hash": "sha256:bb13dcf1578511faf63985da604de06a071fc502b5e84689ac8520e0ae5143c0",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_locales_required",
      "kind": "error",
      "title": "type.temporal_locales_required",
      "summary": "Formatting needs declared locales",
      "tokens": 876,
      "hash": "sha256:11909725c808dd1d94945a247858b64034a15db17e75d26567dcd9b4d8cda26e",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_option_unused",
      "kind": "error",
      "title": "type.temporal_option_unused",
      "summary": "Option means nothing for this value",
      "tokens": 263,
      "hash": "sha256:3885f657be9506209447cd0b6a5df7d629df40205ad47fa1840019cea81e4935",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "id": "type.temporal_zone_required",
      "kind": "error",
      "title": "type.temporal_zone_required",
      "summary": "Formatting an instant needs a zone",
      "tokens": 259,
      "hash": "sha256:5ed922026a4bb4b9f5dd6c0e6fb401cf12fbdc410c923b9ab8b3e472b0b7589e",
      "area": 10,
      "links": [
        "configuration-and-time"
      ]
    },
    {
      "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_required",
      "kind": "error",
      "title": "type.unit_required",
      "summary": "Number is given where a quantity needs a unit",
      "tokens": 585,
      "hash": "sha256:2e95d4ff13ede841f1e54e85fa3d5767a71a369be4c1554bfb569c5bb8140605",
      "area": 19,
      "links": [
        "standard-library"
      ]
    },
    {
      "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": "Enum has no such variant",
      "tokens": 179,
      "hash": "sha256:c6436df084374038b7b4092bd66d1bf2e69b4b09f9807a67183fc85e5f8561e5",
      "area": 2,
      "links": [
        "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": 214,
      "hash": "sha256:d8e09ded3ff06a56262043ffc95a1a300a9b19574c210e2d6d9ab07a12a49b92",
      "area": 2,
      "links": [
        "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": "Another domain uses a private declaration",
      "tokens": 482,
      "hash": "sha256:72059cef84b98c345dfe97efd939a82aefb22a6188d77a6d35c1278926f8d4b1",
      "area": 1,
      "links": [
        "project-layout-and-modules"
      ]
    },
    {
      "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": 348,
      "hash": "sha256:556b85a31bc59e6bd4d20f2d1093efafd9a7efada3c50c0f2f7c61bf40d7d283",
      "area": 14,
      "links": [
        "cli.check_arguments"
      ]
    },
    {
      "id": "jadpo-test",
      "kind": "command",
      "title": "jadpo test",
      "summary": "Run tests.",
      "tokens": 759,
      "hash": "sha256:1d51ee725b99a2a371dfea8e4c7faeb81e0af3f752ea3949e5635e0de95d4f36",
      "area": 14,
      "links": [
        "cli.test_arguments",
        "test.assertion_failed",
        "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"
      ]
    },
    {
      "id": "jadpo-dev",
      "kind": "command",
      "title": "jadpo dev",
      "summary": "Run the app and reload on every save.",
      "tokens": 532,
      "hash": "sha256:304bc6f331cae43cc8a7f8a18d4a5e36659247405cef2019d84abe5a708dc9da",
      "area": 14,
      "links": [
        "cli.dev_arguments",
        "cli.dev_port_invalid",
        "cli.dev_start_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-build",
      "kind": "command",
      "title": "jadpo build",
      "summary": "Build the app to deploy.",
      "tokens": 660,
      "hash": "sha256:843c884faa5fa6419770402d9cabf93c00640a0fbfedfa9aff2e9e3ce850618e",
      "area": 14,
      "links": [
        "cli.build_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.build_failed",
        "toolchain.fetch_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-fmt",
      "kind": "command",
      "title": "jadpo fmt",
      "summary": "Format source files.",
      "tokens": 425,
      "hash": "sha256:2bbd53fb2688df8fa6d5442e51fdabbb20edf3a1b2323315f1e715dfd8af385b",
      "area": 14,
      "links": [
        "cli.fmt_arguments"
      ]
    },
    {
      "id": "jadpo-package",
      "kind": "command",
      "title": "jadpo package",
      "summary": "Show, check, import and install packages.",
      "tokens": 1609,
      "hash": "sha256:bd9284bbb3911feccac821089624721391bbf0658fd7731d6fa75964f94ee986",
      "area": 14,
      "links": [
        "cli.package_arguments",
        "cli.package_not_openapi",
        "cli.package_unreadable",
        "install.fetch_failed",
        "install.in_use",
        "install.surface_mismatch",
        "package.name_taken",
        "publish.breaking_change",
        "publish.changelog_missing",
        "publish.description_missing",
        "publish.example_failed",
        "publish.example_missing",
        "record.edited",
        "recording.failed",
        "recording.refused",
        "test.failed",
        "toolchain.artifact_write_failed",
        "toolchain.not_built_yet",
        "toolchain.project_not_found",
        "toolchain.source_read_failed"
      ]
    },
    {
      "id": "jadpo-migrate",
      "kind": "command",
      "title": "jadpo migrate",
      "summary": "Write and apply migrations.",
      "tokens": 661,
      "hash": "sha256:f6b13b5a52482eb8997910e48acdc97dfb782de9b50b640546945decf1e165a3",
      "area": 14,
      "links": [
        "cli.migrate_arguments",
        "migration.apply_failed",
        "migration.store_diverged",
        "toolchain.artifact_write_failed",
        "toolchain.not_built_yet",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-sql",
      "kind": "command",
      "title": "jadpo sql",
      "summary": "Show the SQL a query or action sends.",
      "tokens": 466,
      "hash": "sha256:dc00c3c0deae63211e5fe2e249f0d8d918f3a2edef31a0fb5f8faa838796dac5",
      "area": 14,
      "links": [
        "cli.sql_arguments",
        "toolchain.not_built_yet",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-routes",
      "kind": "command",
      "title": "jadpo routes",
      "summary": "List every route.",
      "tokens": 310,
      "hash": "sha256:9220f8e2ff2163fd4854549ec71c27eb03488922b3801ca409cdb5e48625f385",
      "area": 14,
      "links": [
        "cli.routes_arguments",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-ai",
      "kind": "command",
      "title": "jadpo ai",
      "summary": "Show prompts, record, usage.",
      "tokens": 693,
      "hash": "sha256:34740b131f5840be17821a9a62cd241d2d67fed52de82a5980ef53f7af89b1f1",
      "area": 14,
      "links": [
        "ai.usage_unavailable",
        "cli.ai_arguments",
        "recording.failed",
        "recording.refused",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-calls",
      "kind": "command",
      "title": "jadpo calls",
      "summary": "Show provider calls in dev.",
      "tokens": 531,
      "hash": "sha256:0d19f9e51ed8f92606c8276ce7548150f14e8771e7be530170ed404ad29bb136",
      "area": 14,
      "links": [
        "cli.calls_arguments",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-email",
      "kind": "command",
      "title": "jadpo email",
      "summary": "Read the dev inbox and check mail.",
      "tokens": 597,
      "hash": "sha256:9fb620cd31368a01755705ab4e3c16847a3d7f4e9d9e61b8ac38a014c9a9d368",
      "area": 14,
      "links": [
        "cli.email_arguments",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-why",
      "kind": "command",
      "title": "jadpo why",
      "summary": "Explain why a schedule didn't run.",
      "tokens": 392,
      "hash": "sha256:60377455a4fec1d181fd1503207c111e8e8d0abe048b8b1001389cb2ffb45aa2",
      "area": 14,
      "links": [
        "cli.why_arguments",
        "schedules.unavailable",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-api",
      "kind": "command",
      "title": "jadpo api",
      "summary": "Rewrite the API records.",
      "tokens": 386,
      "hash": "sha256:2f6972b69c2dbbb3d97b431e41c44e06187081ae08d3035ae0245379fc4f59aa",
      "area": 14,
      "links": [
        "cli.api_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-records",
      "kind": "command",
      "title": "jadpo records",
      "summary": "List and update the records.",
      "tokens": 517,
      "hash": "sha256:f6bb244b82c271ecf6ec9418a7e617908a5a05af6ee33b4f2140d57834aa836d",
      "area": 14,
      "links": [
        "cli.records_arguments",
        "record.edited",
        "record.format_newer",
        "record.out_of_date",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-declines",
      "kind": "command",
      "title": "jadpo declines",
      "summary": "List or clear declines.",
      "tokens": 474,
      "hash": "sha256:9bacb0d8d91ebe2e2d8fd5588819a286b714d1f699714550db91a8ebaebff567",
      "area": 14,
      "links": [
        "cli.declines_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-fix",
      "kind": "command",
      "title": "jadpo fix",
      "summary": "Fix a standard type's finding.",
      "tokens": 579,
      "hash": "sha256:767a4815be7a7ccefb44e867a5df61a62891dc24f657c638bdb318527205d704",
      "area": 14,
      "links": [
        "cli.fix_arguments",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found",
        "type.standard_clash",
        "type.standard_exists"
      ]
    },
    {
      "id": "jadpo-suggest",
      "kind": "command",
      "title": "jadpo suggest",
      "summary": "Hint where a standard type or operation fits.",
      "tokens": 823,
      "hash": "sha256:8b226b580863e0945c55121d36bf0eeedc5ad8977040ef356d6d52684e2588fb",
      "area": 14,
      "links": [
        "cli.suggest_arguments",
        "suggest.record_invalid",
        "suggest.share_failed",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-translations",
      "kind": "command",
      "title": "jadpo translations",
      "summary": "Keep translations up to date.",
      "tokens": 862,
      "hash": "sha256:bba4df199b3bfc026df32bea3aceb8146b00608768989bc8d412a7b61f655cd3",
      "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"
      ]
    },
    {
      "id": "jadpo-schedules",
      "kind": "command",
      "title": "jadpo schedules",
      "summary": "Watch and control schedules.",
      "tokens": 699,
      "hash": "sha256:bb537251c80f886c7f006c9fe5044b07c7750da2eeebc1076ba99c8ad789e5ca",
      "area": 14,
      "links": [
        "cli.schedules_arguments",
        "schedules.lease_held",
        "schedules.no_tick",
        "schedules.run_failed",
        "schedules.unavailable",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-deliveries",
      "kind": "command",
      "title": "jadpo deliveries",
      "summary": "Retry, dismiss or cancel deliveries.",
      "tokens": 1003,
      "hash": "sha256:6c2b0ba3c48062d712ed283145ed0fd07c36b05e5c7b0599891423aa4b1dff6e",
      "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"
      ]
    },
    {
      "id": "jadpo-runs",
      "kind": "command",
      "title": "jadpo runs",
      "summary": "Check runs before a deploy.",
      "tokens": 527,
      "hash": "sha256:bd0ab5c1cc8dc172f34fa078ca94f65af88acd684f41734a46d8978fedcc9746",
      "area": 14,
      "links": [
        "cli.runs_arguments",
        "runs.unavailable",
        "toolchain.project_not_found"
      ]
    },
    {
      "id": "jadpo-new",
      "kind": "command",
      "title": "jadpo new",
      "summary": "Start a project.",
      "tokens": 544,
      "hash": "sha256:a28b7611bb6e4a3b4c19750f98c56f8064c59fccfe7242bf374a70e574bcfb72",
      "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"
      ]
    },
    {
      "id": "jadpo-config",
      "kind": "command",
      "title": "jadpo config",
      "summary": "Check and set local settings.",
      "tokens": 963,
      "hash": "sha256:e24b9e94507813821b576e6d68edaf88b72db6f08460e8c3219f6a8580ce71b8",
      "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"
      ]
    },
    {
      "id": "jadpo-completions",
      "kind": "command",
      "title": "jadpo completions",
      "summary": "Turn on Tab completion.",
      "tokens": 326,
      "hash": "sha256:27e177f4f0fca88c1905ad7cd715fa9ec383ac2cc1b1e31c51b9b921e8ef0eb7",
      "area": 14,
      "links": [
        "cli.completions_arguments"
      ]
    },
    {
      "id": "jadpo-toolchain",
      "kind": "command",
      "title": "jadpo toolchain",
      "summary": "Manage Jadpo releases.",
      "tokens": 560,
      "hash": "sha256:d7f96173850da83eecdadda06a5c41ed34e6767eb92be3720a4c7b4fceb5f6f4",
      "area": 14,
      "links": [
        "cli.toolchain_arguments",
        "record.edited",
        "toolchain.artifact_write_failed",
        "toolchain.project_not_found",
        "toolchain.version_newer",
        "toolchain.version_older"
      ]
    },
    {
      "id": "jadpo-lsp",
      "kind": "command",
      "title": "jadpo lsp",
      "summary": "Run the language server for editors.",
      "tokens": 298,
      "hash": "sha256:b19105380cffdcf1ddf1c621643401305d53ba4da3453ffb87a4765478112c2e",
      "area": 14,
      "links": [
        "cli.lsp_arguments"
      ]
    },
    {
      "id": "jadpo-help",
      "kind": "command",
      "title": "jadpo help",
      "summary": "Show commands, flags and examples.",
      "tokens": 295,
      "hash": "sha256:a463f7b023ec72b44e61c99156db3f96828f9d6c4fc050f5f4356bc6226a0096",
      "area": 14,
      "links": [
        "cli.help_arguments"
      ]
    },
    {
      "id": "jadpo-version",
      "kind": "command",
      "title": "jadpo version",
      "summary": "Print the version.",
      "tokens": 230,
      "hash": "sha256:194dc3dcf455ec9876c6830a3a37d99a9188868cbaa06a5ce5cd870ec3ea6545",
      "area": 14,
      "links": [
        "cli.version_arguments"
      ]
    }
  ]
}
