Diagnostics
Every problem Ascribe reports, with its code and fix.
For AI agents: the documentation index is at llms.txt, and this page is available as Markdown.
Every problem Ascribe reports, with its code, its name, and how to fix it. ascribe check, ascribe build, and the editor report the same diagnostics, with the same codes.
A problem is what Ascribe found in your project, at one place. A diagnostic is the kind of problem, with a code, that this page and ascribe explain describe. In the messages below, {name} stands for a value filled in from your source.
The diagnostics are on nine pages, by what they’re about:
- Directives: attributes, directives and their containers, binding, titles, ids, includes, variants, availability, steps, details, and widgets.
- Links and pages: links, images, phrases, headings, frontmatter, and lists.
- Sources, memo files, and navigation: files, snippets, source copies, acknowledgements, permalinks, memo files, navigation, the glossary, and summaries.
- The addresses file and API specs:
ascribe.addresses, the addresses a base published, and the specs[apis]declares. - The content model:
ascribe.toml: the file,[project],[sources], content types, and names. - The content model’s builds and site: the rest of
ascribe.toml:[releases], phrases, widgets, the consumer, builds, the editor,[permalinks],[crawlers],[listing], and[checks]. - Content checks: the content’s quality, which a project can set the level of: the checks of pages.
- Content checks across the project: the checks of the project as a whole, such as orphan pages and what’s unused.
- Content checks of outputs and the site: the rest of the content checks: outputs, prose through Vale, external links, the published site, and tested examples.
Each entry ends with the section of the directive reference, directive syntax, frontmatter, phrases, links, and images, or the ascribe.toml reference about what it checks, which has examples, and links to its part of the specification.
In the editor, many diagnostics offer a quick fix. See Quick fixes.
Each entry opens with a line such as “Advice · page level · next step: write · configurable in [checks]”: the diagnostic’s severity, its level, its next step, whether a project can set its level, and, for a check whose problems can be acknowledged, where. It ends with the diagnostic’s section of the specification.
Severity
An error, a warning, and advice are how severe a problem is.
- An error makes
ascribe checkfail, and stopsascribe buildfrom writing anything. A diagnostic aboutascribe.toml(a name that starts withmodel-) stops everything else when it’s an error: every other check depends on the content model. - A warning doesn’t, unless you pass
--deny-warnings. - Advice never does, even with
--deny-warnings:ascribe checklists it after the errors and warnings and counts it apart, and the editor shows it as information.
A check that’s off by default reports nothing until a project names it in [checks]: see Setting a check’s level.
File level and page level
A file-level diagnostic is about one file on its own. A page-level diagnostic is about a page after its includes are expanded and a build’s modes are applied, so it can depend on the build; the message names the builds it appears in.
What to do next
Each diagnostic says what kind of next step it has. ascribe check --format json gives it as next, and the editor in each diagnostic’s data, so a tool or an agent can offer the right thing.
| Next step | What it means |
|---|---|
fix |
Ascribe can make the edit: every instance has a quick fix in the editor. |
choose |
You pick among things Ascribe can list: a link’s target, a key’s allowed values, a declared phrase. |
write |
It needs writing or judgment. The entry’s fix says what to do; an agent can do it from the diagnostic’s prompt. |
outside |
Nothing in the source can fix it; it’s set somewhere else, such as the site’s hosting. |
review |
It may be fine as it is. |
Setting a check’s level
A check about the content’s quality, rather than whether the project is valid, can be set to another level, or turned off, in [checks] in ascribe.toml. Those checks are listed under Content checks, Content checks across the project, and Content checks of outputs and the site, and their entries say they’re configurable. Every other diagnostic is about whether the project is valid, which a project can’t lower or turn off.
A few content checks matter only to some projects, and are off unless [checks] names them; their entries say they’re off by default. Name one with a level to turn it on at that level, or with a table of its settings to turn it on at the level its entry gives. summary-missing and summary-long, for a project that shows its docs in a product, are turned on like this:
[checks]
summary-missing = "advice"
summary-long = "advice"
Index
| Code | Name | Severity | Level | Next step |
|---|---|---|---|---|
| ASC001 | attribute-unknown-key |
Error | File | choose |
| ASC002 | attribute-type-mismatch |
Error | File | choose |
| ASC003 | attribute-bare-key |
Error | File | write |
| ASC004 | attribute-unquoted-reserved |
Error | File | fix |
| ASC005 | directive-unknown |
Warning | File | choose |
| ASC006 | directive-primary |
Error | File | write |
| ASC007 | container-unclosed |
Error | File | write |
| ASC008 | container-colon-unexpected |
Error | File | fix |
| ASC009 | container-colon-missing |
Error | File | fix |
| ASC010 | container-open-at-arm |
Error | File | write |
| ASC011 | end-unmatched |
Error | File | write |
| ASC012 | end-indent-mismatch |
Error | File | write |
| ASC013 | container-nesting-deep |
Warning | File | write |
| ASC014 | binding-no-block |
Error | File | write |
| ASC015 | binding-heading |
Error | File | write |
| ASC016 | binding-blank-line |
Warning | File | fix |
| ASC017 | binding-not-section-top |
Error | File | write |
| ASC018 | title-not-accepted |
Warning | File | write |
| ASC019 | title-dot-space |
Warning | File | write |
| ASC020 | id-duplicate |
Error | Page | write |
| ASC021 | include-target-missing |
Error | File | choose |
| ASC022 | include-id-missing |
Error | Page | choose |
| ASC023 | include-cycle |
Error | Page | write |
| ASC024 | variant-no-arm-survives |
Warning | Page | write |
| ASC025 | variant-unknown |
Error | File | choose |
| ASC026 | variant-mixed-arms |
Error | File | write |
| ASC027 | variant-arm-kind |
Error | File | write |
| ASC028 | variant-no-shared-dimension |
Error | File | write |
| ASC029 | available-unknown |
Error | File | choose |
| ASC030 | available-history-order |
Error | File | write |
| ASC031 | available-versionless |
Error | File | write |
| ASC032 | available-exceeds-scope |
Error | Page | write |
| ASC033 | steps-not-ordered-list |
Error | File | write |
| ASC034 | details-title-missing |
Error | File | write |
| ASC035 | widget-schema |
Error | File | write |
| ASC036 | link-target-missing |
Error | File | choose |
| ASC037 | link-id-missing |
Error | Page | choose |
| ASC038 | link-to-fragment |
Error | File | choose |
| ASC040 | link-id-removed |
Error | Page | write |
| ASC041 | link-route |
Warning | File | choose |
| ASC042 | image-source-missing |
Error | File | choose |
| ASC043 | image-alt-missing |
Warning | File | write |
| ASC044 | phrase-undeclared |
Warning | File | choose |
| ASC045 | heading-phrase-without-id |
Warning | File | fix |
| ASC046 | heading-duplicate-without-id |
Warning | Page | fix |
| ASC047 | frontmatter-unknown-key |
Error | File | choose |
| ASC048 | frontmatter-missing-field |
Error | File | write |
| ASC049 | frontmatter-type-mismatch |
Error | File | choose |
| ASC050 | frontmatter-reserved-in-fragment |
Error | File | write |
| ASC052 | list-ended-by-directive |
Warning | File | write |
| ASC053 | directive-indented-code |
Warning | File | write |
| ASC054 | steps-numbering-continued |
Warning | File | write |
| ASC055 | attribute-syntax |
Error | File | write |
| ASC056 | attribute-duplicate-key |
Error | File | write |
| ASC057 | available-syntax |
Error | File | write |
| ASC058 | id-invalid |
Error | File | write |
| ASC059 | image-attribute-missing |
Error | File | write |
| ASC060 | model-toml-syntax |
Error | File | write |
| ASC061 | model-unknown-key |
Error | File | choose |
| ASC062 | model-missing-key |
Error | File | write |
| ASC063 | model-wrong-type |
Error | File | write |
| ASC064 | model-invalid-value |
Error | File | choose |
| ASC065 | model-spec-unsupported |
Error | File | choose |
| ASC066 | model-invalid-name |
Error | File | write |
| ASC067 | model-empty-text |
Error | File | write |
| ASC068 | model-path-absolute |
Error | File | write |
| ASC069 | model-content-root-missing |
Error | File | write |
| ASC070 | model-output-overlaps-content |
Error | File | write |
| ASC074 | model-field-reserved |
Error | File | write |
| ASC075 | model-type-syntax |
Error | File | write |
| ASC076 | model-type-fields |
Error | File | write |
| ASC077 | model-enum-values |
Error | File | write |
| ASC078 | model-set-token |
Error | File | write |
| ASC079 | model-default-type |
Error | File | write |
| ASC080 | model-phrases-field-type |
Error | File | write |
| ASC081 | model-pattern-syntax |
Error | File | write |
| ASC082 | model-name-multiple-roles |
Error | File | write |
| ASC083 | model-name-case |
Warning | File | write |
| ASC084 | model-dimension-empty |
Error | File | write |
| ASC085 | model-dimension-value-duplicate |
Error | File | write |
| ASC086 | model-dimension-value-shared |
Error | File | write |
| ASC087 | model-label-undeclared |
Error | File | choose |
| ASC088 | model-versionless-undeclared |
Error | File | choose |
| ASC089 | model-lifecycle-available-required |
Error | File | choose |
| ASC090 | model-lifecycle-ga-unavailable |
Error | File | write |
| ASC091 | model-note-label-required |
Error | File | write |
| ASC092 | model-availability-syntax |
Error | File | write |
| ASC093 | model-availability-unknown-name |
Error | File | choose |
| ASC094 | model-availability-versionless |
Error | File | write |
| ASC095 | model-availability-history-order |
Error | File | write |
| ASC096 | model-feature-nested |
Error | File | write |
| ASC097 | model-phrase-value-type |
Error | File | write |
| ASC100 | model-widget-reserved-name |
Error | File | write |
| ASC101 | model-widget-forms |
Error | File | choose |
| ASC102 | model-widget-binding |
Error | File | choose |
| ASC103 | model-widget-container-primary |
Error | File | write |
| ASC104 | model-widget-groupable-form |
Error | File | write |
| ASC105 | model-widget-plain-content |
Error | File | write |
| ASC106 | model-consumer-unsupported |
Error | File | choose |
| ASC107 | model-consumer-site |
Error | File | write |
| ASC108 | model-consumer-base-path |
Error | File | write |
| ASC109 | model-build-name-case |
Error | File | write |
| ASC110 | model-build-variants |
Error | File | write |
| ASC111 | model-build-unknown-dimension |
Error | File | choose |
| ASC112 | model-build-unknown-value |
Error | File | choose |
| ASC113 | model-build-availability |
Error | File | write |
| ASC114 | model-build-filter-target |
Error | File | choose |
| ASC115 | model-build-filter-version |
Error | File | write |
| ASC116 | model-build-filter-excluded |
Warning | File | write |
| ASC117 | model-editor-build-unknown |
Error | File | choose |
| ASC118 | model-editor-build-required |
Error | File | choose |
| ASC119 | model-attribute-reserved |
Error | File | write |
| ASC120 | directive-extra-text |
Error | File | fix |
| ASC121 | link-page-dropped |
Error | Page | write |
| ASC122 | frontmatter-syntax |
Error | File | write |
| ASC123 | source-unreadable |
Error | File | write |
| ASC124 | heading-empty-slug |
Warning | File | write |
| ASC125 | include-heading-without-id |
Warning | File | write |
| ASC126 | phrase-double-braces |
Warning | File | fix |
| ASC127 | snippet-address |
Error | File | write |
| ASC128 | snippet-source-unknown |
Error | File | choose |
| ASC129 | snippet-file-missing |
Error | File | choose |
| ASC130 | snippet-file-not-text |
Error | File | write |
| ASC131 | snippet-region-missing |
Error | File | choose |
| ASC132 | snippet-tags |
Error | File | write |
| ASC133 | model-source-path-missing |
Error | File | write |
| ASC134 | model-source-outside-repository |
Error | File | write |
| ASC135 | model-source-remote |
Error | File | write |
| ASC136 | lock-invalid |
Error | File | write |
| ASC137 | lock-source-unknown |
Error | File | write |
| ASC138 | source-copy-changed |
Error | File | write |
| ASC139 | source-copy-unlocked |
Error | File | write |
| ASC140 | source-copy-unused |
Warning | File | write |
| ASC141 | model-inline-field |
Error | File | write |
| ASC142 | model-check-not-configurable |
Error | File | write |
| ASC143 | intended-check |
Error | File | choose |
| ASC144 | intended-entry |
Error | File | write |
| ASC145 | intended-unused |
Advice | Page | fix |
| ASC146 | model-intended-check |
Error | File | choose |
| ASC147 | model-intended-entry |
Error | File | choose |
| ASC148 | model-field-role |
Error | File | write |
| ASC149 | page-size |
Advice | Page | write |
| ASC150 | page-description-missing |
Advice | File | write |
| ASC151 | heading-level-skipped |
Advice | Page | fix |
| ASC152 | code-language-missing |
Advice | File | choose |
| ASC153 | recheck-overdue |
Advice | File | review |
| ASC154 | page-orphan |
Advice | Page | review |
| ASC155 | fragment-unused |
Advice | File | review |
| ASC156 | phrase-unused |
Advice | File | review |
| ASC157 | feature-unused |
Advice | File | review |
| ASC158 | glossary-term-unused |
Advice | File | review |
| ASC159 | image-unused |
Advice | File | review |
| ASC160 | image-large |
Advice | File | review |
| ASC161 | title-duplicate |
Advice | Page | write |
| ASC162 | model-consumer-agents-site |
Error | File | write |
| ASC163 | description-too-long |
Advice | File | write |
| ASC164 | llms-section-large |
Advice | Page | write |
| ASC165 | prose |
Advice | File | write |
| ASC166 | prose-not-checked |
Advice | File | outside |
| ASC167 | model-checks-vale |
Error | File | write |
| ASC168 | link-external-broken |
Advice | File | review |
| ASC169 | link-external-moved |
Advice | File | choose |
| ASC170 | delivery-hosting |
Advice | File | outside |
| ASC171 | delivery-output |
Advice | File | outside |
| ASC172 | availability-left-behind |
Advice | File | review |
| ASC173 | permalink-duplicate |
Error | Page | write |
| ASC174 | model-consumer-permalink-path |
Error | File | write |
| ASC175 | permalinks-list-invalid |
Error | File | write |
| ASC176 | permalinks-list-behind |
Warning | File | fix |
| ASC177 | permalink-lost |
Warning | File | write |
| ASC182 | include-limit |
Error | Page | write |
| ASC183 | model-crawlers-line |
Error | File | write |
| ASC184 | listing-disallowed |
Advice | File | fix |
| ASC185 | model-listing-folder |
Error | File | write |
| ASC186 | model-listing-type |
Error | File | choose |
| ASC187 | model-listing-looser |
Error | File | write |
| ASC188 | listing-loosened |
Error | File | fix |
| ASC189 | model-crawlers-named-twice |
Error | File | write |
| ASC190 | crawlers-disallowed |
Advice | File | choose |
| ASC191 | description-duplicate |
Advice | Page | write |
| ASC192 | title-heading-differs |
Advice | Page | review |
| ASC193 | model-type-file |
Error | File | write |
| ASC194 | model-type-template |
Error | File | write |
| ASC195 | template-placeholder-left |
Advice | File | write |
| ASC196 | content-type-missing |
Error | File | choose |
| ASC197 | content-type-unknown |
Error | File | choose |
| ASC198 | description-link |
Advice | File | write |
| ASC199 | example-stale |
Warning | File | outside |
| ASC200 | example-unobserved |
Advice | File | outside |
| ASC201 | examples-config-invalid |
Warning | File | outside |
| ASC202 | observation-file-missing |
Advice | File | outside |
| ASC204 | model-releases-target |
Error | File | choose |
| ASC205 | model-releases-line |
Error | File | write |
| ASC206 | model-build-versions |
Error | File | write |
| ASC207 | model-releases-order |
Error | File | write |
| ASC208 | model-releases-ends |
Error | File | choose |
| ASC209 | model-versions-current |
Error | File | write |
| ASC210 | available-version-ahead |
Error | File | choose |
| ASC211 | available-line-undeclared |
Advice | File | choose |
| ASC212 | available-same-in-every-line |
Advice | File | write |
| ASC213 | available-in-no-line |
Warning | File | write |
| ASC214 | release-line-ended |
Advice | File | write |
| ASC215 | model-phrase-line |
Error | File | choose |
| ASC216 | replaces-not-a-page |
Error | File | choose |
| ASC217 | replaces-cycle |
Error | Page | write |
| ASC218 | replaces-overlap |
Error | Page | write |
| ASC219 | replaces-same-page |
Error | Page | write |
| ASC220 | link-into-older-line |
Advice | Page | write |
| ASC221 | link-fragment-dropped |
Advice | Page | write |
| ASC222 | listing-loosened-in-line |
Error | Page | write |
| ASC223 | html-comment |
Advice | File | review |
| ASC224 | memo-empty |
Advice | File | fix |
| ASC225 | memo-invalid |
Error | File | write |
| ASC226 | memo-detached |
Warning | File | choose |
| ASC227 | memo-outdated |
Advice | File | write |
| ASC228 | memo-long |
Advice | File | write |
| ASC229 | template-section-empty |
Advice | File | write |
| ASC230 | nav-invalid |
Error | File | write |
| ASC231 | nav-page-unknown |
Error | File | choose |
| ASC232 | nav-folder-unknown |
Error | File | choose |
| ASC233 | nav-duplicate |
Error | File | fix |
| ASC234 | section-page-both |
Error | File | choose |
| ASC235 | nav-page-unplaced |
Advice | File | fix |
| ASC236 | nav-section-unplaced |
Advice | File | fix |
| ASC237 | nav-label-long |
Advice | File | write |
| ASC238 | model-glossary-page |
Error | File | choose |
| ASC239 | glossary-term-duplicate |
Error | File | write |
| ASC240 | glossary-definition-missing |
Error | File | write |
| ASC241 | glossary-definition-long |
Advice | Page | write |
| ASC242 | term-off-glossary-page |
Error | File | choose |
| ASC243 | baseline-entry-unmatched |
Advice | File | outside |
| ASC244 | frontmatter-field-repeated |
Advice | File | fix |
| ASC245 | available-planned-line |
Error | File | write |
| ASC246 | model-from-file |
Error | File | write |
| ASC247 | model-from-take |
Error | File | write |
| ASC248 | model-from-written |
Error | File | write |
| ASC249 | summary-not-paragraph |
Error | File | write |
| ASC250 | summary-repeated |
Error | Page | write |
| ASC251 | summary-in-variant |
Error | Page | write |
| ASC252 | summary-missing |
Advice, off by default | Page | write |
| ASC253 | summary-long |
Advice, off by default | Page | write |
| ASC254 | addresses-file-invalid |
Error | File | write |
| ASC255 | address-lost |
Warning | File | write |
| ASC256 | anchor-lost |
Advice | File | write |
| ASC257 | addresses-base-unreadable |
Warning | File | outside |
| ASC258 | addresses-build-gone |
Advice | File | outside |
| ASC259 | model-api-outside-repository |
Error | File | write |
| ASC260 | model-api-reference |
Error | File | write |
| ASC261 | api-spec-unreadable |
Error | File | write |
| ASC262 | api-spec-empty |
Advice | File | outside |
| ASC263 | link-operation-missing |
Error | File | choose |
| ASC264 | link-spec-outside-project |
Error | File | write |
| ASC265 | addresses-entry-not-a-page |
Error | File | choose |
| ASC266 | addresses-entry-live |
Advice | File | fix |
| ASC267 | addresses-entry-taken |
Error | File | write |
| ASC268 | addresses-entry-unpublished |
Advice | File | fix |
| ASC269 | addresses-key-twice |
Error | File | choose |
| ASC270 | addresses-chain |
Advice | File | fix |
| ASC271 | addresses-anchor-collision |
Error | File | write |
| ASC272 | addresses-file-deleted |
Error | File | write |
| ASC273 | addresses-soft-404 |
Advice | File | write |
| ASC274 | link-operation-form-unsupported |
Error | File | write |
| ASC275 | link-operation-by-path |
Advice | File | fix |
| ASC276 | link-operation-deprecated |
Advice | File | write |
| ASC277 | api-example-schema-mismatch |
Error | File | write |
| ASC278 | api-example-not-json |
Error | File | write |
| ASC279 | api-example-body-missing |
Error | File | write |
| ASC280 | api-example-schema-unsupported |
Advice | File | outside |
| ASC281 | operation-link-not-operation |
Error | File | write |
| ASC282 | api-operation-unreferenced |
Advice | File | write |
| ASC283 | build-filter-line-undeclared |
Advice | File | write |
| ASC284 | info-pair-malformed |
Warning | File | write |
| ASC285 | examples-config-unread |
Warning | File | write |
| ASC286 | template-placeholder-published |
Error | File | write |
| ASC287 | github-alert |
Warning | File | fix |
| ASC288 | phrase-text-written |
Advice | File | review |