punctuation rule

punctuation.canonical-separator

Use × between component harmonies, concatenate two canonically ordered cells for one emergent harmony-pair token, and use commas for ordinary lists or tuples.

  • 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

Write {captured} as {suggested}.

Applies in

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

Detection

composition ids
  • compose.harmony
  • compose.pair
  • compose.pattern
  • compose.single-formation
  • compose.dyad-formation
kind
punctuation
magnitude
{
  "maximum": 3,
  "minimum": 1,
  "signs": [
    "-",
    "+"
  ]
}
separators
{
  "cell": "",
  "formation_versus": "vs",
  "list": ",",
  "multiplication": "×",
  "pair": ""
}
state markers
{
  "centered": "0",
  "over": "+",
  "under": "-"
}

Authored examples and fix policies

subtypes
[
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "multiplication-symbol",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Focus × Mental"
        },
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "harmony-components-cells",
          "profile": "general-prose",
          "surface": "docs",
          "text": "VP × OE"
        },
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "harmony-components-names",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Acuity × Embrace"
        }
      ],
      "incorrect": [
        {
          "captured": "Focus x Mental",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "ascii-multiplication",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "Focus × Mental",
          "surface": "docs",
          "text": "Focus x Mental"
        },
        {
          "captured": "Acuity & Embrace",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "ampersand-between-components",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "Acuity × Embrace",
          "surface": "docs",
          "text": "Acuity & Embrace components"
        }
      ]
    },
    "id": "multiplication-operator",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "cell-concatenated",
          "profile": "general-prose",
          "surface": "docs",
          "text": "FM"
        },
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "cell-state-hyphen",
          "profile": "general-prose",
          "surface": "docs",
          "text": "F-M"
        }
      ],
      "incorrect": [
        {
          "captured": "F;M",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "cell-separated",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "FM",
          "surface": "docs",
          "text": "F;M"
        }
      ]
    },
    "id": "cell-separator",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": [
      {
        "rule_id": "composition.harmony",
        "subtype_id": "member"
      }
    ]
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "named-pair-token",
          "profile": "general-prose",
          "surface": "docs",
          "text": "The Animation harmony pair is OEVP."
        },
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "ordinary-two-cell-tuple",
          "profile": "general-prose",
          "surface": "docs",
          "text": "The cells OP,FE are listed."
        }
      ],
      "incorrect": [
        {
          "captured": "Acuity × Embrace",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "components-used-for-named-pair",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "FMBE",
          "surface": "docs",
          "text": "The harmony pair Acuity × Embrace is Pensiveness."
        },
        {
          "captured": "VP&OE",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "legacy-ampersand-pair",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "OEVP",
          "surface": "docs",
          "text": "The Animation harmony pair is VP&OE."
        }
      ]
    },
    "id": "pair-separator",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": [
      {
        "rule_id": "composition.pair",
        "subtype_id": "member"
      }
    ]
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "list-comma",
          "profile": "general-prose",
          "surface": "docs",
          "text": "OP,FE,BR"
        }
      ],
      "incorrect": [
        {
          "captured": "OP;FE;BR",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "list-semicolon",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "OP,FE,BR",
          "surface": "docs",
          "text": "OP;FE;BR"
        }
      ]
    },
    "id": "list-separator",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "expectation": {
              "attempt": {
                "axes": [
                  {
                    "axis": "axis.open",
                    "magnitude": -3
                  },
                  {
                    "axis": "axis.emotional",
                    "magnitude": 2
                  }
                ],
                "composition_id": "compose.pattern"
              },
              "components": [
                {
                  "end": 6,
                  "role": "axes",
                  "start": 0
                }
              ],
              "kind": "composition-attempt"
            },
            "kind": "typed-value",
            "node": "notation_token"
          },
          "format": "text",
          "id": "ascii-state-sign",
          "profile": "states",
          "surface": "docs",
          "text": "O-3E+2"
        }
      ],
      "incorrect": [
        {
          "captured": "O−3E+2",
          "check_input": {
            "expectation": {
              "attempt": {
                "axes": [
                  {
                    "axis": "axis.open",
                    "magnitude": -3
                  },
                  {
                    "axis": "axis.emotional",
                    "magnitude": 2
                  }
                ],
                "composition_id": "compose.pattern"
              },
              "components": [
                {
                  "end": 6,
                  "role": "axes",
                  "start": 0
                }
              ],
              "kind": "composition-attempt"
            },
            "kind": "typed-value",
            "node": "notation_token"
          },
          "format": "text",
          "id": "unicode-state-sign",
          "outcome_id": "violation",
          "profile": "states",
          "suggested": "O-3E+2",
          "surface": "docs",
          "text": "O−3E+2"
        }
      ]
    },
    "id": "state-magnitude-sign",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  },
  {
    "examples": {
      "correct": [
        {
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "formation-lowercase-vs",
          "profile": "general-prose",
          "surface": "docs",
          "text": "Localized Capacity Under — Open vs Focus"
        }
      ],
      "incorrect": [
        {
          "captured": "Open VS Focus",
          "check_input": {
            "kind": "document"
          },
          "format": "text",
          "id": "formation-uppercase-vs",
          "outcome_id": "violation",
          "profile": "general-prose",
          "suggested": "Open vs Focus",
          "surface": "docs",
          "text": "Localized Capacity Under — Open VS Focus"
        }
      ]
    },
    "id": "formation-vs",
    "outcomes": [
      {
        "disposition": "structural",
        "fix": {
          "interactive": "auto",
          "unattended": "retry"
        },
        "id": "violation"
      }
    ],
    "supersedes": []
  }
]