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": [] } ]