{
  "openapi": "3.1.0",
  "info": {
    "title": "aontu content API",
    "summary": "The machine-readable surface of the aontu documentation site.",
    "description": "aontu is a language for type-safe system definitions: the entities a\nsystem contains, the types they must satisfy, and the relations that\nmust hold between them. The definition is machine-checkable, so a\nproposed change is admitted or refused with the offending line named,\nwhich is what makes it usable as a guardrail for a coding agent. It is\ndistributed as an npm package and a Go module and runs on your own\nmachine, so there is no product API to call and this document does not\npretend otherwise.\n\nWhat it describes is the content API this site serves to programs:\nevery page has a markdown twin, an index enumerates the corpus, the\ncomplete error-code registry is published as JSON, the grammar is\npublished for constrained decoding, and errors come back as JSON.\n\nTo run aontu itself, see `x-tooling`: the package ships a CLI and an\nMCP server. Read `/llms.txt` first.",
    "version": "1.0.0",
    "license": {
      "name": "MIT",
      "identifier": "MIT"
    },
    "contact": {
      "name": "aontu issues",
      "url": "https://github.com/aontu-lang/aontu/issues"
    }
  },
  "externalDocs": {
    "description": "The engine itself, published as npm `aontu` and Go module `github.com/aontu-lang/aontu/go`.",
    "url": "https://github.com/aontu-lang/aontu"
  },
  "servers": [
    {
      "url": "https://aontu.dev",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "index",
      "description": "Documents that enumerate the site for an agent."
    },
    {
      "name": "content",
      "description": "The documentation itself, as markdown."
    },
    {
      "name": "errors",
      "description": "The error-code registry the engine raises from."
    },
    {
      "name": "grammar",
      "description": "The published grammar, for constrained decoding."
    },
    {
      "name": "meta",
      "description": "Documents describing the site rather than the language."
    }
  ],
  "paths": {
    "/llms.txt": {
      "get": {
        "operationId": "getSiteIndex",
        "tags": [
          "index"
        ],
        "summary": "The site index, written for agents",
        "description": "A short markdown index of every documentation page and how-to guide, each linked to its markdown twin, plus when to reach for aontu and how to run it. Start here.",
        "responses": {
          "200": {
            "description": "The index.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "operationId": "getFullCorpus",
        "tags": [
          "index"
        ],
        "summary": "Every page, concatenated",
        "description": "The entire documentation corpus in one plain-text document, for a caller that would rather make one request than follow the index. Large; prefer `getSiteIndex` plus `getPageMarkdown` when you know what you need.",
        "responses": {
          "200": {
            "description": "The whole corpus.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/errors.json": {
      "get": {
        "operationId": "getErrorRegistry",
        "tags": [
          "errors"
        ],
        "summary": "Every error code the engine can raise",
        "description": "The complete registry, with the class that decides what a caller should do about each code. Match a code exactly first; a code marked as a family is never emitted verbatim, because the engine appends a name or value to it, so fall back to the longest matching family prefix. Message text is deliberately absent: the engine is its own catalogue.",
        "responses": {
          "200": {
            "description": "The registry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorRegistry"
                }
              }
            }
          }
        }
      }
    },
    "/errors/{code}.json": {
      "get": {
        "operationId": "getErrorCode",
        "tags": [
          "errors"
        ],
        "summary": "One error code",
        "description": "A single entry from the registry, for a caller resolving one code rather than holding the whole catalogue.",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "description": "The code's slug, as `getErrorRegistry` reports it.",
            "schema": {
              "type": "string",
              "enum": [
                "abnf_grammar",
                "aggregate_data",
                "aggregate_empty",
                "alias_budget",
                "alias_colon",
                "alias_in_path",
                "alias_not_toplevel",
                "arg",
                "bare_punct",
                "budget_passes",
                "close",
                "closed",
                "compat_default_changed",
                "compat_marks_changed",
                "compat_narrowed",
                "compat_outcome_changed",
                "compat_required_added",
                "compat_undetermined",
                "conjunct",
                "constraint",
                "constraint_pattern",
                "decimal_budget",
                "decimal_syntax",
                "deprecated",
                "disjunct_no_gen",
                "divide_by_zero",
                "each_data",
                "elided_value",
                "emit_body",
                "emit_data",
                "emit_none",
                "emit_ref",
                "emit_table",
                "emit_template",
                "empty",
                "empty-dist",
                "esc_variant",
                "exact_float_mix",
                "export_arg",
                "filter_data",
                "float_overflow",
                "form_data",
                "format_check",
                "func",
                "func_arg",
                "func_arity",
                "func~3a",
                "import_not_exported",
                "include_denied",
                "include_extension",
                "incomplete_expression",
                "inexact_divide",
                "inexact_integer_sum",
                "internal",
                "invalid_var_kind",
                "invalid-arg",
                "inverse_name",
                "join_member",
                "key_level",
                "list",
                "list_length",
                "listval_no_gen",
                "listval_required",
                "listval_spread_required",
                "literal_nil",
                "lossy_integer_literal",
                "make",
                "map",
                "mapval_no_gen",
                "mapval_required",
                "mapval_spread_required",
                "match_none",
                "max_depth",
                "merge_conflict",
                "module_depth",
                "module_integrity",
                "module_local",
                "module_missing",
                "module_moved",
                "module_path",
                "multisource_not_found",
                "must",
                "negative",
                "nil_gen",
                "no_first_arg",
                "no_gen",
                "no_path",
                "no_scalar_unify",
                "not_number",
                "not-scalar-type",
                "op",
                "op~3a",
                "op~5b",
                "operate",
                "pack_data",
                "pack_key",
                "parse",
                "parse_arg",
                "parse_bad_src",
                "parse_failed",
                "parse_unknown",
                "patch_ambiguous",
                "patch_assignment",
                "patch_not_editable",
                "patch_span_mismatch",
                "path_address",
                "path_cycle",
                "pick_key",
                "place_pair",
                "pref_implicit_bag",
                "pref_not_instance",
                "pref_rank_clash",
                "recursion_budget",
                "recursion_unexpanded",
                "ref",
                "ref~5b",
                "refer_address",
                "refer_unresolved",
                "rel_address",
                "rel_unresolved",
                "relation_cycle",
                "relation_inverse_missing",
                "render_lang",
                "render_path",
                "render_profile",
                "render_strict",
                "render_unit",
                "rep_pattern",
                "rep_sub",
                "replace_overlap",
                "replace_unused",
                "replace_value",
                "required_listelem",
                "reserved_key",
                "resolve",
                "scalar_kind",
                "scalar_value",
                "scalar-type",
                "sort_dir",
                "sort_domain",
                "sort_key",
                "split_sep",
                "sub_default_indeterminate",
                "sub_disjunct_distribution",
                "sub_evaluate_only",
                "sub_path_dependent_spread",
                "sub_unresolved",
                "syntax",
                "unify_cycle",
                "unify_failed",
                "unify_no_res",
                "unify_no_src",
                "unite",
                "unknown_function",
                "unknown_op",
                "unknown_var",
                "usc_malformed",
                "var",
                "var~5b",
                "view_at_required",
                "view_document_shape",
                "view_group_required",
                "view_kind_unknown",
                "view_line_break",
                "view_profile_unknown",
                "view_relation_ambiguous",
                "view_relation_unknown",
                "view_rows_exceeded",
                "view_sets_required",
                "view_sets_shape",
                "view_style_profile",
                "view_style_unknown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorCode"
                }
              }
            }
          },
          "404": {
            "description": "No such code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/grammar/{file}": {
      "get": {
        "operationId": "getGrammar",
        "tags": [
          "grammar"
        ],
        "summary": "The published grammar",
        "description": "aontu's grammar, suitable for constrained decoding: give it to a sampler and the model can only emit syntactically valid aontu. Published in GBNF (llama.cpp and compatible samplers) and Lark (Python parsing). Served as plain text, cross-origin.",
        "parameters": [
          {
            "name": "file",
            "in": "path",
            "required": true,
            "description": "The grammar file name.",
            "schema": {
              "type": "string",
              "enum": [
                "aontu.abnf",
                "aontu.gbnf",
                "aontu.lark",
                "aontu.tmLanguage.json"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The grammar.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such grammar file.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/versions.json": {
      "get": {
        "operationId": "getVersions",
        "tags": [
          "meta"
        ],
        "summary": "What this site runs and what it documents",
        "description": "The `aontu` version this site executes its examples against, and the size of each surface. The running version and the documented version are stated separately because the synced documentation can be ahead of the published package.",
        "responses": {
          "200": {
            "description": "The version document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApiSpec",
        "tags": [
          "meta"
        ],
        "summary": "This document",
        "description": "The OpenAPI 3.1 description of this site's machine surface.",
        "responses": {
          "200": {
            "description": "The specification.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/robots.txt": {
      "get": {
        "operationId": "getRobotsTxt",
        "tags": [
          "meta"
        ],
        "summary": "Crawler policy",
        "description": "The robots policy for this site, which also names the sitemap. Nothing here is disallowed to well-behaved agents.",
        "responses": {
          "200": {
            "description": "The policy.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap-index.xml": {
      "get": {
        "operationId": "getSitemapIndex",
        "tags": [
          "meta"
        ],
        "summary": "Sitemap index",
        "description": "The XML sitemap index for every page on this site.",
        "responses": {
          "200": {
            "description": "The sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/{page}.md": {
      "get": {
        "operationId": "getPageMarkdown",
        "tags": [
          "content"
        ],
        "summary": "One page, as markdown",
        "description": "The markdown twin of a page. Identical bytes to sending `Accept: text/markdown` to the page's own URL, and the form to prefer when you can build the path yourself. Answers cross-origin.",
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "description": "The page path without its leading slash and without the `.md` suffix, for example `docs/tutorial`. The enumeration is the complete set of pages that have a twin.",
            "schema": {
              "type": "string",
              "enum": [
                "index",
                "why",
                "about",
                "contact",
                "privacy",
                "playground",
                "search",
                "errors",
                "errors/abnf_grammar",
                "errors/aggregate_data",
                "errors/aggregate_empty",
                "errors/alias_budget",
                "errors/alias_colon",
                "errors/alias_in_path",
                "errors/alias_not_toplevel",
                "errors/arg",
                "errors/bare_punct",
                "errors/budget_passes",
                "errors/close",
                "errors/closed",
                "errors/compat_default_changed",
                "errors/compat_marks_changed",
                "errors/compat_narrowed",
                "errors/compat_outcome_changed",
                "errors/compat_required_added",
                "errors/compat_undetermined",
                "errors/conjunct",
                "errors/constraint",
                "errors/constraint_pattern",
                "errors/decimal_budget",
                "errors/decimal_syntax",
                "errors/deprecated",
                "errors/disjunct_no_gen",
                "errors/divide_by_zero",
                "errors/each_data",
                "errors/elided_value",
                "errors/emit_body",
                "errors/emit_data",
                "errors/emit_none",
                "errors/emit_ref",
                "errors/emit_table",
                "errors/emit_template",
                "errors/empty",
                "errors/empty-dist",
                "errors/esc_variant",
                "errors/exact_float_mix",
                "errors/export_arg",
                "errors/filter_data",
                "errors/float_overflow",
                "errors/form_data",
                "errors/format_check",
                "errors/func",
                "errors/func_arg",
                "errors/func_arity",
                "errors/func~3a",
                "errors/import_not_exported",
                "errors/include_denied",
                "errors/include_extension",
                "errors/incomplete_expression",
                "errors/inexact_divide",
                "errors/inexact_integer_sum",
                "errors/internal",
                "errors/invalid_var_kind",
                "errors/invalid-arg",
                "errors/inverse_name",
                "errors/join_member",
                "errors/key_level",
                "errors/list",
                "errors/list_length",
                "errors/listval_no_gen",
                "errors/listval_required",
                "errors/listval_spread_required",
                "errors/literal_nil",
                "errors/lossy_integer_literal",
                "errors/make",
                "errors/map",
                "errors/mapval_no_gen",
                "errors/mapval_required",
                "errors/mapval_spread_required",
                "errors/match_none",
                "errors/max_depth",
                "errors/merge_conflict",
                "errors/module_depth",
                "errors/module_integrity",
                "errors/module_local",
                "errors/module_missing",
                "errors/module_moved",
                "errors/module_path",
                "errors/multisource_not_found",
                "errors/must",
                "errors/negative",
                "errors/nil_gen",
                "errors/no_first_arg",
                "errors/no_gen",
                "errors/no_path",
                "errors/no_scalar_unify",
                "errors/not_number",
                "errors/not-scalar-type",
                "errors/op",
                "errors/op~3a",
                "errors/op~5b",
                "errors/operate",
                "errors/pack_data",
                "errors/pack_key",
                "errors/parse",
                "errors/parse_arg",
                "errors/parse_bad_src",
                "errors/parse_failed",
                "errors/parse_unknown",
                "errors/patch_ambiguous",
                "errors/patch_assignment",
                "errors/patch_not_editable",
                "errors/patch_span_mismatch",
                "errors/path_address",
                "errors/path_cycle",
                "errors/pick_key",
                "errors/place_pair",
                "errors/pref_implicit_bag",
                "errors/pref_not_instance",
                "errors/pref_rank_clash",
                "errors/recursion_budget",
                "errors/recursion_unexpanded",
                "errors/ref",
                "errors/ref~5b",
                "errors/refer_address",
                "errors/refer_unresolved",
                "errors/rel_address",
                "errors/rel_unresolved",
                "errors/relation_cycle",
                "errors/relation_inverse_missing",
                "errors/render_lang",
                "errors/render_path",
                "errors/render_profile",
                "errors/render_strict",
                "errors/render_unit",
                "errors/rep_pattern",
                "errors/rep_sub",
                "errors/replace_overlap",
                "errors/replace_unused",
                "errors/replace_value",
                "errors/required_listelem",
                "errors/reserved_key",
                "errors/resolve",
                "errors/scalar_kind",
                "errors/scalar_value",
                "errors/scalar-type",
                "errors/sort_dir",
                "errors/sort_domain",
                "errors/sort_key",
                "errors/split_sep",
                "errors/sub_default_indeterminate",
                "errors/sub_disjunct_distribution",
                "errors/sub_evaluate_only",
                "errors/sub_path_dependent_spread",
                "errors/sub_unresolved",
                "errors/syntax",
                "errors/unify_cycle",
                "errors/unify_failed",
                "errors/unify_no_res",
                "errors/unify_no_src",
                "errors/unite",
                "errors/unknown_function",
                "errors/unknown_op",
                "errors/unknown_var",
                "errors/usc_malformed",
                "errors/var",
                "errors/var~5b",
                "errors/view_at_required",
                "errors/view_document_shape",
                "errors/view_group_required",
                "errors/view_kind_unknown",
                "errors/view_line_break",
                "errors/view_profile_unknown",
                "errors/view_relation_ambiguous",
                "errors/view_relation_unknown",
                "errors/view_rows_exceeded",
                "errors/view_sets_required",
                "errors/view_sets_shape",
                "errors/view_style_profile",
                "errors/view_style_unknown",
                "docs",
                "docs/tutorial",
                "docs/tutorial-config",
                "docs/tutorial-graph",
                "docs/tutorial-package",
                "docs/tutorial-generate",
                "docs/reference-language",
                "docs/reference-generation",
                "docs/reference-functions",
                "docs/reference-errors",
                "docs/reference-packages",
                "docs/reference-grammar",
                "docs/reference-agents",
                "docs/reference-api",
                "docs/lsp",
                "docs/use-cases",
                "docs/unification",
                "docs/explanation",
                "docs/trust",
                "how-to",
                "how-to/apply-a-template-to-many-keys",
                "how-to/call-from-go",
                "how-to/call-from-typescript",
                "how-to/carry-exact-money-over-json",
                "how-to/change-a-pinned-value",
                "how-to/change-a-value-with-an-overlay",
                "how-to/check-relations",
                "how-to/collect-errors",
                "how-to/constrain-list-elements",
                "how-to/define-a-recursive-schema",
                "how-to/draw-a-model",
                "how-to/explain-a-value",
                "how-to/export-json-schema",
                "how-to/find-dead-entries",
                "how-to/forbid-unexpected-keys",
                "how-to/format-a-document",
                "how-to/gate-changes-by-role",
                "how-to/gate-schema-changes",
                "how-to/generate-code",
                "how-to/give-an-agent-an-entrypoint",
                "how-to/inject-host-values",
                "how-to/keep-schema-out-of-output",
                "how-to/make-a-field-optional",
                "how-to/name-a-reusable-constraint",
                "how-to/pin-a-document-hash",
                "how-to/provide-defaults",
                "how-to/publish-a-package",
                "how-to/query-a-path",
                "how-to/query-reachability",
                "how-to/read-a-conflict-error",
                "how-to/reference-and-reshape",
                "how-to/run-cli-and-repl",
                "how-to/seal-generated-children",
                "how-to/see-canonical-form",
                "how-to/split-a-model-across-files",
                "how-to/validate-in-ci",
                "how-to/vendor-a-dependency-closure",
                "how-to/vendor-by-hand",
                "how-to/wire-your-editor",
                "use-cases",
                "use-cases/01-service-catalog",
                "use-cases/02-deploy-config",
                "use-cases/03-api-contract",
                "use-cases/04-schema-evolution",
                "use-cases/05-rbac-policy",
                "use-cases/06-k8s-golden-path",
                "use-cases/07-event-contracts",
                "use-cases/08-feature-flags",
                "use-cases/09-agent-tools",
                "use-cases/10-data-model",
                "use-cases/11-shared-modules",
                "use-cases/12-relations",
                "use-cases/13-recursive-schema",
                "use-cases/14-jsonschema-export",
                "use-cases/15-code-generation",
                "use-cases/16-module-deps",
                "use-cases/17-lambda-handlers",
                "use-cases/18-role-permissions",
                "examples",
                "examples/rb-solar",
                "examples/rb-solar/model",
                "examples/rb-solar/rails-code",
                "examples/rb-solar/erd",
                "examples/rb-solar/change-and-check"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, as markdown.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page, in whichever representation the caller asked for: JSON under `Accept: application/json`, the designed HTML page under `Accept: text/html`, and markdown otherwise, including for a caller that named nothing.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/{page}": {
      "get": {
        "operationId": "getPage",
        "tags": [
          "content"
        ],
        "summary": "One page, in the representation you ask for",
        "description": "A page URL. What comes back depends on `Accept`: `text/markdown` returns the same bytes as the `.md` twin with `Vary: Accept`, `application/json` turns an error into the structured shape, and anything else returns the HTML page.",
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "description": "The page path without its leading slash, for example `docs/tutorial`. The home page is `/` itself and is not in this enumeration.",
            "schema": {
              "type": "string",
              "enum": [
                "why",
                "about",
                "contact",
                "privacy",
                "playground",
                "search",
                "errors",
                "errors/abnf_grammar",
                "errors/aggregate_data",
                "errors/aggregate_empty",
                "errors/alias_budget",
                "errors/alias_colon",
                "errors/alias_in_path",
                "errors/alias_not_toplevel",
                "errors/arg",
                "errors/bare_punct",
                "errors/budget_passes",
                "errors/close",
                "errors/closed",
                "errors/compat_default_changed",
                "errors/compat_marks_changed",
                "errors/compat_narrowed",
                "errors/compat_outcome_changed",
                "errors/compat_required_added",
                "errors/compat_undetermined",
                "errors/conjunct",
                "errors/constraint",
                "errors/constraint_pattern",
                "errors/decimal_budget",
                "errors/decimal_syntax",
                "errors/deprecated",
                "errors/disjunct_no_gen",
                "errors/divide_by_zero",
                "errors/each_data",
                "errors/elided_value",
                "errors/emit_body",
                "errors/emit_data",
                "errors/emit_none",
                "errors/emit_ref",
                "errors/emit_table",
                "errors/emit_template",
                "errors/empty",
                "errors/empty-dist",
                "errors/esc_variant",
                "errors/exact_float_mix",
                "errors/export_arg",
                "errors/filter_data",
                "errors/float_overflow",
                "errors/form_data",
                "errors/format_check",
                "errors/func",
                "errors/func_arg",
                "errors/func_arity",
                "errors/func~3a",
                "errors/import_not_exported",
                "errors/include_denied",
                "errors/include_extension",
                "errors/incomplete_expression",
                "errors/inexact_divide",
                "errors/inexact_integer_sum",
                "errors/internal",
                "errors/invalid_var_kind",
                "errors/invalid-arg",
                "errors/inverse_name",
                "errors/join_member",
                "errors/key_level",
                "errors/list",
                "errors/list_length",
                "errors/listval_no_gen",
                "errors/listval_required",
                "errors/listval_spread_required",
                "errors/literal_nil",
                "errors/lossy_integer_literal",
                "errors/make",
                "errors/map",
                "errors/mapval_no_gen",
                "errors/mapval_required",
                "errors/mapval_spread_required",
                "errors/match_none",
                "errors/max_depth",
                "errors/merge_conflict",
                "errors/module_depth",
                "errors/module_integrity",
                "errors/module_local",
                "errors/module_missing",
                "errors/module_moved",
                "errors/module_path",
                "errors/multisource_not_found",
                "errors/must",
                "errors/negative",
                "errors/nil_gen",
                "errors/no_first_arg",
                "errors/no_gen",
                "errors/no_path",
                "errors/no_scalar_unify",
                "errors/not_number",
                "errors/not-scalar-type",
                "errors/op",
                "errors/op~3a",
                "errors/op~5b",
                "errors/operate",
                "errors/pack_data",
                "errors/pack_key",
                "errors/parse",
                "errors/parse_arg",
                "errors/parse_bad_src",
                "errors/parse_failed",
                "errors/parse_unknown",
                "errors/patch_ambiguous",
                "errors/patch_assignment",
                "errors/patch_not_editable",
                "errors/patch_span_mismatch",
                "errors/path_address",
                "errors/path_cycle",
                "errors/pick_key",
                "errors/place_pair",
                "errors/pref_implicit_bag",
                "errors/pref_not_instance",
                "errors/pref_rank_clash",
                "errors/recursion_budget",
                "errors/recursion_unexpanded",
                "errors/ref",
                "errors/ref~5b",
                "errors/refer_address",
                "errors/refer_unresolved",
                "errors/rel_address",
                "errors/rel_unresolved",
                "errors/relation_cycle",
                "errors/relation_inverse_missing",
                "errors/render_lang",
                "errors/render_path",
                "errors/render_profile",
                "errors/render_strict",
                "errors/render_unit",
                "errors/rep_pattern",
                "errors/rep_sub",
                "errors/replace_overlap",
                "errors/replace_unused",
                "errors/replace_value",
                "errors/required_listelem",
                "errors/reserved_key",
                "errors/resolve",
                "errors/scalar_kind",
                "errors/scalar_value",
                "errors/scalar-type",
                "errors/sort_dir",
                "errors/sort_domain",
                "errors/sort_key",
                "errors/split_sep",
                "errors/sub_default_indeterminate",
                "errors/sub_disjunct_distribution",
                "errors/sub_evaluate_only",
                "errors/sub_path_dependent_spread",
                "errors/sub_unresolved",
                "errors/syntax",
                "errors/unify_cycle",
                "errors/unify_failed",
                "errors/unify_no_res",
                "errors/unify_no_src",
                "errors/unite",
                "errors/unknown_function",
                "errors/unknown_op",
                "errors/unknown_var",
                "errors/usc_malformed",
                "errors/var",
                "errors/var~5b",
                "errors/view_at_required",
                "errors/view_document_shape",
                "errors/view_group_required",
                "errors/view_kind_unknown",
                "errors/view_line_break",
                "errors/view_profile_unknown",
                "errors/view_relation_ambiguous",
                "errors/view_relation_unknown",
                "errors/view_rows_exceeded",
                "errors/view_sets_required",
                "errors/view_sets_shape",
                "errors/view_style_profile",
                "errors/view_style_unknown",
                "docs",
                "docs/tutorial",
                "docs/tutorial-config",
                "docs/tutorial-graph",
                "docs/tutorial-package",
                "docs/tutorial-generate",
                "docs/reference-language",
                "docs/reference-generation",
                "docs/reference-functions",
                "docs/reference-errors",
                "docs/reference-packages",
                "docs/reference-grammar",
                "docs/reference-agents",
                "docs/reference-api",
                "docs/lsp",
                "docs/use-cases",
                "docs/unification",
                "docs/explanation",
                "docs/trust",
                "how-to",
                "how-to/apply-a-template-to-many-keys",
                "how-to/call-from-go",
                "how-to/call-from-typescript",
                "how-to/carry-exact-money-over-json",
                "how-to/change-a-pinned-value",
                "how-to/change-a-value-with-an-overlay",
                "how-to/check-relations",
                "how-to/collect-errors",
                "how-to/constrain-list-elements",
                "how-to/define-a-recursive-schema",
                "how-to/draw-a-model",
                "how-to/explain-a-value",
                "how-to/export-json-schema",
                "how-to/find-dead-entries",
                "how-to/forbid-unexpected-keys",
                "how-to/format-a-document",
                "how-to/gate-changes-by-role",
                "how-to/gate-schema-changes",
                "how-to/generate-code",
                "how-to/give-an-agent-an-entrypoint",
                "how-to/inject-host-values",
                "how-to/keep-schema-out-of-output",
                "how-to/make-a-field-optional",
                "how-to/name-a-reusable-constraint",
                "how-to/pin-a-document-hash",
                "how-to/provide-defaults",
                "how-to/publish-a-package",
                "how-to/query-a-path",
                "how-to/query-reachability",
                "how-to/read-a-conflict-error",
                "how-to/reference-and-reshape",
                "how-to/run-cli-and-repl",
                "how-to/seal-generated-children",
                "how-to/see-canonical-form",
                "how-to/split-a-model-across-files",
                "how-to/validate-in-ci",
                "how-to/vendor-a-dependency-closure",
                "how-to/vendor-by-hand",
                "how-to/wire-your-editor",
                "use-cases",
                "use-cases/01-service-catalog",
                "use-cases/02-deploy-config",
                "use-cases/03-api-contract",
                "use-cases/04-schema-evolution",
                "use-cases/05-rbac-policy",
                "use-cases/06-k8s-golden-path",
                "use-cases/07-event-contracts",
                "use-cases/08-feature-flags",
                "use-cases/09-agent-tools",
                "use-cases/10-data-model",
                "use-cases/11-shared-modules",
                "use-cases/12-relations",
                "use-cases/13-recursive-schema",
                "use-cases/14-jsonschema-export",
                "use-cases/15-code-generation",
                "use-cases/16-module-deps",
                "use-cases/17-lambda-handlers",
                "use-cases/18-role-permissions",
                "examples",
                "examples/rb-solar",
                "examples/rb-solar/model",
                "examples/rb-solar/rails-code",
                "examples/rb-solar/erd",
                "examples/rb-solar/change-and-check"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "The representation you want back.",
            "schema": {
              "type": "string",
              "enum": [
                "text/markdown",
                "text/html",
                "application/json"
              ],
              "default": "text/html"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page, in whichever representation the caller asked for: JSON under `Accept: application/json`, the designed HTML page under `Accept: text/html`, and markdown otherwise, including for a caller that named nothing.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "description": "The structured error every machine-readable route returns. Also returned by any page URL requested with `Accept: application/json`.",
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "status",
              "code",
              "message"
            ],
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "examples": [
                  404
                ]
              },
              "code": {
                "type": "string",
                "description": "Stable, machine-comparable error code.",
                "examples": [
                  "not_found"
                ]
              },
              "message": {
                "type": "string",
                "description": "One-line human-readable summary."
              },
              "hint": {
                "type": "string",
                "description": "How to recover, naming routes that exist."
              },
              "documentation": {
                "type": "string",
                "format": "uri"
              },
              "resources": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "format": "uri"
                },
                "description": "The site's entry points, keyed by name."
              }
            }
          }
        }
      },
      "ErrorCode": {
        "type": "object",
        "description": "One entry in the engine's error registry.",
        "required": [
          "code",
          "class"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The code as the engine emits it, or its family prefix."
          },
          "slug": {
            "type": "string",
            "description": "The code's URL segment on this site."
          },
          "class": {
            "type": "string",
            "description": "Which class of problem it is, and so what to do about it.",
            "enum": [
              "parse",
              "conflict",
              "incomplete",
              "reference",
              "compat",
              "budget",
              "internal"
            ]
          },
          "family": {
            "type": "boolean",
            "description": "True when the engine appends a name or value to this code, so it is never emitted verbatim and must be matched as a prefix."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The page documenting it."
          }
        }
      },
      "ErrorRegistry": {
        "type": "object",
        "required": [
          "codes",
          "classes",
          "count"
        ],
        "description": "Every code the engine can raise, with the classes that group them.",
        "properties": {
          "$comment": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "description": "Where the registry is generated from."
          },
          "documented_engine": {
            "type": "string",
            "description": "The engine version this registry was taken from."
          },
          "lookup": {
            "type": "string",
            "description": "How to match an emitted code, in one line."
          },
          "count": {
            "type": "integer"
          },
          "classes": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "description": "The classes, keyed by name."
          },
          "codes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ErrorCode"
            }
          }
        }
      }
    }
  },
  "x-tooling": {
    "cli": {
      "install": "npm install -g aontu@0.72.0",
      "run": "aontu <file.aontu>",
      "description": "Resolve a source file and print the unified result, or the conflict."
    },
    "mcp": {
      "transport": "stdio",
      "command": "npx -p aontu@0.72.0 aontu mcp",
      "description": "A local MCP server exposing the engine as tools, answering with the same reports the CLI prints. Runs on the caller's machine over stdio; there is no hosted endpoint, because resolving a document does not need one."
    },
    "lsp": {
      "command": "npx -p aontu@0.72.0 aontu-lsp",
      "description": "A language server for editor integration."
    },
    "package": "https://www.npmjs.com/package/aontu",
    "goModule": "github.com/aontu-lang/aontu/go"
  },
  "x-machine-surface": {
    "startHere": "https://aontu.dev/llms.txt",
    "markdownTwins": {
      "convention": "Append `.md` to any page path, or send `Accept: text/markdown` to the page URL.",
      "count": 264
    },
    "errorRegistry": "https://aontu.dev/errors.json",
    "grammar": [
      "https://aontu.dev/grammar/aontu.abnf",
      "https://aontu.dev/grammar/aontu.gbnf",
      "https://aontu.dev/grammar/aontu.lark",
      "https://aontu.dev/grammar/aontu.tmLanguage.json"
    ],
    "source": "https://github.com/aontu-lang/web"
  }
}
