Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

TierAST TypeTyped ItemsUsed By
%morMorTierVec<Mor> → MorWord { pos, lemma, features }EVAL, KIDEVAL, MLU, VOCD, DSS, IPSYN, SUGAR, FREQ, etc.
%graGraTierVec<GrammaticalRelation> → { head, dependent, relation }EVAL, KIDEVAL, SUGAR, IPSYN
%phoPhoTierVec<PhoItem> → PhoWord { phones }PHONFREQ
%modMod(PhoTier)Same structure as %phoMODREP, MAKEMOD
%sinSinTierSinGroupGestures(not directly analyzed)
%actActTierBulletContent (text with optional timing)(situational)
%codCodTierBulletContent → CodSemanticElement via cod.rsCODES, CHAINS, KEYMAP, RELY
%xmodsylModsyl(SylTier)Vec<NonEmptyString> — syllabified target IPA (Phon)(see Phon Tiers)
%xphosylPhosyl(SylTier)Vec<NonEmptyString> — syllabified actual IPA (Phon)(see Phon Tiers)
%xphoalnPhoaln(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.

TierAST TypeContentUsed By
%addAddTierBulletContent (addressee annotations)(rare)
%comComTierBulletContent (comments)(metadata)
%expExpTierBulletContent (explanations)(metadata)
%gpxGpxTierBulletContent (gestural/proxemic)(situational)
%intIntTierBulletContent (intonation)(situational)
%sitSitTierBulletContent (situational notes)(situational)
%spaSpaTierBulletContent (speech act)(pragmatic analysis)

Simple Text (10 tiers)

These tiers contain plain text without timing bullets. They have minimal structure.

TierContentNotes
%altAlternative transcription
%cohCohesion annotation
%defDefinitions
%engEnglish gloss
%errError coding
%facFacial expression
%floFluent outputGenerated by FLO transform
%glsGloss
%ortOrthographic representation
%parParalinguistic

Special (4 tiers)

TierAST TypeNotes
%timTimTierTiming offset (numeric, not text)
%worWorTierWord-level alignment tier (generated from main tier)
UserDefinedUserDefinedTierArbitrary %xyz tiers not in the standard set
UnsupportedUnsupportedTierParser 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