Symbols
Status: Reference Last modified: 2026-08-21 13:42 EDT
CHAT uses a rich set of symbols for transcription conventions. This
page documents the symbol categories and the symbol registry that
drives both the grammar and the Rust crates. The
symbol registry
(spec/symbols/symbol_registry.json) is the source of truth, when
this page and the registry disagree, the registry wins.
Symbol Registry
The authoritative symbol definitions live in spec/symbols/symbol_registry.json. This JSON file is the single source of truth, it generates:
- Character sets for the tree-sitter grammar (
grammar.js) - Rust constants for the model and validation crates
- Validation rules for the spec tool
After any change to the symbol registry, run:
just symbols-gen
Symbol Categories
Terminators
Punctuation that ends an utterance:
| Symbol | Name | Usage |
|---|---|---|
. | Period | Declarative |
? | Question | Interrogative |
! | Exclamation | Exclamatory |
+... | Trailing off | Incomplete utterance |
+..? | Trailing-off question | Question trails off |
+/. | Interruption | Speaker interrupted by another |
+//. | Self-interruption | Speaker interrupts self |
+/? | Interrupted question | Question interrupted |
+!? | Broken question | Exclamation-question |
+"/. | Quoted new line | Quotation continues on next line |
CA and Disfluency Symbols
The tables below are GENERATED from spec/symbols/symbol_registry.json, which
is the single owner of what each symbol means. The Rust types
CAElementType and CADelimiterType, the grammar’s character constants and
these tables all come from the same record, so they cannot disagree.
The category names describe a PARSING ROLE, not a provenance. A
ca_element_symbol attaches to a word token; a ca_delimiter_symbol brackets
a stretch. Ask a symbol’s notation_family() for provenance; never read it off
the name of the array the symbol sits in. That confusion is what once filed the
blocking and segment-repetition disfluency marks as Conversation Analysis
notation.
The Notation column is the symbol’s provenance and is independent of which
category it parses into. A symbol marked disfluency comes from the CHAT
manual’s Disfluency Transcription chapter and is not Conversation Analysis
notation; CLAN classifies those explicitly as NOT CA. They sit in the ca_*
categories purely because of how they parse.
Every example is parsed and validated by a test, so a row here cannot drift from what the grammar accepts.
Word-attached symbols (word_attached_symbols)
These attach to a word, so book↑ is a single token whose content
carries the symbol.
| Symbol | Codepoint | Meaning | Notation | Example |
|---|---|---|---|---|
⁑ | U+2051 | Hardening | CA | ⁑hello there . |
↑ | U+2191 | Shift to high pitch | CA | ↑hello there . |
↓ | U+2193 | Shift to low pitch | CA | ↓hello there . |
↻ | U+21BB | Pitch reset | CA | ↻hello there . |
≠ | U+2260 | Blocking, a word attack | disfluency | ≠hello there . |
∙ | U+2219 | Inhalation | CA | ∙hello there . |
∾ | U+223E | Constriction | CA | ∾hello there . |
⤆ | U+2906 | Sudden stop | CA | ⤆hello there . |
⤇ | U+2907 | Hurried start | CA | ⤇hello there . |
Ἡ | U+1F29 | Laugh inside a word | CA | Ἡhello there . |
Paired delimiter symbols (paired_stretch_symbols)
These are PAIRED: each opens and closes a stretch, and an unmatched one is rejected (E230).
| Symbol | Codepoint | Meaning | Notation | Example |
|---|---|---|---|---|
⁇ | U+2047 | Unsure transcription | CA | he said ⁇hello there⁇ today . |
§ | U+00A7 | Precise articulation | CA | he said §hello there§ today . |
⁎ | U+204E | Creaky voice | CA | he said ⁎hello there⁎ today . |
° | U+00B0 | Softer | CA | he said °hello there° today . |
↫ | U+21AB | Segment repetition, brackets repeated material that is NOT lexical | disfluency | ↫b-b-b↫boy ran away . |
∆ | U+2206 | Faster | CA | he said ∆hello there∆ today . |
∇ | U+2207 | Slower | CA | he said ∇hello there∇ today . |
∬ | U+222C | Whisper | CA | he said ∬hello there∬ today . |
∮ | U+222E | Singing | CA | he said ∮hello there∮ today . |
▁ | U+2581 | Low pitch register | CA | he said ▁hello there▁ today . |
▔ | U+2594 | High pitch register | CA | he said ▔hello there▔ today . |
◉ | U+25C9 | Louder | CA | he said ◉hello there◉ today . |
☺ | U+263A | Smile voice | CA | he said ☺hello there☺ today . |
♋ | U+264B | Breathy voice | CA | he said ♋hello there♋ today . |
Ϋ | U+03AB | Yawn | CA | he said Ϋhello thereΫ today . |
CA arrow separators
These are own-node separators between words rather than word-attachments, and
the parser splits them as their own nodes. They are NOT yet registry-owned, and
this table is still hand-written. They are not untyped: five of them are
Separator variants in talkbank-model, whose glyph table is hand-written
again in WriteChat and in several places across the grammar and the re2c
backend. Bringing them into the registry is the same move the two families
above have already made, and it is outstanding work rather than a decision.
| Symbol | Codepoint | Meaning |
|---|---|---|
→ | U+2192 | Level pitch contour |
↗ | U+2197 | Rising to mid |
↘ | U+2198 | Falling to mid |
⇗ | U+21D7 | Rising to high |
⇘ | U+21D8 | Falling to low |
↖ ↙ ← | U+2196, U+2199, U+2190 | Registered as separators; named in neither the CHAT manual’s symbol table nor CLAN’s symbol enum. |
Word Segment Characters
Characters that are forbidden at the start of words, forbidden in the rest of words, or forbidden throughout. These define the lexical boundaries of what constitutes a “word” in CHAT.
The grammar uses these sets to construct the word-matching regex patterns. Characters like [, ], <, >, (, ) are structural delimiters and cannot appear inside words.
Event Segment Characters
Characters forbidden in event descriptions (&=event content). Events have slightly different lexical rules than words.
Language Codes
CHAT uses ISO 639-3 three-letter language codes in @Languages headers and @s: word markers:
@Languages: eng, fra
*CHI: I want a croissant@s:fra .
Common codes: eng (English), fra (French), deu (German), spa (Spanish), zho (Mandarin), jpn (Japanese).
Special Markers
@ Markers (Word-Level)
The form-marker set has ONE owner:
spec/form_markers/form_marker_registry.json. The FormType enum, both
directions of its marker mapping, the re2c lexer’s code set and the table below
are all generated from it, so a marker cannot exist in one and not another.
| Marker | Meaning | Notes |
|---|---|---|
@b | Babbling | abame@b |
@c | Child-invented form | gumma@c, meaning sticky |
@d | Dialect form | younz@d, meaning you |
@f | Family-specific form | bunko@f, meaning broken |
@fp | Filled pause | um@fp, deprecated, use &-um instead, because filled pauses are excluded from grammatical analysis |
@g | General special form | gongga@g |
@i | Interjection, interaction | uhhuh@i |
@k | Multiple letters | abcd@k, mnemonic is “kana”: a Japanese kana is one symbol for a whole syllable |
@l | Letter | b@l, the letter b |
@ls | Letter plural | p@ls, the plural of a letter |
@n | Neologism | breaked@n, meaning broke |
@o | Onomatopoeia | woofwoof@o, a dog barking |
@p | Phonologically consistent form | aga@p |
@q | Metalinguistic use | if@q, as in no if@q-s or but@q-s, when citing words |
@sas | Sign and speech | apple@sas, signs and says apple |
@si | Singing | lalala@si |
@sl | Signed language | apple@sl, signs apple |
@t | Test word | wug@t |
@u | Unibet transcription | binga@u |
@wp | Word play | goobarumba@wp |
@x | Excluded words | stuff@x |
@z:<label> | User-defined code | word@z:rtfd, any user code |
Where the CHAT manual and chatter disagree, and why chatter is right:
@x: The manual’s Letters column writes@x:*, implying a label, but its own Example column writes barestuff@xand depfile.cut sanctions bare*@xbeside*@s:*and*@z:*.@x:foois rejected (E203); do not “fix” this to match the manual’s table.
Every meaning above is taken from the “Special Form Markers” table in the CHAT
manual, and each links to that marker’s own anchor there. They were corrected
wholesale on 2026-08-11: six had been glossed with plausible expansions of the
letters rather than their actual meanings, so @k read as “kinship” (it is
“kana”, multiple letters), @p as “proper name” (it is a phonologically
consistent form), @sl as “slang” (it is signed language), @sas as
“second attempt success” (it is sign and speech), @g as “gemination” (it is
the general special form), and @ls as “letter sequence” (it is the letter
plural; the sequence is @k). If you find another that disagrees with the
manual, the manual wins.
@a was removed on 2026-08-11. The corpus authority eliminated it from every
file on 2024-09-03 together with @e and @lp; the other two were dropped
from chatter at the time and @a was overlooked. It has no main-tier
occurrences in any corpus, and appears in neither depfile.cut nor the
manual’s table.
The second-language qualifier @s:LANG is a separate construct (see
the L2 morphotag section of the Batchalign book); it is not part of
FormType.
& Markers (Events and Fillers)
| Prefix | Meaning |
|---|---|
&= | Paralinguistic event (e.g., &=laughs) |
&- | Filler (e.g., &-um) |
&+ | Phonological fragment (e.g., &+sh) |
&~ | Nonword (e.g., &~mama) |
&* | Other speaker’s speech event (e.g., &*MOT:word, speech attributed to another speaker) |
Scope Markers
| Marker | Meaning |
|---|---|
[/] | Partial retrace, speaker repeats the same words |
[//] | Full retrace, speaker restarts with different words |
[///] | Multiple retracing, multiple false starts |
[/-] | Reformulation, speaker rephrases with different structure |
[*] | Error |
[?] | Best guess |
[>] | Overlap follows |
[<] | Overlap precedes |
[= text] | Explanation |
[: text] | Replacement |