Dependent Tier Semantics Matrix
Status: Current Last updated: 2026-05-11 23:50 EDT
Classification of the 31 DependentTier variants
(crates/core/talkbank-model/src/model/dependent_tier/types.rs) by
structural complexity and how commands access them.
Fully Structured (10 tiers)
These tiers have dedicated AST types with typed items. Commands should iterate typed fields, never split_whitespace() on serialized text.
| Tier | AST Type | Typed Items | Used By |
|---|---|---|---|
%mor | MorTier | Vec<Mor> → MorWord { pos, lemma, features } | EVAL, KIDEVAL, MLU, VOCD, DSS, IPSYN, SUGAR, FREQ, etc. |
%gra | GraTier | Vec<GrammaticalRelation> → { head, dependent, relation } | EVAL, KIDEVAL, SUGAR, IPSYN |
%pho | PhoTier | Vec<PhoItem> → PhoWord { phones } | PHONFREQ |
%mod | Mod(PhoTier) | Same structure as %pho | MODREP, MAKEMOD |
%sin | SinTier | SinGroupGestures | (not directly analyzed) |
%act | ActTier | BulletContent (text with optional timing) | (situational) |
%cod | CodTier | BulletContent → CodSemanticElement via cod.rs | CODES, CHAINS, KEYMAP, RELY |
%xmodsyl | Modsyl(SylTier) | Vec<NonEmptyString> — syllabified target IPA (Phon) | (see Phon Tiers) |
%xphosyl | Phosyl(SylTier) | Vec<NonEmptyString> — syllabified actual IPA (Phon) | (see Phon Tiers) |
%xphoaln | Phoaln(PhoalnTier) | Vec<WordAlignment> — segmental target↔actual mappings (Phon) | (see Phon Tiers) |
Bullet-Bearing Text (7 tiers)
These tiers contain free text with optional timing bullets. The text content is not further parsed into typed items. Commands access via BulletContent.text.
| Tier | AST Type | Content | Used By |
|---|---|---|---|
%add | AddTier | BulletContent (addressee annotations) | (rare) |
%com | ComTier | BulletContent (comments) | (metadata) |
%exp | ExpTier | BulletContent (explanations) | (metadata) |
%gpx | GpxTier | BulletContent (gestural/proxemic) | (situational) |
%int | IntTier | BulletContent (intonation) | (situational) |
%sit | SitTier | BulletContent (situational notes) | (situational) |
%spa | SpaTier | BulletContent (speech act) | (pragmatic analysis) |
Simple Text (10 tiers)
These tiers contain plain text without timing bullets. They have minimal structure.
| Tier | Content | Notes |
|---|---|---|
%alt | Alternative transcription | |
%coh | Cohesion annotation | |
%def | Definitions | |
%eng | English gloss | |
%err | Error coding | |
%fac | Facial expression | |
%flo | Fluent output | Generated by FLO transform |
%gls | Gloss | |
%ort | Orthographic representation | |
%par | Paralinguistic |
Special (4 tiers)
| Tier | AST Type | Notes |
|---|---|---|
%tim | TimTier | Timing offset (numeric, not text) |
%wor | WorTier | Word-level alignment tier (generated from main tier) |
UserDefined | UserDefinedTier | Arbitrary %xyz tiers not in the standard set |
Unsupported | UnsupportedTier | Parser catch-all for unrecognized tier prefixes |
Command Access Patterns
Correct: Typed access
// EVAL, KIDEVAL — iterate typed MorTier items
if let Some(mor_tier) = mor::extract_mor_tier(utterance) {
for item in mor_tier.items.iter() {
mor::classify_mor_item(item, &mut counts);
}
}
Correct: Generic fallback for untyped tiers
// RELY, KEYMAP — split_whitespace() on tiers without typed representation
codes.extend(
dependent_tier_content_text(dep)
.split_whitespace()
.filter(|t| !t.is_empty() && *t != ".")
.map(str::to_owned),
);
Incorrect: Serializing typed tier then re-tokenizing
// DO NOT: serialize %mor then split_whitespace()
let text = dependent_tier_content_text(dep);
for token in text.split_whitespace() { ... }
// Instead: iterate MorTier.items directly