ordering rule

ordering.canonical-order

Keep harmony operands, state scales, pattern axes, and Formation slots in their Canon-authored semantic order.

  • product: error
  • marketing: error
  • public: warning
  • docs: warning

Rationale

No separate rationale is authored; the rule statement above is authoritative.

Guidance

No separate guidance is authored. The rule's authored examples and fix policies follow below.

Checker behavior

Message

Use canonical Canon order for {captured}.

Applies in

  • heading
  • body
  • blockquote
  • list item
  • table cell
  • json key
  • glossary term
  • notation token

Detection

composition ids
  • compose.harmony
  • compose.pattern
  • compose.single-formation
  • compose.dyad-formation
kind
ordering
state order
  • under
  • centered
  • over

Authored examples and fix policies

subtypes
[
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "harmony-capacity-first",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Focus × Mental"
        }
      ],
      "incorrect": [
        {
          "captured": "Mental × Focus",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "harmony-domain-first",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "Focus × Mental",
          "surface": "docs",
          "text": "Mental × Focus"
        }
      ]
    },
    "id": "harmony-operands",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "state-scale-canonical",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Under → Centered → Over"
        }
      ],
      "incorrect": [
        {
          "captured": "Over → Centered → Under",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "state-scale-reversed",
          "outcome_id": "violation",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Over → Centered → Under"
        }
      ]
    },
    "id": "state-scale",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "retry",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "expectation": {
              "attempt": {
                "axes": [
                  {
                    "axis": "axis.open",
                    "state": "under"
                  },
                  {
                    "axis": "axis.focus",
                    "state": "over"
                  }
                ],
                "composition_id": "compose.pattern"
              },
              "components": [
                {
                  "end": 4,
                  "role": "axes",
                  "start": 0
                }
              ],
              "kind": "composition-attempt"
            },
            "kind": "typed-value",
            "node": "notation_token"
          },
          "format": "text",
          "id": "pattern-axis-order",
          "profile": "patterns",
          "surface": "docs",
          "text": "O-F+"
        }
      ],
      "incorrect": [
        {
          "captured": "F+O-",
          "check_input": {
            "expectation": {
              "attempt": {
                "axes": [
                  {
                    "axis": "axis.focus",
                    "state": "over"
                  },
                  {
                    "axis": "axis.open",
                    "state": "under"
                  }
                ],
                "composition_id": "compose.pattern"
              },
              "components": [
                {
                  "end": 4,
                  "role": "axes",
                  "start": 0
                }
              ],
              "kind": "composition-attempt"
            },
            "kind": "typed-value",
            "node": "notation_token"
          },
          "format": "text",
          "id": "pattern-axis-reordered",
          "outcome_id": "violation",
          "profile": "patterns",
          "surface": "docs",
          "text": "F+O-"
        }
      ]
    },
    "id": "pattern-axes",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "suggest",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": [
      {
        "rule_id": "composition.pattern",
        "subtype_id": "member"
      }
    ]
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "single-formation-slot-order",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Single Formation: Level Capacity Under"
        }
      ],
      "incorrect": [
        {
          "captured": "Single Formation: Capacity Level Under",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "single-formation-slot-reordered",
          "outcome_id": "violation",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Single Formation: Capacity Level Under"
        }
      ]
    },
    "id": "formation-slots",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "retry",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  }
]