Skip to content

ordered strict order ​

Type: document

Signature: md.document(shape, { ordered: true })

What It Is ​

ordered: true enables a structural precheck that evaluates anchored sections before regular parsing begins. The precheck reports duplicate_section when the same anchored heading appears more than once and section_order_mismatch when a later schema anchor appears earlier in markdown. After this guard, each section still runs its own schema validators as usual.

When to Use ​

Use strict order when your template encodes workflow sequence and readers must trust that section progression is fixed. This is a strong fit for operational runbooks, audits, and governance artifacts where reordering headings changes interpretation. Avoid it for freeform drafting because valid content can fail solely due to heading placement.

md.document(shape, { ordered: true }) ​

Input Markdown ​

md
# RUNBOOK: Ordered Sections

## OPERATION

Operational details.

## META

- Service: Fraud API

## DETAILS

main details.

Schema ​

ts
import { md } from '@markschema/mdshape'

const schema = md.document(
  {
    title: md.heading(1).regex(/^RUNBOOK:\s.+/),
    operation: md.section('OPERATION').paragraphs([md.string().min(10)]),
    meta: md.section('META').fields({
      Service: md.string().min(3),
    }),
    details: md.section('DETAILS').paragraphs([md.string().min(5)]),
  },
  { ordered: true },
)

Result ​

Success ​

json
{
  "success": true,
  "data": {
    "title": "RUNBOOK: Ordered Sections",
    "operation": [
      "Operational details."
    ],
    "meta": {
      "Service": "Fraud API"
    },
    "details": [
      "main details."
    ]
  }
}

Error ​

Failure trigger: move ## DETAILS above ## META and repeat ## DETAILS; strict mode raises section_order_mismatch and duplicate_section.

json
{
  "success": false,
  "error": {
    "issues": [
      {
        "code": "missing_heading",
        "message": "Missing heading with depth 1",
        "path": [
          "title"
        ],
        "line": 1,
        "position": {
          "start": {
            "line": 1,
            "column": 1
          }
        }
      }
    ]
  }
}