[{"data":1,"prerenderedAt":9},["ShallowReactive",2],{"doc-how-oracles-work":3},{"blocks":4,"markdown":8},[5],{"kind":6,"html":7},"html","\u003Cp>Forma turns a request in plain language into an artifact — a chart, a figure —\nand tells you whether it holds up. Every answer is checked against a versioned set of rules before it is returned to you.\u003C\u002Fp>\n\u003Ch2 id=\"the-contract\">The contract\u003C\u002Fh2>\n\u003Col>\n\u003Cli>You send an \u003Cstrong>intent\u003C\u002Fstrong> to an \u003Cstrong>oracle\u003C\u002Fstrong> — a named service for one kind of\nartifact, such as \u003Ccode>chart\u003C\u002Fcode>, \u003Ccode>vector-graphics\u003C\u002Fcode> or \u003Ccode>coverage-policy\u003C\u002Fcode>: what you want, in plain\nlanguage.\u003C\u002Fli>\n\u003Cli>You get back a \u003Cstrong>verdict\u003C\u002Fstrong>. \u003Ccode class=\"chip chip--valid\">valid\u003C\u002Fcode> comes with the artifact. \u003Ccode class=\"chip chip--invalid\">invalid\u003C\u002Fcode> comes\nwith the reason it was refused. \u003Ccode class=\"chip chip--error\">error\u003C\u002Fcode> means the failure was ours.\u003C\u002Fli>\n\u003Cli>A \u003Ccode class=\"chip chip--valid\">valid\u003C\u002Fcode> answer carries \u003Cstrong>\u003Ccode>verified_by\u003C\u002Fcode>\u003C\u002Fstrong>, which identifies the exact version of the rules it was\nchecked against.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Forma's \u003Cstrong>check\u003C\u002Fstrong> accepts an answer only if it follows the oracle's rules. The\nrules are versioned and not published; \u003Ccode>verified_by\u003C\u002Fcode> identifies the version that\naccepted an answer: \u003Ccode class=\"chip chip--cite\">chart@6baf09f0\u003C\u002Fcode> is the \u003Ccode>chart\u003C\u002Fcode> rules at that version.\u003C\u002Fp>\n\u003Cp>Most calls come back in about two seconds; allow up to 120 seconds for the\nslowest. A call is counted in \u003Ca href=\"\u002Flimits\">credits\u003C\u002Fa> rather than requests.\u003C\u002Fp>\n\u003Ch2 id=\"what-this-buys-you\">What this buys you\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>A refusal is a real answer.\u003C\u002Fstrong> Most of what an API of this kind can do wrong is\nreturn something well-formed and wrong. Here, an answer that does not pass the\nrules is not handed to you as if it did — you are told. That is the product,\nwhich is why a refusal is \u003Ca href=\"\u002Fverdicts\">billable\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>The rules are versioned on their own.\u003C\u002Fstrong> The rules that accept an answer are\nseparate from whatever produced it, and they carry their own version — see\n\u003Ca href=\"\u002Fcitations\">Citations\u003C\u002Fa>. How answers are produced will change; what your\ncitation points at does not.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>You write intent, never rules.\u003C\u002Fstrong> There is no endpoint that takes rules.\nYou describe the outcome you want in plain language; deciding what satisfies it\nis our side of the line, and it stays our side so we can keep making it better\nwithout breaking anything you wrote.\u003C\u002Fp>\n\u003Ch2 id=\"what-it-does-not-do\">What it does not do\u003C\u002Fh2>\n\u003Cp>It does not check meaning. A \u003Ccode class=\"chip chip--valid\">valid\u003C\u002Fcode> artifact is well-formed and follows the\nrules; it is not necessarily the chart you meant — a valid chart of the wrong\ncolumn is still valid. Look at what you got.\u003C\u002Fp>\n\u003Cp>It does not guarantee an answer. Some intents cannot be satisfied and the honest\nresult is \u003Ccode class=\"chip chip--invalid\">invalid\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>It does not guarantee the same answer twice. See\n\u003Ca href=\"\u002Fcitations#determinism\">Determinism\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>It does not stream. A call returns when the verdict does.\u003C\u002Fp>\n","# How Forma works\n\n> What you send, what you get back, and what a verdict promises.\n\nForma turns a request in plain language into an artifact — a chart, a figure —\nand tells you whether it holds up. Every answer is checked against a versioned set of rules before it is returned to you.\n\n## The contract\n\n1. You send an **intent** to an **oracle** — a named service for one kind of\n   artifact, such as `chart`, `vector-graphics` or `coverage-policy`: what you want, in plain\n   language.\n2. You get back a **verdict**. `valid` comes with the artifact. `invalid` comes\n   with the reason it was refused. `error` means the failure was ours.\n3. A `valid` answer carries **`verified_by`**, which identifies the exact version of the rules it was\n   checked against.\n\nForma's **check** accepts an answer only if it follows the oracle's rules. The\nrules are versioned and not published; `verified_by` identifies the version that\naccepted an answer: `chart@6baf09f0` is the `chart` rules at that version.\n\nMost calls come back in about two seconds; allow up to 120 seconds for the\nslowest. A call is counted in [credits](https:\u002F\u002Fdocs.formalogic.io\u002Flimits) rather than requests.\n\n## What this buys you\n\n**A refusal is a real answer.** Most of what an API of this kind can do wrong is\nreturn something well-formed and wrong. Here, an answer that does not pass the\nrules is not handed to you as if it did — you are told. That is the product,\nwhich is why a refusal is [billable](https:\u002F\u002Fdocs.formalogic.io\u002Fverdicts).\n\n**The rules are versioned on their own.** The rules that accept an answer are\nseparate from whatever produced it, and they carry their own version — see\n[Citations](https:\u002F\u002Fdocs.formalogic.io\u002Fcitations). How answers are produced will change; what your\ncitation points at does not.\n\n**You write intent, never rules.** There is no endpoint that takes rules.\nYou describe the outcome you want in plain language; deciding what satisfies it\nis our side of the line, and it stays our side so we can keep making it better\nwithout breaking anything you wrote.\n\n## What it does not do\n\nIt does not check meaning. A `valid` artifact is well-formed and follows the\nrules; it is not necessarily the chart you meant — a valid chart of the wrong\ncolumn is still valid. Look at what you got.\n\nIt does not guarantee an answer. Some intents cannot be satisfied and the honest\nresult is `invalid`.\n\nIt does not guarantee the same answer twice. See\n[Determinism](https:\u002F\u002Fdocs.formalogic.io\u002Fcitations#determinism).\n\nIt does not stream. A call returns when the verdict does.\n",1793819973842]