Type to search pages and rules.

Browse pages

Authoring Standard

This page states how LiteSpec pages and consumer specification pages are written: the page styles, the provision contracts, the identifiers, the verification table, and the prose style.

Markdown39 provisions

Intent#

This page states how LiteSpec pages and consumer specification pages are written: the page styles, the provision contracts, the identifiers, the verification table, and the prose style. Prose follows the Google developer documentation style guide, with the few additions this page states. The structure rules are what litespec validate and litespec consumer check.

Concepts#

Writing style#

LiteSpec pages and consumer specification pages follow the Google developer documentation style guide. It covers voice, tense, person, word choice, punctuation, lists, tables, links, and code formatting. A question the guide answers is not restated here.

This page adds five rules to the guide:

  • Use ASCII outside code and data. Write a hyphen or a comma where the guide would use an em dash.
  • Use one term for one concept. The glossary owns LiteSpec's terms, and a consumer's language record owns its project terms.
  • Write MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in capitals only inside a Standard's Requirement. Elsewhere, write plain words.
  • Give a page title Title Case, and every other heading sentence case.
  • State the current contract. A page never describes how an earlier LiteSpec release differed.

Page authority#

Standards define required boundaries, and Conventions define replaceable defaults. Everything else on a page is informative: the Intent, Concepts, Rationale, Examples, guides, tutorials, and indexes.

AGENTS.md and a consumer's project agents file project the provisions an agent needs. A projection cites the provision it projects and adds no obligation. When the two disagree, the provision wins.

CONTRIBUTING.md owns the contribution workflow. CHANGELOG.md describes the current release.

Documentation layers#

A reader arrives with one of four questions, and each page answers one of them.

LayerPage styleThe question it answers
1TutorialHow do I get a first working result?
2How-toHow do I reach this one goal?
3Topic, stack, extension, pattern, reference, command, configurationWhat exactly applies, with which values and defaults?
4The Underneath section of a command pageWhat does the command run, and how do I run it myself?

An explanation page builds understanding: what LiteSpec is, why it works the way it does, and how its parts fit. It sits beside the layers rather than in one, because a reader takes it before or between tasks, not during one. An index routes a reader to pages, and the glossary resolves one term, so neither sits in a layer. A page links down a layer and never up. Any page may link to the glossary.

Page styles#

Every LiteSpec page uses one of these styles. Its location decides its style.

Page styleWhere it livesTemplateSections, in order
TopicAny area page that owns provisionstemplates/standard/topic.mdIntent, optional Concepts, optional React and Svelte on frontend/web/ pages, Standards, Conventions, optional Reference example, Verification
Stackstack.md in a stack foldertemplates/standard/topic.mdIntent, Standards, Conventions, Verification
ExtensionAn ext/ foldertemplates/standard/extension.mdIntent, Activation, Baseline relationship, Standards, Conventions, Dependencies, Verification
Patterndocs/frontend/patterns/UI pattern decisionsIntent, optional Concepts, optional Standards, optional Conventions, Patterns, Verification
Referencedocs/reference/NoneIntent, Reference, optional Notes
Commanddocs/tools/templates/standard/command.mdName, Synopsis, Description, Arguments, Options, Exit codes, Examples, Underneath
How-todocs/guide/templates/standard/how-to.mdPurpose, optional Prerequisites, Procedure, Verification
Tutorialdocs/tutorial/templates/standard/tutorial.mdPurpose, Prerequisites, Lesson, What you built
Explanationdocs/learn/NoneIntent, then sections of its own
IndexA README.mdNoneIntent, then navigation groups
Glossarydocs/reference/glossary.mdNoneOne heading per term, in alphabetical order

A consumer page is a record or one of these styles. Each one opens with the specification metadata block the record schema defines.

Page styleTemplateSections, in order
product-topictemplates/consumer/product-topic.mdSummary, The situation, What we do, Why it is better, A worked example, Costs and risks, How sure we are, Rules, Position, Refusals, Open questions, Next, History, Evidence
permission-listtemplates/consumer/permission-list.mdPermissions
entry-point-listtemplates/consumer/entry-point-list.mdEntry points
limit-settemplates/consumer/limit-set.mdLimits
rule-settemplates/consumer/rule-set.mdRules
indextemplates/consumer/index.mdIntent, then navigation groups
tutorialtemplates/consumer/tutorial.mdPurpose, Prerequisites, Lesson, What you built
how-totemplates/consumer/how-to.mdPurpose, optional Prerequisites, Procedure, Verification
referencetemplates/consumer/reference.mdIntent, Reference, optional Notes
commandtemplates/consumer/command.mdName, Synopsis, Description, Arguments, Options, Exit codes, Examples, Underneath
configurationtemplates/consumer/configuration.mdIntent, Settings, Precedence, optional Notes
glossarytemplates/consumer/glossary.mdOne heading per term, in alphabetical order
scenario-casttemplates/consumer/scenario-cast.mdThe organization, The people, The occasion, The amounts, Recurring situations, optional What this page does not do

These rules apply to every page style:

  • A page that owns provisions lives at docs/<area>/<page>.md or deeper, with a lowercase file name.
  • A page has one H1.
  • A required section with nothing to say contains only None.
  • An example sits inside the provision it illustrates, or in a Reference example that names every provision it demonstrates.
  • A tutorial, how-to, explanation, reference, command, or index page owns no provisions.
  • A tutorial follows one path. An option or an alternative belongs on a how-to page.

Provisions#

A provision is a ### heading inside one of three sections:

SectionKindHeading
## StandardsruleStarts with an action verb, such as Keep shared UI in one package
## ConventionsconventionStarts with an action verb and names the replaceable default
## PatternspatternThe pattern's name, such as Record header

A Standard states one testable obligation:

Markdown
### Keep shared UI in one package

**Requirement:** A workspace MUST hold its shared primitives and composites in one shared UI package.

**Deviation:** Only with SHOULD or SHOULD NOT: the bounded reason that permits a departure.

**Rationale:** Why the rule exists.

**Example:** What following it looks like.
  • The Requirement is one sentence with exactly one capitalized modal, as RFC 2119 and RFC 8174 define them.
  • A different obligation, prohibition, or permission is a separate provision.
  • Conditions and scope belong in the Requirement sentence.
  • Every other paragraph of the provision sits under a Rationale or an Example label and adds no obligation.

A Convention states a default a project may replace:

Markdown
### Use the default location

**Default:** Store the catalog at `docs/ui/patterns.json`.

**Replacement:** A project names another path in `paths.uiPatterns`.

**Rationale:** Why this is the default.

A project that departs from a Standard records an Exception record that cites the provision. A project that replaces a Convention names its own convention in its documentation. The model page states the Exception record.

A pattern carries its question, its default option, its compact behavior, and its rationale, and then its options with their wireframes. UI pattern decisions states the pattern contract and the wireframe language.

Provision identifiers#

Every provision ID is litespec/<page>#<slug>:

SegmentSource
litespecThe source that owns the provision
<page>The page path under docs/, without .md
<slug>The heading: lowercase, punctuation removed, spaces as hyphens

### Keep business invariants in Domain on docs/backend/architecture.md is litespec/backend/architecture#keep-business-invariants-in-domain. The same text is the heading's address on the published site.

The heading carries no identifier text. A renamed heading renames the ID, so the two cannot disagree. No two pages share a path, so no two provisions share an ID. Consumer record identifiers follow the identifier page.

Verification table#

Every page that owns provisions ends with a Verification table that has one row per provision:

Markdown
| ID | Mark | Evidence |
|:---|:---|:---|
| litespec/frontend/components#keep-shared-ui-in-one-package | guidance | Does one shared package hold the shared primitives and composites? |

A checkable row names the tool that checks the provision, with that tool's command first, in backticks. A guidance row asks the one question a reviewer answers. Evidence like "verify compliance" says nothing and is refused.

Generated regions#

A generated region is a section a tool writes, between <!-- generated:<name> --> and <!-- /generated:<name> -->. Only the owning tool writes inside it, and an edit there is lost at the next generation. Authoring checks skip it.

Release model#

Each LiteSpec release is a complete contract that states every active provision. LiteSpec publishes no compatibility guarantee, migration path, deprecation period, or identifier alias between its own releases. A consumer pins one release, keeps it for as long as it chooses, and adopts a later release by accepting that release's whole contract.

Version numbers name complete pinned contracts. A patch release corrects a narrow area, a minor release makes one coherent change, and a major release replaces scope, method, or a stack.

This model governs LiteSpec itself. A consumer product has its own users, so its API compatibility, migration, deprecation and rollback provisions still apply.

Standards#

Follow the Google developer documentation style guide#

ruleguidance

Requirement Authored prose MUST follow the Google developer documentation style guide, except where this page states a different rule.

Rationale One established guide gives every writer, person or agent, the same answers on voice, word choice, and formatting. It reads as ordinary technical writing, and nobody maintains a second guide.

litespec/core/authoring#follow-the-google-developer-documentation-style-guide

Keep authored prose ASCII-safe#

rulecheckable

Requirement Authored prose MUST contain only ASCII unless code, data, or mathematical content requires another character.

Rationale ASCII prose stays stable in terminals, diffs, generated context, and plain-text tools.

Example Write a hyphen or a comma where a typographic dash would go.

litespec/core/authoring#keep-authored-prose-ascii-safe

Exclude declared content paths from the ASCII check#

ruleguidance

Requirement An ASCII check MUST exclude only the natural-language content paths that the project record declares.

Rationale A product whose subject is another language carries that language in its content files, where a diacritic is part of a word. Every document about that content stays in scope.

litespec/core/authoring#exclude-declared-content-paths-from-the-ascii-check

Use one normative vocabulary#

rulecheckable

Requirement A Standards provision MUST use exactly one approved capitalized modal and no other capitalized normative term.

Rationale The provision contract defines the approved modals and their RFC meaning, so a reader never has to interpret strength.

litespec/core/authoring#use-one-normative-vocabulary

Use one term for one concept#

ruleguidance

Requirement Authored prose MUST name each concept with its one glossary term.

Rationale A second name for the same concept makes a reader wonder whether it is a second concept. A term defined once is checked once.

litespec/core/authoring#use-one-term-for-one-concept

Record the project vocabulary as data#

rulecheckable

Requirement A consumer MUST record each term, its rejected synonyms, the scope of each rejection, and its mannered terms in a language record satisfying schemas/language.schema.json.

Rationale A glossary column headed "Avoid" states the rule to a reader and to nothing else. A rule held as data reaches the reader and the validator alike.

Example A rejection carries the scope that binds it, because a word that is right in one module is wrong in another.

JSON
{ "term": "customer", "rejected": ["client"], "scope": "^domain/modules/orders/",
  "reason": "client names the API consumer" }
litespec/core/authoring#record-the-project-vocabulary-as-data

Reject a recorded synonym inside its scope#

rulecheckable

Requirement Authored prose MUST NOT use a synonym that the project language record rejects for the scope the page sits in.

Rationale Drift in terms is invisible one page at a time and plain across a module. The expensive case is a synonym that is a defined term elsewhere, because one word then names two things.

litespec/core/authoring#reject-a-recorded-synonym-inside-its-scope

Check the vocabulary on every surface a reader meets#

rulecheckable

Requirement A consumer MUST name every non-Markdown surface its vocabulary reaches in paths.languageScan, including source, interface copy, the API contract, and acceptance tests.

Rationale Documentation is often the smallest surface a reader meets. A rejection also has to reach names, so ClientOrderId breaches a rejection of client the way a sentence does.

Example A pattern that matches no file is an error, so a surface cannot go unread unnoticed.

JSON
{ "paths": { "languageScan": ["apps/*/lib/i18n/dictionaries/*.json", "apps/api/tests/**/*.feature"] } }
litespec/core/authoring#check-the-vocabulary-on-every-surface-a-reader-meets

Exclude the compound that names another concept#

rulecheckable

Requirement A language record MUST list, in except, every compound in which a rejected word names a concept other than the one the rejection is about.

Rationale A rejection matches a word, and a word can belong to more than one term. A library can reject reservation in favor of hold while its reading room still books a reading-room reservation.

Example The exemption covers the compound only, so the bare word stays rejected.

JSON
{ "term": "hold", "rejected": ["reservation"], "scope": "^docs/domain/modules/circulation/",
  "except": ["reading-room reservation"], "reason": "one word for a book hold and a seat booking" }
litespec/core/authoring#exclude-the-compound-that-names-another-concept

Exclude generated regions from prose checks#

ruleguidance

Requirement An authoring check MUST skip every generated region.

Rationale A generated region holds tool output, so a check would fail a page for words no author wrote.

litespec/core/authoring#exclude-generated-regions-from-prose-checks

Use controlled capitalization#

rulecheckable

Requirement A page MUST use Title Case for its title and sentence case for every other heading.

Rationale Titles read as names in an index, and sentence-case headings read as statements. Code names, product names and layer names keep their own capitalization.

litespec/core/authoring#use-controlled-capitalization

Use the declared page contract#

rulecheckable

Requirement An authored page MUST use the sections, in order, of its page style.

Rationale A fixed shape lets a reader and a tool find the authority, the context, the defaults, and the evidence in the same place on every page.

litespec/core/authoring#use-the-declared-page-contract

Route the reader before listing pages#

rulecheckable

Requirement A documentation root index MUST state which page style answers which reader question before its first navigation group.

Rationale A reader who cannot tell a tutorial from a reference opens both and trusts neither.

Example A Which page do you want section names each style in the reader's terms, one sentence each.

litespec/core/authoring#route-the-reader-before-listing-pages

Name the tool rather than the mechanism#

ruleguidance

Requirement A tutorial step or how-to step MUST name the repository command that performs it, where one exists.

Rationale A procedure that lists what a command already does becomes a second copy of that command, and the copy drifts.

Example A step reads Run `./shop up` rather than listing the compose start, the readiness wait, and each process launch.

litespec/core/authoring#name-the-tool-rather-than-the-mechanism

State one layer per page#

ruleguidance

Requirement A page MUST NOT describe both a command and the mechanism that command runs, outside an Underneath section.

Rationale A reader who wanted the command reads the mechanism as noise, and a reader who wanted the mechanism reads the command as an obstacle.

litespec/core/authoring#state-one-layer-per-page

Name the escape from every abstraction#

rulecheckable

Requirement A command page MUST state under Underneath what the command runs, or that nothing beneath it is separately runnable.

Rationale A wrapper nobody can see through cannot be debugged when it fails.

Example A command with nothing separately runnable writes None. under Underneath.

litespec/core/authoring#name-the-escape-from-every-abstraction

Record a setting as reference#

ruleguidance

Requirement A configuration setting a reader can change MUST appear on a configuration page with its default, its scope, and what overrides it.

Rationale A setting introduced inside a procedure is found only by the reader who already knows which procedure mentioned it.

litespec/core/authoring#record-a-setting-as-reference

Write atomic Standards provisions#

rulecheckable

Requirement A Standards provision MUST follow the Standard contract this page defines.

Rationale One identified obligation has one authority and one verification row.

Example ### Keep business invariants in Domain owns one obligation about where invariants are enforced.

litespec/core/authoring#write-atomic-standards-provisions

Identify actionable conventions#

rulecheckable

Requirement A Convention provision MUST follow the Convention contract this page defines.

Rationale A heading under ## Conventions makes each replaceable default traceable without turning it into a rule.

litespec/core/authoring#identify-actionable-conventions

Attach examples to their provisions#

rulecheckable

Requirement An informative example MUST belong to its provision or to a Reference example that names every provision it demonstrates.

Rationale A reader can then tell an illustration from an independent obligation.

litespec/core/authoring#attach-examples-to-their-provisions

Use the declared identifier grammar#

rulecheckable

Requirement A provision ID MUST be litespec/<page>#<slug>, computed from its page path and its heading.

Rationale The page names the file and the slug names the heading, so a citation resolves with no lookup.

Example litespec/frontend/components#compose-composites-in-page-code is a heading on the frontend components page.

litespec/core/authoring#use-the-declared-identifier-grammar

Name the owning page in the identifier#

rulecheckable

Requirement A provision ID's page segment MUST be its page's path under docs/ without the .md extension.

Rationale The page segment is the file a reader opens and its address on the published site.

Example litespec/frontend/structure#mirror-the-backend-use-case-path-in-kebab-case and litespec/frontend/blazor/structure#organize-features-by-module-and-use-case are on two different pages.

litespec/core/authoring#name-the-owning-page-in-the-identifier

Keep identifiers out of provision headings#

rulecheckable

Requirement A provision heading MUST carry no identifier text.

Rationale The page path and the heading already state the ID, so a written ID can only repeat it or contradict it.

litespec/core/authoring#keep-identifiers-out-of-provision-headings

Exclude a sequence number from the identifier#

ruleguidance

Requirement A provision ID MUST NOT contain a sequence number.

Rationale A counter orders a provision among its siblings and says nothing about what it requires, which is the slug's job.

litespec/core/authoring#exclude-a-sequence-number-from-the-identifier

Map provisions to evidence#

rulecheckable

Requirement A page that owns provisions MUST give every provision one row in its Verification table.

Rationale Exact evidence makes each provision reviewable by a person or a tool.

litespec/core/authoring#map-provisions-to-evidence

Mark every provision checkable or guidance#

rulecheckable

Requirement A Verification row MUST mark its provision checkable or guidance.

Rationale The mark tells a reader whether a tool or a person judges the provision.

litespec/core/authoring#mark-every-provision-checkable-or-guidance

Regenerate the provision index#

rulecheckable

Requirement A standards change MUST leave docs/reference/provisions.md equal to the output of litespec provisions.

Rationale One generated page resolves every ID to its heading and page, so a reader follows a citation in one step.

litespec/core/authoring#regenerate-the-provision-index

Declare structured specification metadata#

rulecheckable

Requirement A consumer page MUST open with a specification metadata block satisfying the record schema for its declared type.

Rationale The schema owns the field list of every record type and page style. The block is one JSON object between two lines that hold only ---. The model page states the record types and their homes.

Example A use-case page opens with this block.

Markdown
---
{
  "type": "use-case",
  "id": "use-case/orders.cancel-order",
  "title": "Cancel order",
  "owner": "__OWNER__",
  "status": "approved"
}
---
litespec/core/authoring#declare-structured-specification-metadata

Use one metadata carrier#

ruleguidance

Requirement A consumer page MUST use its opening specification metadata block as its only metadata carrier.

Rationale Source links, implementation paths, and verification evidence belong in the body sections they describe.

litespec/core/authoring#use-one-metadata-carrier

Classify every specification file#

rulecheckable

Requirement Every Markdown file under the consumer documentation root MUST declare a record type or page style, or sit under a declared unstructured path.

Rationale A file the validator cannot classify is skipped, and a skipped file looks sound. A directory index that owns no record uses the index style.

litespec/core/authoring#classify-every-specification-file

Derive a computed fact instead of restating it#

ruleguidance

Requirement A specification MUST name the source or the command that produces any count, census, or membership list computed from code.

Rationale A restated number is right until the next unrelated commit, and nothing reports when it goes stale.

Example A page states the rule and the command rather than the total.

Markdown
Every command declares an audit position. To count the declarations:

    grep -rl "Audited(" src/Application --include=*.cs | wc -l
litespec/core/authoring#derive-a-computed-fact-instead-of-restating-it

Run repeatable authoring checks#

rulecheckable

Requirement A standards change MUST pass the repository validator, the test suite, and git diff --check.

Rationale The change report lists every skipped check with its reason. The command index names each check and its command.

litespec/core/authoring#run-repeatable-authoring-checks

Validate current standards material#

ruleguidance

Requirement The standards validator MUST evaluate only current standards material.

Rationale Each pinned release is a complete snapshot. Git history and the changelog give release context outside validation.

litespec/core/authoring#validate-current-standards-material

Exclude historical transition material#

ruleguidance

Requirement Current standards material MUST NOT contain history-specific paths, IDs, terms, aliases, replacement maps, release migration material, compatibility rules, or transition checks.

Rationale The published snapshot states its own contract without carrying earlier releases forward. An extension's Baseline relationship section names a provision it replaces inside this release, which is not history.

litespec/core/authoring#exclude-historical-transition-material

Publish each release as a complete contract#

rulecheckable

Requirement A LiteSpec release MUST state every active provision without depending on an earlier release.

Rationale A consumer reads one pinned snapshot and needs no other release to know its obligations.

litespec/core/authoring#publish-each-release-as-a-complete-contract

Exclude cross-release compatibility work#

ruleguidance

Requirement The LiteSpec repository MUST NOT publish a compatibility guarantee, migration path, deprecation period, or identifier alias between its own releases.

Rationale LiteSpec is a pinned contract rather than a running service. A consumer product keeps its own API compatibility, migration, deprecation, and rollback provisions.

litespec/core/authoring#exclude-cross-release-compatibility-work

Keep a pinned release for as long as it serves#

ruleguidance

Requirement A consumer MAY keep any published LiteSpec release for as long as it chooses.

Rationale Adoption is the consumer's decision, and no repository change obliges a consumer to move.

litespec/core/authoring#keep-a-pinned-release-for-as-long-as-it-serves

Record the reviewed LiteSpec release#

rulecheckable

Requirement A consumer MUST record the LiteSpec release it adopts in reviewedLiteSpecVersion within litespec.project.json.

Rationale A provision can gain force while keeping its ID, so an Exception written against an earlier release could otherwise apply to a rule nobody reread. Recording the release makes adoption an explicit act.

litespec/core/authoring#record-the-reviewed-litespec-release

Conventions#

Prefer direct action headings#

conventionguidance

Default Start a Standard or Convention heading with a concrete action verb.

Replacement Use a noun heading only for a pattern, an informative definition, or an index entry.

litespec/core/authoring#prefer-direct-action-headings

Verification#

IDMarkEvidence
litespec/core/authoring#follow-the-google-developer-documentation-style-guideguidanceWould a reviewer who knows developers.google.com/style accept the changed prose, apart from the additions this page states?
litespec/core/authoring#keep-authored-prose-ascii-safecheckablelitespec validate emits no PROSE_NON_ASCII diagnostic.
litespec/core/authoring#exclude-declared-content-paths-from-the-ascii-checkguidanceDoes the project record name every path outside the ASCII check, with documents about that content still checked?
litespec/core/authoring#use-one-normative-vocabularycheckablelitespec validate emits no STANDARD_MODAL_COUNT or STANDARD_MODAL_VOCABULARY diagnostic.
litespec/core/authoring#use-one-term-for-one-conceptguidanceWould a reader meet each concept under one name only?
litespec/core/authoring#record-the-project-vocabulary-as-datacheckablelitespec consumer validates the language record against the language schema.
litespec/core/authoring#reject-a-recorded-synonym-inside-its-scopecheckablelitespec consumer emits no LANGUAGE_REJECTED_SYNONYM diagnostic.
litespec/core/authoring#check-the-vocabulary-on-every-surface-a-reader-meetscheckablelitespec consumer scans every languageScan pattern and fails a pattern that matches no file.
litespec/core/authoring#exclude-the-compound-that-names-another-conceptcheckablelitespec consumer reports no LANGUAGE_REJECTED_SYNONYM diagnostic inside an exempt compound.
litespec/core/authoring#exclude-generated-regions-from-prose-checksguidanceDoes every authoring check skip the text between generated-region fences?
litespec/core/authoring#use-controlled-capitalizationcheckablelitespec validate emits no PAGE_TITLE_CASE diagnostic.
litespec/core/authoring#use-the-declared-page-contractcheckablelitespec validate emits no PAGE_MISSING_SECTION, PAGE_SECTION_ORDER or PAGE_UNKNOWN_SECTION diagnostic.
litespec/core/authoring#route-the-reader-before-listing-pagescheckablelitespec validate emits no INDEX_MISSING_ROUTING diagnostic.
litespec/core/authoring#name-the-tool-rather-than-the-mechanismguidanceDoes each procedure step name the shipped command that performs it?
litespec/core/authoring#state-one-layer-per-pageguidanceDoes mechanism detail appear only under an Underneath section?
litespec/core/authoring#name-the-escape-from-every-abstractioncheckablelitespec validate emits no PAGE_MISSING_SECTION diagnostic for a command page.
litespec/core/authoring#record-a-setting-as-referenceguidanceDoes every setting named in a procedure resolve to a configuration page row?
litespec/core/authoring#write-atomic-standards-provisionscheckablelitespec validate emits no STANDARD_REQUIREMENT_COUNT, STANDARD_SENTENCE_COUNT or STANDARD_LABEL_INVALID diagnostic.
litespec/core/authoring#identify-actionable-conventionscheckablelitespec validate emits no CONVENTION_MISSING_DEFAULT or CONVENTION_MISSING_REPLACEMENT diagnostic.
litespec/core/authoring#attach-examples-to-their-provisionscheckablelitespec validate emits no STANDARD_EXAMPLE_LABEL or PAGE_UNKNOWN_SECTION diagnostic.
litespec/core/authoring#use-the-declared-identifier-grammarcheckablelitespec validate emits no ID_UNKNOWN_REFERENCE diagnostic.
litespec/core/authoring#name-the-owning-page-in-the-identifiercheckablelitespec validate emits no ID_PAGE_FILENAME or ID_DUPLICATE diagnostic.
litespec/core/authoring#keep-identifiers-out-of-provision-headingscheckablelitespec validate emits no ID_IN_HEADING diagnostic.
litespec/core/authoring#exclude-a-sequence-number-from-the-identifierguidanceDo changed identifiers name their obligation in words alone?
litespec/core/authoring#map-provisions-to-evidencecheckablelitespec validate emits no VERIFY_MISSING_ID or VERIFY_UNKNOWN_ID diagnostic.
litespec/core/authoring#mark-every-provision-checkable-or-guidancecheckablelitespec validate emits no VERIFY_MARK diagnostic.
litespec/core/authoring#regenerate-the-provision-indexcheckablelitespec provisions --check exits zero.
litespec/core/authoring#declare-structured-specification-metadatacheckablelitespec consumer validates each opening specification metadata block against the record schema.
litespec/core/authoring#use-one-metadata-carrierguidanceIs the opening specification metadata block the only metadata on each page?
litespec/core/authoring#classify-every-specification-filecheckablelitespec consumer fails a Markdown file with no declared type outside a declared unstructured path.
litespec/core/authoring#derive-a-computed-fact-instead-of-restating-itguidanceDoes each count, census, and membership list name its source or its command?
litespec/core/authoring#run-repeatable-authoring-checkscheckablelitespec validate, dotnet test --solution LiteSpec.slnx and git diff --check exit zero.
litespec/core/authoring#validate-current-standards-materialguidanceDoes the validator read the working tree and no earlier release?
litespec/core/authoring#exclude-historical-transition-materialguidanceDoes any active file carry history-specific material between releases?
litespec/core/authoring#publish-each-release-as-a-complete-contractcheckablelitespec validate emits no ID_UNKNOWN_REFERENCE diagnostic.
litespec/core/authoring#exclude-cross-release-compatibility-workguidanceWould a consumer find any promise of migration, mapping, or alias here?
litespec/core/authoring#keep-a-pinned-release-for-as-long-as-it-servesguidanceDoes any active provision oblige a consumer to adopt a later release?
litespec/core/authoring#record-the-reviewed-litespec-releasecheckablelitespec consumer fails when reviewedLiteSpecVersion differs from the pinned release.
litespec/core/authoring#prefer-direct-action-headingsguidanceDoes every changed Standard or Convention heading start with a concrete action verb?