diff --git a/conformance-stress/README.md b/conformance-stress/README.md
new file mode 100644
index 000000000..27a6286b2
--- /dev/null
+++ b/conformance-stress/README.md
@@ -0,0 +1,44 @@
+# Stress fixtures
+
+These grammars are for timing and optimization work on the analysis pass. They are not conformance
+fixtures: they live outside `conformance/`, so no ledger, manifest, coverage report or default runner
+sees them. Each `words.yaml` starts with `# kind: stress`.
+
+Expected output is a parity check: the parses are what `master` produces (three identical runs were
+required), so an optimization must return the same parses. The measure of a change is the number of
+analysis steps, not wall-clock time.
+
+Run them only on request:
+
+```
+dotnet test tests/SIL.Machine.Morphology.HermitCrab.Tests --filter TestCategory=Stress
+dotnet run --project src/SIL.Machine.Morphology.HermitCrab.Conformance -- --fixtures conformance-stress --include-pathological
+```
+
+The test fixture is `[Explicit]` and `[Category("Stress")]`, so a plain `dotnet test` skips it.
+
+| Fixture | What it exercises | Built for |
+|---|---|---|
+| `bantu-tam-templates` | Bantu slot templates with required slots (subject, object, extension, TAM, final vowel); 12 of 60 words have no parse | #575, #576 (required-slot look-ahead) |
+| `bantu-tam-templates-shared` | the same words with three trailing slots shared across templates | #575, #576 (required-slot look-ahead) |
+| `bantu-tam-fusion` | the same Bantu slot templates, but each object and subject rule has a plain and a vowel-fusion allomorph (synthetic, not a real language; 28 of 60 words have no parse) | the impure-slot look-ahead, stacked on #576 |
+| `truncating-slot-chain` | slot templates whose required and optional suffix slots each delete the vowel before them, so required slots are always missing a segment a later slot restores (synthetic; the look-ahead prunes next to nothing; 12 of 60 words have no parse) | the supply-set look-ahead, stacked on #579 (its worst case) |
+| `early-lexicon-agglutinative` | agglutinative words whose root is found early; root-substring and edge-segment prunes | #572, #574 (root-substring prune, edge-segment prefilter) |
+| `bantu-extension-chain` | chained verbal extensions | excluded co-occurrence check (parked; #490 ledger) |
+| `bantu-extension-required-slot` | extension chain with a required slot | template replay at lookup (dead end; #490 ledger) |
+| `required-template-slot` | a required template slot with decoy branches | template replay at lookup (dead end; #490 ledger) |
+| `athabaskan-prefix-complex` | a dense prefix complex | excluded co-occurrence check (parked; #490 ledger) |
+| `excluded-cooccurrence` | dense morpheme co-occurrence exclusions | excluded co-occurrence check (parked; #490 ledger) |
+| `allomorph-list-density` | many allomorphs per morpheme | #560 (allomorph-loop cutoff) |
+| `prefix-class-density` | many prefix classes | #560 (allomorph-loop cutoff) |
+| `derivation-chain-homophone-roots` | derivation chains over homophonous roots | template replay at lookup (dead end; #490 ledger) |
+| `mpr-bantu-concord` | noun-class concord through MPR features | #570 (MPR replay) |
+| `mpr-inflection-classes` | inflection classes through MPR features | #570 (MPR replay) |
+| `env-bantu-concord` | allomorphs conditioned by environment | environment input prefilter (dead end; #490 ledger) |
+| `env-austronesian-nasal-prefix` | nasal-prefix allomorphs conditioned by environment | environment input prefilter (dead end; #490 ledger) |
+| `env-zero-allomorphs` | zero allomorphs with rare-class environments | environment input prefilter (dead end; #490 ledger) |
+
+`early-lexicon-agglutinative` omits the word `polundanasak`: engines before #548 (synthesis
+filtered by the allomorphs used) trace an extra phonological rule for it that master does not, so no single expectation passes on both.
+`deep-derivation-trace` is not included: it measures trace memory and
+its words have up to 864 parses each.
diff --git a/conformance-stress/edge-cases/allomorph-list-density/grammar.xml b/conformance-stress/edge-cases/allomorph-list-density/grammar.xml
new file mode 100644
index 000000000..3ba4d802e
--- /dev/null
+++ b/conformance-stress/edge-cases/allomorph-list-density/grammar.xml
@@ -0,0 +1,115 @@
+
+
+
+
+ StressAllomorphListDensity
+
+ nounverb
+ phaoueiyktlrndms
+ Main
+ a
+ o
+ u
+ e
+ i
+ y
+ k
+ t
+ l
+ r
+ n
+ d
+ m
+ s
+
+
+ Any
+ ncCons
+ ncVoiced
+ ncVless
+ ncV_a
+ ncV_e
+ ncV_ei
+ ncV_i
+ ncV_o
+ ncV_ou
+ ncV_u
+ ncV_y
+
+
+
+ Main
+
+ rPl
+ lor
+ lar
+ lyr
+ ler
+ PLPL
+ rPoss
+ ini
+ ana
+ yny
+ ene
+ ono
+ unu
+ POSSPOSS
+ rCase
+ ke
+ nko
+ ka
+ nky
+ ko
+ nke
+ ky
+ nka
+ CASECASE
+ rPast
+ te
+ da
+ ty
+ do
+ de
+ ta
+ to
+ dy
+ PASTPAST
+ rEvid
+ mys
+ mes
+ mas
+ mos
+ EVIDEVID
+
+
+ nounTemplateslotPlslotPossslotCase
+ verbTemplateslotPastslotEvid
+
+
+ katKATkat
+ kotKOTkot
+ kulKULkul
+ kelKELkel
+ kilKILkil
+ kylKYLkyl
+ salanSALANsalan
+ morutMORUTmorut
+ tilemTILEMtilem
+ nytseNYTSEnytse
+ masaMASAmasa
+ koneKONEkone
+ sarSARsar
+ tolTOLtol
+ murMURmur
+ kerKERker
+ sinSINsin
+ mydMYDmyd
+ tarkTARKtark
+ delsDELSdels
+ nukNUKnuk
+ kytKYTkyt
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/allomorph-list-density/words.yaml b/conformance-stress/edge-cases/allomorph-list-density/words.yaml
new file mode 100644
index 000000000..b0182ae27
--- /dev/null
+++ b/conformance-stress/edge-cases/allomorph-list-density/words.yaml
@@ -0,0 +1,373 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# HAND DERIVATION. Every suffix is a rule with several allomorphs, each with a RequiredEnvironments on the
+# stem's left context (grammar.xml). The environments of one rule are mutually exclusive, so exactly one
+# allomorph is valid for a given stem and no disjunctive re-check rejects. Rules: nouns take PL, POSS, CASE
+# in that slot order (all optional); verbs take PAST then EVID.
+# PL last vowel a -> lar, o/u -> lor, e/i -> ler, y -> lyr.
+# POSS last vowel selects ana, ono, unu, ene, ini, yny (a, o, u, e, i, y).
+# CASE vowel class of the last vowel x stem-final vowel (V) or consonant (C): a ka/nka, o/u ko/nko, e/i ke/nke, y ky/nky.
+# PAST vowel class x stem-final voicing (voiced l r n d m -> d; voiceless k t s -> t): da ta, do to, de te, dy ty.
+# EVID vowel class: mas, mos, mes, mys.
+# "Last vowel" means the last vowel of the stem built so far, including earlier suffixes.
+# Allomorph lists are ordered differently per rule, so recorded indices spread over 0..A-1; this is the point
+# of the fixture (E1, the synthesis allomorph loop cutoff). Expected parses below were derived by applying
+# these rules and enumerating every root and slot choice that produces each surface form, so ambiguous
+# surfaces list every analysis. They were then confirmed against the engine with the cutoff off.
+language: StressAllomorphListDensity
+inspired_by: ["synthetic Turkic/Uralic vowel harmony written as separate environment-conditioned allomorphs"]
+sources:
+ - "E1 stress fixture, hermitcrab-2026-10-27-synthesis-to-analysis-round"
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: katlarananka
+ note: >-
+ kat + PL + POSS + CASE: PL -> lar (allomorph 1); POSS -> ana (allomorph 1); CASE -> nka (allomorph 7). Surface katlarananka.
+ parses:
+ - signature: "KAT+PL+POSS+CASE|katlarananka"
+ gloss: kat-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: katlarka
+ note: >-
+ kat + PL + CASE: PL -> lar (allomorph 1); CASE -> ka (allomorph 2). Surface katlarka.
+ parses:
+ - signature: "KAT+PL+CASE|katlarka"
+ gloss: kat-PL-CASE
+ rules: [rPl, rCase]
+ exercises: []
+ - word: kotlorononko
+ note: >-
+ kot + PL + POSS + CASE: PL -> lor (allomorph 0); POSS -> ono (allomorph 4); CASE -> nko (allomorph 1). Surface kotlorononko.
+ parses:
+ - signature: "KOT+PL+POSS+CASE|kotlorononko"
+ gloss: kot-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: kotononko
+ note: >-
+ kot + POSS + CASE: POSS -> ono (allomorph 4); CASE -> nko (allomorph 1). Surface kotononko.
+ parses:
+ - signature: "KOT+POSS+CASE|kotononko"
+ gloss: kot-POSS-CASE
+ rules: [rPoss, rCase]
+ exercises: []
+ - word: kullorononko
+ note: >-
+ kul + PL + POSS + CASE: PL -> lor (allomorph 0); POSS -> ono (allomorph 4); CASE -> nko (allomorph 1). Surface kullorononko.
+ parses:
+ - signature: "KUL+PL+POSS+CASE|kullorononko"
+ gloss: kul-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: kullorono
+ note: >-
+ kul + PL + POSS: PL -> lor (allomorph 0); POSS -> ono (allomorph 4). Surface kullorono.
+ parses:
+ - signature: "KUL+PL+POSS|kullorono"
+ gloss: kul-PL-POSS
+ rules: [rPl, rPoss]
+ exercises: []
+ - word: kellerenenke
+ note: >-
+ kel + PL + POSS + CASE: PL -> ler (allomorph 3); POSS -> ene (allomorph 3); CASE -> nke (allomorph 5). Surface kellerenenke.
+ parses:
+ - signature: "KEL+PL+POSS+CASE|kellerenenke"
+ gloss: kel-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: kellerke
+ note: >-
+ kel + PL + CASE: PL -> ler (allomorph 3); CASE -> ke (allomorph 0). Surface kellerke.
+ parses:
+ - signature: "KEL+PL+CASE|kellerke"
+ gloss: kel-PL-CASE
+ rules: [rPl, rCase]
+ exercises: []
+ - word: killerenenke
+ note: >-
+ kil + PL + POSS + CASE: PL -> ler (allomorph 3); POSS -> ene (allomorph 3); CASE -> nke (allomorph 5). Surface killerenenke.
+ parses:
+ - signature: "KIL+PL+POSS+CASE|killerenenke"
+ gloss: kil-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: kilininke
+ note: >-
+ kil + POSS + CASE: POSS -> ini (allomorph 0); CASE -> nke (allomorph 5). Surface kilininke.
+ parses:
+ - signature: "KIL+POSS+CASE|kilininke"
+ gloss: kil-POSS-CASE
+ rules: [rPoss, rCase]
+ exercises: []
+ - word: kyllyrynynky
+ note: >-
+ kyl + PL + POSS + CASE: PL -> lyr (allomorph 2); POSS -> yny (allomorph 2); CASE -> nky (allomorph 3). Surface kyllyrynynky.
+ parses:
+ - signature: "KYL+PL+POSS+CASE|kyllyrynynky"
+ gloss: kyl-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: kyllyryny
+ note: >-
+ kyl + PL + POSS: PL -> lyr (allomorph 2); POSS -> yny (allomorph 2). Surface kyllyryny.
+ parses:
+ - signature: "KYL+PL+POSS|kyllyryny"
+ gloss: kyl-PL-POSS
+ rules: [rPl, rPoss]
+ exercises: []
+ - word: salanlarananka
+ note: >-
+ salan + PL + POSS + CASE: PL -> lar (allomorph 1); POSS -> ana (allomorph 1); CASE -> nka (allomorph 7). Surface salanlarananka.
+ parses:
+ - signature: "SALAN+PL+POSS+CASE|salanlarananka"
+ gloss: salan-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: salanlarka
+ note: >-
+ salan + PL + CASE: PL -> lar (allomorph 1); CASE -> ka (allomorph 2). Surface salanlarka.
+ parses:
+ - signature: "SALAN+PL+CASE|salanlarka"
+ gloss: salan-PL-CASE
+ rules: [rPl, rCase]
+ exercises: []
+ - word: morutlorononko
+ note: >-
+ morut + PL + POSS + CASE: PL -> lor (allomorph 0); POSS -> ono (allomorph 4); CASE -> nko (allomorph 1). Surface morutlorononko.
+ parses:
+ - signature: "MORUT+PL+POSS+CASE|morutlorononko"
+ gloss: morut-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: morutununko
+ note: >-
+ morut + POSS + CASE: POSS -> unu (allomorph 5); CASE -> nko (allomorph 1). Surface morutununko.
+ parses:
+ - signature: "MORUT+POSS+CASE|morutununko"
+ gloss: morut-POSS-CASE
+ rules: [rPoss, rCase]
+ exercises: []
+ - word: tilemlerenenke
+ note: >-
+ tilem + PL + POSS + CASE: PL -> ler (allomorph 3); POSS -> ene (allomorph 3); CASE -> nke (allomorph 5). Surface tilemlerenenke.
+ parses:
+ - signature: "TILEM+PL+POSS+CASE|tilemlerenenke"
+ gloss: tilem-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: tilemlerene
+ note: >-
+ tilem + PL + POSS: PL -> ler (allomorph 3); POSS -> ene (allomorph 3). Surface tilemlerene.
+ parses:
+ - signature: "TILEM+PL+POSS|tilemlerene"
+ gloss: tilem-PL-POSS
+ rules: [rPl, rPoss]
+ exercises: []
+ - word: nytselerenenke
+ note: >-
+ nytse + PL + POSS + CASE: PL -> ler (allomorph 3); POSS -> ene (allomorph 3); CASE -> nke (allomorph 5). Surface nytselerenenke.
+ parses:
+ - signature: "NYTSE+PL+POSS+CASE|nytselerenenke"
+ gloss: nytse-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: nytselerke
+ note: >-
+ nytse + PL + CASE: PL -> ler (allomorph 3); CASE -> ke (allomorph 0). Surface nytselerke.
+ parses:
+ - signature: "NYTSE+PL+CASE|nytselerke"
+ gloss: nytse-PL-CASE
+ rules: [rPl, rCase]
+ exercises: []
+ - word: masalarananka
+ note: >-
+ masa + PL + POSS + CASE: PL -> lar (allomorph 1); POSS -> ana (allomorph 1); CASE -> nka (allomorph 7). Surface masalarananka.
+ parses:
+ - signature: "MASA+PL+POSS+CASE|masalarananka"
+ gloss: masa-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: masaananka
+ note: >-
+ masa + POSS + CASE: POSS -> ana (allomorph 1); CASE -> nka (allomorph 7). Surface masaananka.
+ parses:
+ - signature: "MASA+POSS+CASE|masaananka"
+ gloss: masa-POSS-CASE
+ rules: [rPoss, rCase]
+ exercises: []
+ - word: konelerenenke
+ note: >-
+ kone + PL + POSS + CASE: PL -> ler (allomorph 3); POSS -> ene (allomorph 3); CASE -> nke (allomorph 5). Surface konelerenenke.
+ parses:
+ - signature: "KONE+PL+POSS+CASE|konelerenenke"
+ gloss: kone-PL-POSS-CASE
+ rules: [rPl, rPoss, rCase]
+ exercises: []
+ - word: konelerene
+ note: >-
+ kone + PL + POSS: PL -> ler (allomorph 3); POSS -> ene (allomorph 3). Surface konelerene.
+ parses:
+ - signature: "KONE+PL+POSS|konelerene"
+ gloss: kone-PL-POSS
+ rules: [rPl, rPoss]
+ exercises: []
+ - word: sardamas
+ note: >-
+ sar + PAST + EVID: PAST -> da (allomorph 1); EVID -> mas (allomorph 2). Surface sardamas.
+ parses:
+ - signature: "SAR+PAST+EVID|sardamas"
+ gloss: sar-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: sarda
+ note: >-
+ sar + PAST: PAST -> da (allomorph 1). Surface sarda.
+ parses:
+ - signature: "SAR+PAST|sarda"
+ gloss: sar-PAST
+ rules: [rPast]
+ exercises: []
+ - word: toldomos
+ note: >-
+ tol + PAST + EVID: PAST -> do (allomorph 3); EVID -> mos (allomorph 3). Surface toldomos.
+ parses:
+ - signature: "TOL+PAST+EVID|toldomos"
+ gloss: tol-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: toldo
+ note: >-
+ tol + PAST: PAST -> do (allomorph 3). Surface toldo.
+ parses:
+ - signature: "TOL+PAST|toldo"
+ gloss: tol-PAST
+ rules: [rPast]
+ exercises: []
+ - word: murdomos
+ note: >-
+ mur + PAST + EVID: PAST -> do (allomorph 3); EVID -> mos (allomorph 3). Surface murdomos.
+ parses:
+ - signature: "MUR+PAST+EVID|murdomos"
+ gloss: mur-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: murdo
+ note: >-
+ mur + PAST: PAST -> do (allomorph 3). Surface murdo.
+ parses:
+ - signature: "MUR+PAST|murdo"
+ gloss: mur-PAST
+ rules: [rPast]
+ exercises: []
+ - word: kerdemes
+ note: >-
+ ker + PAST + EVID: PAST -> de (allomorph 4); EVID -> mes (allomorph 1). Surface kerdemes.
+ parses:
+ - signature: "KER+PAST+EVID|kerdemes"
+ gloss: ker-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: kerde
+ note: >-
+ ker + PAST: PAST -> de (allomorph 4). Surface kerde.
+ parses:
+ - signature: "KER+PAST|kerde"
+ gloss: ker-PAST
+ rules: [rPast]
+ exercises: []
+ - word: sindemes
+ note: >-
+ sin + PAST + EVID: PAST -> de (allomorph 4); EVID -> mes (allomorph 1). Surface sindemes.
+ parses:
+ - signature: "SIN+PAST+EVID|sindemes"
+ gloss: sin-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: sinde
+ note: >-
+ sin + PAST: PAST -> de (allomorph 4). Surface sinde.
+ parses:
+ - signature: "SIN+PAST|sinde"
+ gloss: sin-PAST
+ rules: [rPast]
+ exercises: []
+ - word: myddymys
+ note: >-
+ myd + PAST + EVID: PAST -> dy (allomorph 7); EVID -> mys (allomorph 0). Surface myddymys.
+ parses:
+ - signature: "MYD+PAST+EVID|myddymys"
+ gloss: myd-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: myddy
+ note: >-
+ myd + PAST: PAST -> dy (allomorph 7). Surface myddy.
+ parses:
+ - signature: "MYD+PAST|myddy"
+ gloss: myd-PAST
+ rules: [rPast]
+ exercises: []
+ - word: tarktamas
+ note: >-
+ tark + PAST + EVID: PAST -> ta (allomorph 5); EVID -> mas (allomorph 2). Surface tarktamas.
+ parses:
+ - signature: "TARK+PAST+EVID|tarktamas"
+ gloss: tark-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: delstemes
+ note: >-
+ dels + PAST + EVID: PAST -> te (allomorph 0); EVID -> mes (allomorph 1). Surface delstemes.
+ parses:
+ - signature: "DELS+PAST+EVID|delstemes"
+ gloss: dels-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: nuktomos
+ note: >-
+ nuk + PAST + EVID: PAST -> to (allomorph 6); EVID -> mos (allomorph 3). Surface nuktomos.
+ parses:
+ - signature: "NUK+PAST+EVID|nuktomos"
+ gloss: nuk-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: kyttymys
+ note: >-
+ kyt + PAST + EVID: PAST -> ty (allomorph 2); EVID -> mys (allomorph 0). Surface kyttymys.
+ parses:
+ - signature: "KYT+PAST+EVID|kyttymys"
+ gloss: kyt-PAST-EVID
+ rules: [rPast, rEvid]
+ exercises: []
+ - word: kotlar
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
+ - word: kalyr
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
+ - word: sarte
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
+ - word: tolmes
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
+ - word: kylnka
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
+ - word: kotanaka
+ note: >-
+ Harmony violation: no allomorph's environment holds for the stem, so no analysis survives.
+ expect_fail: true
+ exercises: []
diff --git a/conformance-stress/edge-cases/athabaskan-prefix-complex/grammar.xml b/conformance-stress/edge-cases/athabaskan-prefix-complex/grammar.xml
new file mode 100644
index 000000000..5a8663640
--- /dev/null
+++ b/conformance-stress/edge-cases/athabaskan-prefix-complex/grammar.xml
@@ -0,0 +1,456 @@
+
+
+
+
+ StressAthabaskanPrefixComplex
+
+
+ v
+
+
+ Main
+
+ a
+ i
+ k
+ n
+ t
+
+
+
+ Any
+
+
+
+ Main
+
+
+ s1a
+
+
+
+ a
+
+
+ S1a
+
+
+ s1b
+
+
+
+ i
+
+
+ S1b
+
+
+ s1c
+
+
+
+ ta
+
+
+ S1c
+
+
+ s1d
+
+
+
+ ki
+
+
+ S1d
+
+
+ s1e
+
+
+
+ na
+
+
+ S1e
+
+
+ s2a
+
+
+
+ i
+
+
+ S2a
+
+
+ s2b
+
+
+
+ a
+
+
+ S2b
+
+
+ s2c
+
+
+
+ ti
+
+
+ S2c
+
+
+ s2d
+
+
+
+ ka
+
+
+ S2d
+
+
+ s2e
+
+
+
+ an
+
+
+ S2e
+
+
+ s3a
+
+
+
+ a
+
+
+ S3a
+
+
+ s3b
+
+
+
+ ta
+
+
+ S3b
+
+
+ s3c
+
+
+
+ ni
+
+
+ S3c
+
+
+ s3d
+
+
+
+ ik
+
+
+ S3d
+
+
+ s3e
+
+
+
+ kia
+
+
+ S3e
+
+
+ s4a
+
+
+
+ i
+
+
+ S4a
+
+
+ s4b
+
+
+
+ ka
+
+
+ S4b
+
+
+ s4c
+
+
+
+ na
+
+
+ S4c
+
+
+ s4d
+
+
+
+ at
+
+
+ S4d
+
+
+ s4e
+
+
+
+ ti
+
+
+ S4e
+
+
+ s5a
+
+
+
+ a
+
+
+ S5a
+
+
+ s5b
+
+
+
+ ti
+
+
+ S5b
+
+
+ s5c
+
+
+
+ ak
+
+
+ S5c
+
+
+ s5d
+
+
+
+ ni
+
+
+ S5d
+
+
+ s5e
+
+
+
+ ki
+
+
+ S5e
+
+
+ s6a
+
+
+
+ ta
+
+
+ S6a
+
+
+ s6b
+
+
+
+ i
+
+
+ S6b
+
+
+ s6c
+
+
+
+ ka
+
+
+ S6c
+
+
+ s6d
+
+
+
+ na
+
+
+ S6d
+
+
+ s6e
+
+
+
+
+
+
+ S6e
+
+
+
+
+ verbTemplate
+
+ slot1
+
+
+ slot2
+
+
+ slot3
+
+
+ slot4
+
+
+ slot5
+
+
+ slot6
+
+
+
+
+
+ tak
+ R1
+
+
+ kin
+ R2
+
+
+ nat
+ R3
+
+
+ ink
+ R4
+
+
+ kat
+ R5
+
+
+ tin
+ R6
+
+
+ ant
+ R7
+
+
+ nik
+ R8
+
+
+ kan
+ R9
+
+
+ tik
+ R10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/athabaskan-prefix-complex/words.yaml b/conformance-stress/edge-cases/athabaskan-prefix-complex/words.yaml
new file mode 100644
index 000000000..fa7a876a3
--- /dev/null
+++ b/conformance-stress/edge-cases/athabaskan-prefix-complex/words.yaml
@@ -0,0 +1,554 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# StressAthabaskanPrefixComplex: dense-exclusion stress fixture, generated by gen_dense_exclusions.py. The expected parses
+# come from that script's own enumeration of filler choices, not from the engine, and were confirmed
+# against the engine with Morpher.PruneExcludedCoOccurrence off.
+language: StressAthabaskanPrefixComplex
+inspired_by: ["Athabaskan-style verb prefix complex (synthetic; not modeling a real language)"]
+requires: []
+fieldworks_producible: true
+budget_ms: 120000
+words:
+ - word: "tatianakan"
+ note: >-
+ 6 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S6a+S4e+S2b+S1e+R9|tatianakan"
+ rules: [mrS6a, mrS4e, mrS2b, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4e+S2e+S1a+R9|tatianakan"
+ rules: [mrS6a, mrS4e, mrS2e, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "taaninik"
+ note: >-
+ 4 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "S3b+S2e+S1b+R8+S6e|taaninik"
+ rules: [mrS6e, mrS3b, mrS2e, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3b+S2e+S1b+R8|taaninik"
+ rules: [mrS3b, mrS2e, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S2e+S1b+R8|taaninik"
+ rules: [mrS6a, mrS2e, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "akiaaant"
+ note: >-
+ 10 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "S5a+S3e+S1a+R7|akiaaant"
+ rules: [mrS5a, mrS3e, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S3e+S2b+R7|akiaaant"
+ rules: [mrS5a, mrS3e, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S2b+S1a+R7|akiaaant"
+ rules: [mrS5c, mrS4a, mrS2b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "aatkitik"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5a+S4d+S1d+R10|aatkitik"
+ rules: [mrS5a, mrS4d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "niatitakin"
+ note: >-
+ 4 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S3a+S2c+S1c+R2|niatitakin"
+ rules: [mrS5d, mrS3a, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4d+S2a+S1c+R2|niatitakin"
+ rules: [mrS5d, mrS4d, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikaanat"
+ note: >-
+ 10 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S3c+S2d+S1a+R3+S6e|nikaanat"
+ rules: [mrS6e, mrS3c, mrS2d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3c+S2d+S1a+R3|nikaanat"
+ rules: [mrS3c, mrS2d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S2d+S1a+R3|nikaanat"
+ rules: [mrS5d, mrS2d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4b+S1a+R3|nikaanat"
+ rules: [mrS5d, mrS4b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4b+S2b+R3|nikaanat"
+ rules: [mrS5d, mrS4b, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "naikat"
+ note: >-
+ 7 segmentations; 7 survive the exclude rules.
+ parses:
+ - signature: "S4c+S1b+R5+S6e|naikat"
+ rules: [mrS6e, mrS4c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4c+S1b+R5|naikat"
+ rules: [mrS4c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4c+S2a+R5+S6e|naikat"
+ rules: [mrS6e, mrS4c, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4c+S2a+R5|naikat"
+ rules: [mrS4c, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6d+S1b+R5|naikat"
+ rules: [mrS6d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6d+S2a+R5|naikat"
+ rules: [mrS6d, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6d+S4a+R5|naikat"
+ rules: [mrS6d, mrS4a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tatiantak"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6a+S4e+S2e+R1|tatiantak"
+ rules: [mrS6a, mrS4e, mrS2e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "itaanakan"
+ note: >-
+ 6 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S6b+S3b+S2b+S1e+R9|itaanakan"
+ rules: [mrS6b, mrS3b, mrS2b, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6b+S3b+S2e+S1a+R9|itaanakan"
+ rules: [mrS6b, mrS3b, mrS2e, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kaitik"
+ note: >-
+ 9 segmentations; 9 survive the exclude rules.
+ parses:
+ - signature: "S2d+S1b+R10+S6e|kaitik"
+ rules: [mrS6e, mrS2d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S2d+S1b+R10|kaitik"
+ rules: [mrS2d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S1b+R10+S6e|kaitik"
+ rules: [mrS6e, mrS4b, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S1b+R10|kaitik"
+ rules: [mrS4b, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2a+R10+S6e|kaitik"
+ rules: [mrS6e, mrS4b, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2a+R10|kaitik"
+ rules: [mrS4b, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S1b+R10|kaitik"
+ rules: [mrS6c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2a+R10|kaitik"
+ rules: [mrS6c, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4a+R10|kaitik"
+ rules: [mrS6c, mrS4a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "naniianik"
+ note: >-
+ 7 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6d+S3c+S2a+S1a+R8|naniianik"
+ rules: [mrS6d, mrS3c, mrS2a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "titatik"
+ note: >-
+ 10 segmentations; 6 survive the exclude rules.
+ parses:
+ - signature: "S2c+S1c+R10+S6e|titatik"
+ rules: [mrS6e, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S2c+S1c+R10|titatik"
+ rules: [mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4e+S1c+R10+S6e|titatik"
+ rules: [mrS6e, mrS4e, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4e+S1c+R10|titatik"
+ rules: [mrS4e, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S1c+R10|titatik"
+ rules: [mrS5b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S3b+R10|titatik"
+ rules: [mrS5b, mrS3b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kiatikitik"
+ note: >-
+ 10 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S3e+S2c+S1d+R10+S6e|kiatikitik"
+ rules: [mrS6e, mrS3e, mrS2c, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3e+S2c+S1d+R10|kiatikitik"
+ rules: [mrS3e, mrS2c, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5e+S3a+S2c+S1d+R10|kiatikitik"
+ rules: [mrS5e, mrS3a, mrS2c, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5e+S4d+S2a+S1d+R10|kiatikitik"
+ rules: [mrS5e, mrS4d, mrS2a, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "naaaatik"
+ note: >-
+ 6 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6d+S3a+S2b+S1a+R10|naaaatik"
+ rules: [mrS6d, mrS3a, mrS2b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "iatatik"
+ note: >-
+ 11 segmentations; 6 survive the exclude rules.
+ parses:
+ - signature: "S4a+S2b+S1c+R10+S6e|iatatik"
+ rules: [mrS6e, mrS4a, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4a+S2b+S1c+R10|iatatik"
+ rules: [mrS4a, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6b+S2b+S1c+R10|iatatik"
+ rules: [mrS6b, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6b+S3a+S1c+R10|iatatik"
+ rules: [mrS6b, mrS3a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6b+S4d+S1a+R10|iatatik"
+ rules: [mrS6b, mrS4d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6b+S4d+S2b+R10|iatatik"
+ rules: [mrS6b, mrS4d, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikataant"
+ note: >-
+ 8 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S3c+S2d+S1c+R7+S6e|nikataant"
+ rules: [mrS6e, mrS3c, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3c+S2d+S1c+R7|nikataant"
+ rules: [mrS3c, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S2d+S1c+R7|nikataant"
+ rules: [mrS5d, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4b+S1c+R7|nikataant"
+ rules: [mrS5d, mrS4b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "akkiatakat"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5c+S3e+S1c+R5|akkiatakat"
+ rules: [mrS5c, mrS3e, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "akiakiink"
+ note: >-
+ 6 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5a+S3e+S1d+R4|akiakiink"
+ rules: [mrS5a, mrS3e, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S2b+S1d+R4|akiakiink"
+ rules: [mrS5c, mrS4a, mrS2b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katiakin"
+ note: >-
+ 9 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2c+S1a+R2+S6e|katiakin"
+ rules: [mrS6e, mrS4b, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2c+S1a+R2|katiakin"
+ rules: [mrS4b, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2c+S1a+R2|katiakin"
+ rules: [mrS6c, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4e+S1a+R2|katiakin"
+ rules: [mrS6c, mrS4e, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4e+S2b+R2|katiakin"
+ rules: [mrS6c, mrS4e, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kitiantatik"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5e+S4e+S2e+S1c+R10|kitiantatik"
+ rules: [mrS5e, mrS4e, mrS2e, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kakakinik"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2d+S1d+R8+S6e|kakakinik"
+ rules: [mrS6e, mrS4b, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2d+S1d+R8|kakakinik"
+ rules: [mrS4b, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2d+S1d+R8|kakakinik"
+ rules: [mrS6c, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4b+S1d+R8|kakakinik"
+ rules: [mrS6c, mrS4b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nataaakin"
+ note: >-
+ 3 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6d+S3b+S2b+S1a+R2|nataaakin"
+ rules: [mrS6d, mrS3b, mrS2b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katiinat"
+ note: >-
+ 8 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2c+S1b+R3+S6e|katiinat"
+ rules: [mrS6e, mrS4b, mrS2c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2c+S1b+R3|katiinat"
+ rules: [mrS4b, mrS2c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2c+S1b+R3|katiinat"
+ rules: [mrS6c, mrS2c, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4e+S1b+R3|katiinat"
+ rules: [mrS6c, mrS4e, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4e+S2a+R3|katiinat"
+ rules: [mrS6c, mrS4e, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kaikkakiink"
+ note: >-
+ 3 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S3d+S2d+S1d+R4|kaikkakiink"
+ rules: [mrS6c, mrS3d, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "akatatak"
+ note: >-
+ 18 segmentations; 8 survive the exclude rules.
+ parses:
+ - signature: "S3a+S2d+S1c+R1+S6e|akatatak"
+ rules: [mrS6e, mrS3a, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3a+S2d+S1c+R1|akatatak"
+ rules: [mrS3a, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S2d+S1c+R1|akatatak"
+ rules: [mrS5a, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S4b+S1c+R1|akatatak"
+ rules: [mrS5a, mrS4b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S2b+S1c+R1|akatatak"
+ rules: [mrS5c, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S3a+S1c+R1|akatatak"
+ rules: [mrS5c, mrS3a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4d+S1a+R1|akatatak"
+ rules: [mrS5c, mrS4d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4d+S2b+R1|akatatak"
+ rules: [mrS5c, mrS4d, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katitaink"
+ note: >-
+ 7 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2c+S1c+R4+S6e|katitaink"
+ rules: [mrS6e, mrS4b, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2c+S1c+R4|katitaink"
+ rules: [mrS4b, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2c+S1c+R4|katitaink"
+ rules: [mrS6c, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4e+S1c+R4|katitaink"
+ rules: [mrS6c, mrS4e, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikakinat"
+ note: >-
+ 6 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S4e+S2d+S1d+R3+S6e|tikakinat"
+ rules: [mrS6e, mrS4e, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4e+S2d+S1d+R3|tikakinat"
+ rules: [mrS4e, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S2d+S1d+R3|tikakinat"
+ rules: [mrS5b, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S4b+S1d+R3|tikakinat"
+ rules: [mrS5b, mrS4b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kakiatiink"
+ note: >-
+ 6 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S3e+S2c+R4|kakiatiink"
+ rules: [mrS6c, mrS3e, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "taaikat"
+ note: >-
+ 8 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S3b+S2b+S1b+R5+S6e|taaikat"
+ rules: [mrS6e, mrS3b, mrS2b, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3b+S2b+S1b+R5|taaikat"
+ rules: [mrS3b, mrS2b, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S2b+S1b+R5|taaikat"
+ rules: [mrS6a, mrS2b, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S3a+S1b+R5|taaikat"
+ rules: [mrS6a, mrS3a, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S3a+S2a+R5|taaikat"
+ rules: [mrS6a, mrS3a, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kiatitin"
+ note: >-
+ 8 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S3e+S2c+R6+S6e|kiatitin"
+ rules: [mrS6e, mrS3e, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3e+S2c+R6|kiatitin"
+ rules: [mrS3e, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5e+S3a+S2c+R6|kiatitin"
+ rules: [mrS5e, mrS3a, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5e+S4d+S1b+R6|kiatitin"
+ rules: [mrS5e, mrS4d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5e+S4d+S2a+R6|kiatitin"
+ rules: [mrS5e, mrS4d, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tainanik"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S3b+S2a+S1e+R8+S6e|tainanik"
+ rules: [mrS6e, mrS3b, mrS2a, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3b+S2a+S1e+R8|tainanik"
+ rules: [mrS3b, mrS2a, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S2a+S1e+R8|tainanik"
+ rules: [mrS6a, mrS2a, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4a+S1e+R8|tainanik"
+ rules: [mrS6a, mrS4a, mrS1e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kanatiatin"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S4c+S2c+S1a+R6|kanatiatin"
+ rules: [mrS6c, mrS4c, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katiikikin"
+ note: >-
+ 7 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S4e+S2a+S1d+R2|katiikikin"
+ rules: [mrS6c, mrS4e, mrS2a, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tatiatak"
+ note: >-
+ 9 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "S3b+S2c+S1a+R1+S6e|tatiatak"
+ rules: [mrS6e, mrS3b, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3b+S2c+S1a+R1|tatiatak"
+ rules: [mrS3b, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S2c+S1a+R1|tatiatak"
+ rules: [mrS6a, mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4e+S1a+R1|tatiatak"
+ rules: [mrS6a, mrS4e, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4e+S2b+R1|tatiatak"
+ rules: [mrS6a, mrS4e, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kaniiaant"
+ note: >-
+ 7 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S3c+S2a+S1a+R7|kaniiaant"
+ rules: [mrS6c, mrS3c, mrS2a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikatatin"
+ note: >-
+ 8 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S3c+S2d+S1c+R6+S6e|nikatatin"
+ rules: [mrS6e, mrS3c, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3c+S2d+S1c+R6|nikatatin"
+ rules: [mrS3c, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S2d+S1c+R6|nikatatin"
+ rules: [mrS5d, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4b+S1c+R6|nikatatin"
+ rules: [mrS5d, mrS4b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takiaitaant"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6a+S3e+S2a+S1c+R7|takiaitaant"
+ rules: [mrS6a, mrS3e, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "titatitatin"
+ note: >-
+ 4 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5b+S3b+S2c+S1c+R6|titatitatin"
+ rules: [mrS5b, mrS3b, mrS2c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "niniatik"
+ note: >-
+ 4 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S3c+S1a+R10|niniatik"
+ rules: [mrS5d, mrS3c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S3c+S2b+R10|niniatik"
+ rules: [mrS5d, mrS3c, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kaitakan"
+ note: >-
+ 5 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2a+S1c+R9+S6e|kaitakan"
+ rules: [mrS6e, mrS4b, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2a+S1c+R9|kaitakan"
+ rules: [mrS4b, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S2a+S1c+R9|kaitakan"
+ rules: [mrS6c, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S4a+S1c+R9|kaitakan"
+ rules: [mrS6c, mrS4a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
diff --git a/conformance-stress/edge-cases/bantu-extension-chain/grammar.xml b/conformance-stress/edge-cases/bantu-extension-chain/grammar.xml
new file mode 100644
index 000000000..070144d8a
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-extension-chain/grammar.xml
@@ -0,0 +1,500 @@
+
+
+
+
+ StressBantuExtensionChain
+
+
+ v
+
+
+ Main
+
+ a
+ i
+ k
+ n
+ t
+
+
+
+ Any
+
+
+
+ Main
+
+
+ s1a
+
+
+
+ a
+
+
+ S1a
+
+
+ s1b
+
+
+
+ ik
+
+
+ S1b
+
+
+ s1c
+
+
+
+ ak
+
+
+ S1c
+
+
+ s1d
+
+
+
+ ni
+
+
+ S1d
+
+
+ s1e
+
+
+
+ ki
+
+
+ S1e
+
+
+ s2a
+
+
+
+ i
+
+
+ S2a
+
+
+ s2b
+
+
+
+ an
+
+
+ S2b
+
+
+ s2c
+
+
+
+ ka
+
+
+ S2c
+
+
+ s2d
+
+
+
+ ik
+
+
+ S2d
+
+
+ s2e
+
+
+
+ na
+
+
+ S2e
+
+
+ s3a
+
+
+
+ a
+
+
+ S3a
+
+
+ s3b
+
+
+
+ ka
+
+
+ S3b
+
+
+ s3c
+
+
+
+ in
+
+
+ S3c
+
+
+ s3d
+
+
+
+ ni
+
+
+ S3d
+
+
+ s3e
+
+
+
+ ak
+
+
+ S3e
+
+
+ s4a
+
+
+
+ i
+
+
+ S4a
+
+
+ s4b
+
+
+
+ ki
+
+
+ S4b
+
+
+ s4c
+
+
+
+ an
+
+
+ S4c
+
+
+ s4d
+
+
+
+ at
+
+
+ S4d
+
+
+ s4e
+
+
+
+ na
+
+
+ S4e
+
+
+ s5a
+
+
+
+ a
+
+
+ S5a
+
+
+ s5b
+
+
+
+ ik
+
+
+ S5b
+
+
+ s5c
+
+
+
+ ni
+
+
+ S5c
+
+
+ s5d
+
+
+
+ ka
+
+
+ S5d
+
+
+ s5e
+
+
+
+ an
+
+
+ S5e
+
+
+ s6a
+
+
+
+ i
+
+
+ S6a
+
+
+ s6b
+
+
+
+ ak
+
+
+ S6b
+
+
+ s6c
+
+
+
+ na
+
+
+ S6c
+
+
+ s6d
+
+
+
+ kia
+
+
+ S6d
+
+
+ s6e
+
+
+
+ ta
+
+
+ S6e
+
+
+ s7a
+
+
+
+ a
+
+
+ S7a
+
+
+ s7b
+
+
+
+ in
+
+
+ S7b
+
+
+ s7c
+
+
+
+ ki
+
+
+ S7c
+
+
+ s7d
+
+
+
+ an
+
+
+ S7d
+
+
+ s7e
+
+
+
+ ik
+
+
+ S7e
+
+
+
+
+ verbTemplate
+
+ slot1
+
+
+ slot2
+
+
+ slot3
+
+
+ slot4
+
+
+ slot5
+
+
+ slot6
+
+
+ slot7
+
+
+
+
+
+ tak
+ R1
+
+
+ kin
+ R2
+
+
+ nat
+ R3
+
+
+ tik
+ R4
+
+
+ kat
+ R5
+
+
+ tin
+ R6
+
+
+ kan
+ R7
+
+
+ nik
+ R8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/bantu-extension-chain/words.yaml b/conformance-stress/edge-cases/bantu-extension-chain/words.yaml
new file mode 100644
index 000000000..144abbe5a
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-extension-chain/words.yaml
@@ -0,0 +1,404 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# StressBantuExtensionChain: dense-exclusion stress fixture, generated by gen_dense_exclusions.py. The expected parses
+# come from that script's own enumeration of filler choices, not from the engine, and were confirmed
+# against the engine with Morpher.PruneExcludedCoOccurrence off.
+language: StressBantuExtensionChain
+inspired_by: ["Bantu-style verb extension chain (synthetic; not modeling a real language)"]
+requires: []
+fieldworks_producible: true
+budget_ms: 120000
+words:
+ - word: "tikaknainkaik"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R4+S1c+S2e+S3c+S5d+S7e|tikaknainkaik"
+ rules: [mrS1c, mrS2e, mrS3c, mrS5d, mrS7e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinnianinanak"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R2+S1d+S2b+S3c+S4c+S6b|kinnianinanak"
+ rules: [mrS1d, mrS2b, mrS3c, mrS4c, mrS6b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1d+S2b+S3c+S5e+S6b|kinnianinanak"
+ rules: [mrS1d, mrS2b, mrS3c, mrS5e, mrS6b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikakaaatan"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R4+S1a+S2c+S3a+S4d+S7d|tikakaaatan"
+ rules: [mrS1a, mrS2c, mrS3a, mrS4d, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katnaniiin"
+ note: >-
+ 4 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R5+S2e+S3d+S4a+S7b|katnaniiin"
+ rules: [mrS2e, mrS3d, mrS4a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kanikikati"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R7+S1b+S2d+S4d+S6a|kanikikati"
+ rules: [mrS1b, mrS2d, mrS4d, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinkiikakniki"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R2+S1e+S2d+S3e+S5c+S7c|kinkiikakniki"
+ rules: [mrS1e, mrS2d, mrS3e, mrS5c, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tinaankakian"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R6+S1a+S2b+S3b+S4b+S7d|tinaankakian"
+ rules: [mrS1a, mrS2b, mrS3b, mrS4b, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kankiiakkia"
+ note: >-
+ 3 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R7+S1e+S2a+S3e+S4b+S7a|kankiiakkia"
+ rules: [mrS1e, mrS2a, mrS3e, mrS4b, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R7+S1e+S2a+S3e+S6d|kankiiakkia"
+ rules: [mrS1e, mrS2a, mrS3e, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katainiiin"
+ note: >-
+ 6 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R5+S1a+S2a+S3d+S4a+S7b|katainiiin"
+ rules: [mrS1a, mrS2a, mrS3d, mrS4a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "natkikainikin"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R3+S1e+S2c+S3c+S5b+S7b|natkikainikin"
+ rules: [mrS1e, mrS2c, mrS3c, mrS5b, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takikakkiin"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R1+S1b+S3e+S4b+S7b|takikakkiin"
+ rules: [mrS1b, mrS3e, mrS4b, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R1+S2d+S3e+S4b+S7b|takikakkiin"
+ rules: [mrS2d, mrS3e, mrS4b, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikikankaina"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R4+S1b+S2b+S3b+S4a+S6c|tikikankaina"
+ rules: [mrS1b, mrS2b, mrS3b, mrS4a, mrS6c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikkiikinan"
+ note: >-
+ 3 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "R8+S1e+S2d+S3c+S4c|nikkiikinan"
+ rules: [mrS1e, mrS2d, mrS3c, mrS4c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S1e+S2d+S3c+S5e|nikkiikinan"
+ rules: [mrS1e, mrS2d, mrS3c, mrS5e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S1e+S2d+S3c+S7d|nikkiikinan"
+ rules: [mrS1e, mrS2d, mrS3c, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takkiiatik"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R1+S1e+S2a+S4d+S7e|takkiiatik"
+ rules: [mrS1e, mrS2a, mrS4d, mrS7e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kanikaiin"
+ note: >-
+ 10 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "R7+S1b+S3a+S4a+S7b|kanikaiin"
+ rules: [mrS1b, mrS3a, mrS4a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R7+S2a+S3b+S4a+S7b|kanikaiin"
+ rules: [mrS2a, mrS3b, mrS4a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R7+S2d+S3a+S4a+S7b|kanikaiin"
+ rules: [mrS2d, mrS3a, mrS4a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikikaanta"
+ note: >-
+ 6 segmentations; 6 survive the exclude rules.
+ parses:
+ - signature: "R8+S1b+S3a+S4c+S6e|nikikaanta"
+ rules: [mrS1b, mrS3a, mrS4c, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S1b+S3a+S5e+S6e|nikikaanta"
+ rules: [mrS1b, mrS3a, mrS5e, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S2a+S3b+S4c+S6e|nikikaanta"
+ rules: [mrS2a, mrS3b, mrS4c, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S2a+S3b+S5e+S6e|nikikaanta"
+ rules: [mrS2a, mrS3b, mrS5e, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S2d+S3a+S4c+S6e|nikikaanta"
+ rules: [mrS2d, mrS3a, mrS4c, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S2d+S3a+S5e+S6e|nikikaanta"
+ rules: [mrS2d, mrS3a, mrS5e, mrS6e]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinakiiki"
+ note: >-
+ 11 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R2+S1c+S2a+S4a+S7c|kinakiiki"
+ rules: [mrS1c, mrS2a, mrS4a, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1c+S2a+S5b+S6a|kinakiiki"
+ rules: [mrS1c, mrS2a, mrS5b, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinikkaniki"
+ note: >-
+ 5 segmentations; 5 survive the exclude rules.
+ parses:
+ - signature: "R2+S1b+S2c+S3d+S4b|kinikkaniki"
+ rules: [mrS1b, mrS2c, mrS3d, mrS4b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1b+S2c+S3d+S7c|kinikkaniki"
+ rules: [mrS1b, mrS2c, mrS3d, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1b+S2c+S5c+S7c|kinikkaniki"
+ rules: [mrS1b, mrS2c, mrS5c, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1b+S3b+S5c+S7c|kinikkaniki"
+ rules: [mrS1b, mrS3b, mrS5c, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S2d+S3b+S5c+S7c|kinikkaniki"
+ rules: [mrS2d, mrS3b, mrS5c, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kanniannini"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R7+S1d+S2b+S3d+S5c|kanniannini"
+ rules: [mrS1d, mrS2b, mrS3d, mrS5c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kannianinikia"
+ note: >-
+ 3 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R7+S1d+S2b+S3c+S4a+S6d|kannianinikia"
+ rules: [mrS1d, mrS2b, mrS3c, mrS4a, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinninakakia"
+ note: >-
+ 6 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "R2+S1d+S2e+S3b+S4b+S7a|kinninakakia"
+ rules: [mrS1d, mrS2e, mrS3b, mrS4b, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1d+S2e+S3b+S6d|kinninakakia"
+ rules: [mrS1d, mrS2e, mrS3b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S1d+S2e+S5d+S6d|kinninakakia"
+ rules: [mrS1d, mrS2e, mrS5d, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikakiniankia"
+ note: >-
+ 3 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R4+S1c+S2a+S3d+S4c+S6d|tikakiniankia"
+ rules: [mrS1c, mrS2a, mrS3d, mrS4c, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S1c+S2a+S3d+S5e+S6d|tikakiniankia"
+ rules: [mrS1c, mrS2a, mrS3d, mrS5e, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takiknanikai"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R1+S1b+S2e+S3d+S5d+S6a|takiknanikai"
+ rules: [mrS1b, mrS2e, mrS3d, mrS5d, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nikaiinani"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R8+S1a+S2a+S3c+S4c+S6a|nikaiinani"
+ rules: [mrS1a, mrS2a, mrS3c, mrS4c, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R8+S1a+S2a+S3c+S5e+S6a|nikaiinani"
+ rules: [mrS1a, mrS2a, mrS3c, mrS5e, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tinakikaikan"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R6+S1c+S2a+S3b+S5b+S7d|tinakikaikan"
+ rules: [mrS1c, mrS2a, mrS3b, mrS5b, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R6+S1c+S2d+S3a+S5b+S7d|tinakikaikan"
+ rules: [mrS1c, mrS2d, mrS3a, mrS5b, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tinnainnaa"
+ note: >-
+ 3 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R6+S2e+S3c+S4e+S7a|tinnainnaa"
+ rules: [mrS2e, mrS3c, mrS4e, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikaankia"
+ note: >-
+ 7 segmentations; 6 survive the exclude rules.
+ parses:
+ - signature: "R4+S1a+S2b+S4b+S7a|tikaankia"
+ rules: [mrS1a, mrS2b, mrS4b, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S1a+S2b+S6d|tikaankia"
+ rules: [mrS1a, mrS2b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S1a+S4c+S6d|tikaankia"
+ rules: [mrS1a, mrS4c, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S1a+S5e+S6d|tikaankia"
+ rules: [mrS1a, mrS5e, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S3a+S4c+S6d|tikaankia"
+ rules: [mrS3a, mrS4c, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S3a+S5e+S6d|tikaankia"
+ rules: [mrS3a, mrS5e, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katkiakii"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R5+S1e+S3a+S4b+S6a|katkiakii"
+ rules: [mrS1e, mrS3a, mrS4b, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R5+S1e+S3e+S4a+S6a|katkiakii"
+ rules: [mrS1e, mrS3e, mrS4a, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kinnainanki"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R2+S2e+S3c+S4c+S7c|kinnainanki"
+ rules: [mrS2e, mrS3c, mrS4c, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R2+S2e+S3c+S5e+S7c|kinnainanki"
+ rules: [mrS2e, mrS3c, mrS5e, mrS7c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tinniinikii"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R6+S1d+S2a+S3d+S4b+S6a|tinniinikii"
+ rules: [mrS1d, mrS2a, mrS3d, mrS4b, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takkiakikia"
+ note: >-
+ 3 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R1+S1e+S3a+S4b+S6d|takkiakikia"
+ rules: [mrS1e, mrS3a, mrS4b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R1+S1e+S3e+S4a+S6d|takkiakikia"
+ rules: [mrS1e, mrS3e, mrS4a, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikikniatkia"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R4+S1b+S3d+S4d+S6d|tikikniatkia"
+ rules: [mrS1b, mrS3d, mrS4d, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S2d+S3d+S4d+S6d|tikikniatkia"
+ rules: [mrS2d, mrS3d, mrS4d, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katanaain"
+ note: >-
+ 5 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "R5+S1a+S2e+S3a+S7b|katanaain"
+ rules: [mrS1a, mrS2e, mrS3a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R5+S1a+S2e+S5a+S7b|katanaain"
+ rules: [mrS1a, mrS2e, mrS5a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R5+S2b+S3a+S5a+S7b|katanaain"
+ rules: [mrS2b, mrS3a, mrS5a, mrS7b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "natkinaaa"
+ note: >-
+ 4 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "R3+S1e+S2e+S3a+S5a|natkinaaa"
+ rules: [mrS1e, mrS2e, mrS3a, mrS5a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R3+S1e+S2e+S3a+S7a|natkinaaa"
+ rules: [mrS1e, mrS2e, mrS3a, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R3+S1e+S2e+S5a+S7a|natkinaaa"
+ rules: [mrS1e, mrS2e, mrS5a, mrS7a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tikanakanna"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R4+S2b+S3e+S4c+S6c|tikanakanna"
+ rules: [mrS2b, mrS3e, mrS4c, mrS6c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R4+S2b+S3e+S5e+S6c|tikanakanna"
+ rules: [mrS2b, mrS3e, mrS5e, mrS6c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "takikakkaan"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R1+S1b+S3e+S5d+S7d|takikakkaan"
+ rules: [mrS1b, mrS3e, mrS5d, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R1+S2d+S3e+S5d+S7d|takikakkaan"
+ rules: [mrS2d, mrS3e, mrS5d, mrS7d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katanainkikia"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R5+S1a+S2e+S3c+S4b+S6d|katanainkikia"
+ rules: [mrS1a, mrS2e, mrS3c, mrS4b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "natikikaikkia"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "R3+S1b+S2a+S3b+S5b+S6d|natikikaikkia"
+ rules: [mrS1b, mrS2a, mrS3b, mrS5b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "R3+S1b+S2d+S3a+S5b+S6d|natikikaikkia"
+ rules: [mrS1b, mrS2d, mrS3a, mrS5b, mrS6d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kanikankanina"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R7+S1b+S2b+S3b+S5c+S6c|kanikankanina"
+ rules: [mrS1b, mrS2b, mrS3b, mrS5c, mrS6c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tinkiananai"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "R6+S1e+S2b+S3a+S4e+S6a|tinkiananai"
+ rules: [mrS1e, mrS2b, mrS3a, mrS4e, mrS6a]
+ exercises: ["Morpheme co-occurrence rules"]
diff --git a/conformance-stress/edge-cases/bantu-extension-required-slot/grammar.xml b/conformance-stress/edge-cases/bantu-extension-required-slot/grammar.xml
new file mode 100644
index 000000000..597d5904e
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-extension-required-slot/grammar.xml
@@ -0,0 +1,455 @@
+
+
+
+
+ StressBantuExtensionRequiredSlot
+
+ v
+ n
+
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ k
+ l
+ m
+ n
+ p
+ s
+ t
+ v
+ w
+ y
+ c
+ r
+ h
+ z
+ j
+
+
+
+ Any
+
+
+
+ Main
+
+
+ mrEX1
+
+
+
+ il
+
+
+ EX1
+ EX1
+
+
+ mrEX2
+
+
+
+ an
+
+
+ EX2
+ EX2
+
+
+ mrEX3
+
+
+
+ is
+
+
+ EX3
+ EX3
+
+
+ mrEX4
+
+
+
+ ik
+
+
+ EX4
+ EX4
+
+
+ mrEX5
+
+
+
+ ul
+
+
+ EX5
+ EX5
+
+
+ mrFV1
+
+
+
+ a
+
+
+ FV1
+ FV1
+
+
+ mrFV2
+
+
+
+ e
+
+
+ FV2
+ FV2
+
+
+ mrOM1
+
+
+
+ mu
+
+
+ OM1
+ OM1
+
+
+ mrOM2
+
+
+
+ wa
+
+
+ OM2
+ OM2
+
+
+ mrOM3
+
+
+
+ ki
+
+
+ OM3
+ OM3
+
+
+ mrOM4
+
+
+
+ ku
+
+
+ OM4
+ OM4
+
+
+ mrTB1
+
+
+
+ a
+
+
+ TB1
+ TB1
+
+
+ mrTB2
+
+
+
+ na
+
+
+ TB2
+ TB2
+
+
+ mrTB3
+
+
+
+ li
+
+
+ TB3
+ TB3
+
+
+ mrTB4
+
+
+
+ ta
+
+
+ TB4
+ TB4
+
+
+ mrTB5
+
+
+
+ me
+
+
+ TB5
+ TB5
+
+
+ mrSM1
+
+
+
+ ni
+
+
+ SM1
+ SM1
+
+
+ mrSM2
+
+
+
+ u
+
+
+ SM2
+ SM2
+
+
+ mrSM3
+
+
+
+ a
+
+
+ SM3
+ SM3
+
+
+ mrSM4
+
+
+
+ tu
+
+
+ SM4
+ SM4
+
+
+ mrSM5
+
+
+
+ m
+
+
+ SM5
+ SM5
+
+
+ mrSM6
+
+
+
+ wa
+
+
+ SM6
+ SM6
+
+
+ mrCL1
+
+
+
+ m
+
+
+ CL1
+ CL1
+
+
+ mrCL2
+
+
+
+ wa
+
+
+ CL2
+ CL2
+
+
+ mrCL3
+
+
+
+ ki
+
+
+ CL3
+ CL3
+
+
+ mrCL4
+
+
+
+ vi
+
+
+ CL4
+ CL4
+
+
+
+
+ verbTemplate
+ fv
+ om
+ tam
+ sm
+
+
+ nounTemplate
+ cls
+
+
+
+
+ lim
+ V_LIM
+ lim.V
+
+
+ tum
+ V_TUM
+ tum.V
+
+
+ bon
+ V_BON
+ bon.V
+
+
+ kal
+ V_KAL
+ kal.V
+
+
+ pat
+ V_PAT
+ pat.V
+
+
+ sem
+ V_SEM
+ sem.V
+
+
+ som
+ V_SOM
+ som.V
+
+
+ gul
+ V_GUL
+ gul.V
+
+
+ nen
+ V_NEN
+ nen.V
+
+
+ dik
+ V_DIK
+ dik.V
+
+
+ lek
+ V_LEK
+ lek.V
+
+
+ wan
+ V_WAN
+ wan.V
+
+
+ lim
+ N_LIM
+ lim.N
+
+
+ tum
+ N_TUM
+ tum.N
+
+
+ kal
+ N_KAL
+ kal.N
+
+
+ bon
+ N_BON
+ bon.N
+
+
+ sima
+ N_SIMA
+ sima.N
+
+
+ kiti
+ N_KITI
+ kiti.N
+
+
+ tuma
+ N_TUMA
+ tuma.N
+
+
+ taka
+ N_TAKA
+ taka.N
+
+
+ mtu
+ N_MTU
+ mtu.N
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/bantu-extension-required-slot/words.yaml b/conformance-stress/edge-cases/bantu-extension-required-slot/words.yaml
new file mode 100644
index 000000000..4554db1f2
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-extension-required-slot/words.yaml
@@ -0,0 +1,462 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# HAND DERIVATION (see grammar.xml). Five FS-free verbal extension suffixes apply in any order in the stratum; the verb template then needs a required TAM prefix (5 fillers) with optional subject, object and final-vowel slots; the noun template needs a required class prefix. Verb and noun roots share shapes, so extension-laden nominal forms spawn verb candidates that apply extensions and then die at the required TAM slot.
+# Parses for each word are every (root, rule choice) whose surface equals the word, enumerated by an independent script over
+# the rule tables, then confirmed against the engine. Signature: morpheme IDs in surface order, then "|" and the surface.
+language: StressBantuExtensionRequiredSlot
+inspired_by: ["Bantu verb with stratum-level extension chain and a required TAM slot"]
+sources:
+ - "synthetic stress fixture (not a specific language)"
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: mtumilan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_TUM+EX1+EX2|mtumilan"
+ rules: [mrEX1, mrEX2, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vikitianil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL4+N_KITI+EX2+EX1|vikitianil"
+ rules: [mrEX2, mrEX1, mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kibonisik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_BON+EX3+EX4|kibonisik"
+ rules: [mrEX3, mrEX4, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kisimaisan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_SIMA+EX3+EX2|kisimaisan"
+ rules: [mrEX3, mrEX2, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vimtuulik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL4+N_MTU+EX5+EX4|vimtuulik"
+ rules: [mrEX5, mrEX4, mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kitakaikan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_TAKA+EX4+EX2|kitakaikan"
+ rules: [mrEX4, mrEX2, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mlimikan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_LIM+EX4+EX2|mlimikan"
+ rules: [mrEX4, mrEX2, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kibonulil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_BON+EX5+EX1|kibonulil"
+ rules: [mrEX5, mrEX1, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kikalilis
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_KAL+EX1+EX3|kikalilis"
+ rules: [mrEX1, mrEX3, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wamtuil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL2+N_MTU+EX1|wamtuil"
+ rules: [mrEX1, mrCL2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wakalikil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL2+N_KAL+EX4+EX1|wakalikil"
+ rules: [mrEX4, mrEX1, mrCL2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: walimikan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL2+N_LIM+EX4+EX2|walimikan"
+ rules: [mrEX4, mrEX2, mrCL2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mbonilan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_BON+EX1+EX2|mbonilan"
+ rules: [mrEX1, mrEX2, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wasimaanul
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL2+N_SIMA+EX2+EX5|wasimaanul"
+ rules: [mrEX2, mrEX5, mrCL2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mtumilis
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_TUM+EX1+EX3|mtumilis"
+ rules: [mrEX1, mrEX3, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mkitiilan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_KITI+EX1+EX2|mkitiilan"
+ rules: [mrEX1, mrEX2, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wakitiis
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL2+N_KITI+EX3|wakitiis"
+ rules: [mrEX3, mrCL2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kisimaikil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_SIMA+EX4+EX1|kisimaikil"
+ rules: [mrEX4, mrEX1, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mmtuik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_MTU+EX4|mmtuik"
+ rules: [mrEX4, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vitumilul
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL4+N_TUM+EX1+EX5|vitumilul"
+ rules: [mrEX1, mrEX5, mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mlimanik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL1+N_LIM+EX2+EX4|mlimanik"
+ rules: [mrEX2, mrEX4, mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kitakaikul
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_TAKA+EX4+EX5|kitakaikul"
+ rules: [mrEX4, mrEX5, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kibonilan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_BON+EX1+EX2|kibonilan"
+ rules: [mrEX1, mrEX2, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vitumaulan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL4+N_TUMA+EX5+EX2|vitumaulan"
+ rules: [mrEX5, mrEX2, mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kimtuulil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "CL3+N_MTU+EX5+EX1|kimtuulil"
+ rules: [mrEX5, mrEX1, mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nimemubonulisane
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM1+TB5+OM1+V_BON+EX5+EX3+EX2+FV2|nimemubonulisane"
+ rules: [mrEX5, mrEX3, mrEX2, mrFV2, mrOM1, mrTB5, mrSM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mlisemikilane
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM5+TB3+V_SEM+EX4+EX1+EX2+FV2|mlisemikilane"
+ rules: [mrEX4, mrEX1, mrEX2, mrFV2, mrTB3, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wanalimilulana
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM6+TB2+V_LIM+EX1+EX5+EX2+FV1|wanalimilulana"
+ rules: [mrEX1, mrEX5, mrEX2, mrFV1, mrTB2, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nitawasemikila
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM1+TB4+OM2+V_SEM+EX4+EX1+FV1|nitawasemikila"
+ rules: [mrEX4, mrEX1, mrFV1, mrOM2, mrTB4, mrSM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tulikukalanilis
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM4+TB3+OM4+V_KAL+EX2+EX1+EX3|tulikukalanilis"
+ rules: [mrEX2, mrEX1, mrEX3, mrOM4, mrTB3, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nitakilimanikil
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM1+TB4+OM3+V_LIM+EX2+EX4+EX1|nitakilimanikil"
+ rules: [mrEX2, mrEX4, mrEX1, mrOM3, mrTB4, mrSM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: takulekanisile
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "TB4+OM4+V_LEK+EX2+EX3+EX1+FV2|takulekanisile"
+ rules: [mrEX2, mrEX3, mrEX1, mrFV2, mrOM4, mrTB4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tumekiwanikilis
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM4+TB5+OM3+V_WAN+EX4+EX1+EX3|tumekiwanikilis"
+ rules: [mrEX4, mrEX1, mrEX3, mrOM3, mrTB5, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tutawawanilisula
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM4+TB4+OM2+V_WAN+EX1+EX3+EX5+FV1|tutawawanilisula"
+ rules: [mrEX1, mrEX3, mrEX5, mrFV1, mrOM2, mrTB4, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: memubonikise
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "TB5+OM1+V_BON+EX4+EX3+FV2|memubonikise"
+ rules: [mrEX4, mrEX3, mrFV2, mrOM1, mrTB5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: waliwasomisikile
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM6+TB3+OM2+V_SOM+EX3+EX4+EX1+FV2|waliwasomisikile"
+ rules: [mrEX3, mrEX4, mrEX1, mrFV2, mrOM2, mrTB3, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: alimisikile
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "TB1+V_LIM+EX3+EX4+EX1+FV2|alimisikile"
+ rules: [mrEX3, mrEX4, mrEX1, mrFV2, mrTB1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: umewasomisan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM2+TB5+OM2+V_SOM+EX3+EX2|umewasomisan"
+ rules: [mrEX3, mrEX2, mrOM2, mrTB5, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: akugululisile
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "TB1+OM4+V_GUL+EX5+EX3+EX1+FV2|akugululisile"
+ rules: [mrEX5, mrEX3, mrEX1, mrFV2, mrOM4, mrTB1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: liwasemisilule
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "TB3+OM2+V_SEM+EX3+EX1+EX5+FV2|liwasemisilule"
+ rules: [mrEX3, mrEX1, mrEX5, mrFV2, mrOM2, mrTB3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: makisemisilike
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM5+TB1+OM3+V_SEM+EX3+EX1+EX4+FV2|makisemisilike"
+ rules: [mrEX3, mrEX1, mrEX4, mrFV2, mrOM3, mrTB1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mnakibonikana
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM5+TB2+OM3+V_BON+EX4+EX2+FV1|mnakibonikana"
+ rules: [mrEX4, mrEX2, mrFV1, mrOM3, mrTB2, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: ulikikalanisika
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM2+TB3+OM3+V_KAL+EX2+EX3+EX4+FV1|ulikikalanisika"
+ rules: [mrEX2, mrEX3, mrEX4, mrFV1, mrOM3, mrTB3, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: atakibonikulila
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM3+TB4+OM3+V_BON+EX4+EX5+EX1+FV1|atakibonikulila"
+ rules: [mrEX4, mrEX5, mrEX1, mrFV1, mrOM3, mrTB4, mrSM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wamemulimanulika
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM6+TB5+OM1+V_LIM+EX2+EX5+EX4+FV1|wamemulimanulika"
+ rules: [mrEX2, mrEX5, mrEX4, mrFV1, mrOM1, mrTB5, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wanakupatulilisa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM6+TB2+OM4+V_PAT+EX5+EX1+EX3+FV1|wanakupatulilisa"
+ rules: [mrEX5, mrEX1, mrEX3, mrFV1, mrOM4, mrTB2, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tumekisemisula
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM4+TB5+OM3+V_SEM+EX3+EX5+FV1|tumekisemisula"
+ rules: [mrEX3, mrEX5, mrFV1, mrOM3, mrTB5, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: alimunenisik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM3+TB3+OM1+V_NEN+EX3+EX4|alimunenisik"
+ rules: [mrEX3, mrEX4, mrOM1, mrTB3, mrSM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: uliwatumulika
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM2+TB3+OM2+V_TUM+EX5+EX4+FV1|uliwatumulika"
+ rules: [mrEX5, mrEX4, mrFV1, mrOM2, mrTB3, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: unadikanisik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "SM2+TB2+V_DIK+EX2+EX3+EX4|unadikanisik"
+ rules: [mrEX2, mrEX3, mrEX4, mrTB2, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
diff --git a/conformance-stress/edge-cases/bantu-tam-fusion/grammar.xml b/conformance-stress/edge-cases/bantu-tam-fusion/grammar.xml
new file mode 100644
index 000000000..98eac8bb0
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-fusion/grammar.xml
@@ -0,0 +1,321 @@
+
+
+
+
+ bantu-tam-fusion
+ v
+
+ syl+-
+ cons+-
+ son+-
+ nas+-
+ voice+-
+ cont+-
+ high+-
+ low+-
+ back+-
+ round+-
+ lat+-
+ placelabialalveolarvelarglottalnone
+
+
+ Main
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ h
+ k
+ l
+ m
+ n
+ p
+ r
+ s
+ t
+ w
+ y
+
+ Any
+ Main
+
+obj_mumumuobj_muOBJ.mu
+obj_kukukuobj_kuOBJ.ku
+obj_wawawaobj_waOBJ.wa
+obj_bababaobj_baOBJ.ba
+obj_mimimiobj_miOBJ.mi
+obj_tititiobj_tiOBJ.ti
+obj_nininiobj_niOBJ.ni
+obj_riririobj_riOBJ.ri
+obj_sisisiobj_siOBJ.si
+obj_dididiobj_diOBJ.di
+obj_gagagaobj_gaOBJ.ga
+obj_hahahaobj_haOBJ.ha
+obj_kakakaobj_kaOBJ.ka
+obj_lalalaobj_laOBJ.la
+obj_mamamaobj_maOBJ.ma
+obj_nananaobj_naOBJ.na
+obj_papapaobj_paOBJ.pa
+obj_rararaobj_raOBJ.ra
+obj_sasasaobj_saOBJ.sa
+obj_tatataobj_taOBJ.ta
+tam_iyeiyetam_iyeTAM.iye
+ext_0_isisext_0_isEXT.is
+subj_0_nununusubj_0_nuSUBJ.nu
+subj_0_bububusubj_0_buSUBJ.bu
+subj_0_dududusubj_0_duSUBJ.du
+subj_0_gogogosubj_0_goSUBJ.go
+subj_0_hohohosubj_0_hoSUBJ.ho
+subj_0_kokokosubj_0_koSUBJ.ko
+subj_0_lololosubj_0_loSUBJ.lo
+subj_0_momomosubj_0_moSUBJ.mo
+subj_0_nononosubj_0_noSUBJ.no
+subj_0_popoposubj_0_poSUBJ.po
+subj_0_rororosubj_0_roSUBJ.ro
+subj_0_sosososubj_0_soSUBJ.so
+subj_0_tototosubj_0_toSUBJ.to
+subj_0_wowowosubj_0_woSUBJ.wo
+subj_0_yoyoyosubj_0_yoSUBJ.yo
+fv_0afv_0FV
+tam_ileiletam_ileTAM.ile
+ext_1_ililext_1_ilEXT.il
+subj_1_nununusubj_1_nuSUBJ.nu
+subj_1_bububusubj_1_buSUBJ.bu
+subj_1_dududusubj_1_duSUBJ.du
+subj_1_gogogosubj_1_goSUBJ.go
+subj_1_hohohosubj_1_hoSUBJ.ho
+subj_1_kokokosubj_1_koSUBJ.ko
+subj_1_lololosubj_1_loSUBJ.lo
+subj_1_momomosubj_1_moSUBJ.mo
+subj_1_nononosubj_1_noSUBJ.no
+subj_1_popoposubj_1_poSUBJ.po
+subj_1_rororosubj_1_roSUBJ.ro
+subj_1_sosososubj_1_soSUBJ.so
+subj_1_tototosubj_1_toSUBJ.to
+subj_1_wowowosubj_1_woSUBJ.wo
+subj_1_yoyoyosubj_1_yoSUBJ.yo
+fv_1afv_1FV
+pl_1nipl_1PL
+tam_anaanatam_anaTAM.ana
+ext_2_ananext_2_anEXT.an
+subj_2_nununusubj_2_nuSUBJ.nu
+subj_2_bububusubj_2_buSUBJ.bu
+subj_2_dududusubj_2_duSUBJ.du
+subj_2_gogogosubj_2_goSUBJ.go
+subj_2_hohohosubj_2_hoSUBJ.ho
+subj_2_kokokosubj_2_koSUBJ.ko
+subj_2_lololosubj_2_loSUBJ.lo
+subj_2_momomosubj_2_moSUBJ.mo
+subj_2_nononosubj_2_noSUBJ.no
+subj_2_popoposubj_2_poSUBJ.po
+subj_2_rororosubj_2_roSUBJ.ro
+subj_2_sosososubj_2_soSUBJ.so
+subj_2_tototosubj_2_toSUBJ.to
+subj_2_wowowosubj_2_woSUBJ.wo
+subj_2_yoyoyosubj_2_yoSUBJ.yo
+fv_2afv_2FV
+tam_ekaekatam_ekaTAM.eka
+ext_3_ikikext_3_ikEXT.ik
+subj_3_nununusubj_3_nuSUBJ.nu
+subj_3_bububusubj_3_buSUBJ.bu
+subj_3_dududusubj_3_duSUBJ.du
+subj_3_gogogosubj_3_goSUBJ.go
+subj_3_hohohosubj_3_hoSUBJ.ho
+subj_3_kokokosubj_3_koSUBJ.ko
+subj_3_lololosubj_3_loSUBJ.lo
+subj_3_momomosubj_3_moSUBJ.mo
+subj_3_nononosubj_3_noSUBJ.no
+subj_3_popoposubj_3_poSUBJ.po
+subj_3_rororosubj_3_roSUBJ.ro
+subj_3_sosososubj_3_soSUBJ.so
+subj_3_tototosubj_3_toSUBJ.to
+subj_3_wowowosubj_3_woSUBJ.wo
+subj_3_yoyoyosubj_3_yoSUBJ.yo
+fv_3afv_3FV
+pl_3nipl_3PL
+tam_okaokatam_okaTAM.oka
+ext_4_umumext_4_umEXT.um
+subj_4_nununusubj_4_nuSUBJ.nu
+subj_4_bububusubj_4_buSUBJ.bu
+subj_4_dududusubj_4_duSUBJ.du
+subj_4_gogogosubj_4_goSUBJ.go
+subj_4_hohohosubj_4_hoSUBJ.ho
+subj_4_kokokosubj_4_koSUBJ.ko
+subj_4_lololosubj_4_loSUBJ.lo
+subj_4_momomosubj_4_moSUBJ.mo
+subj_4_nononosubj_4_noSUBJ.no
+subj_4_popoposubj_4_poSUBJ.po
+subj_4_rororosubj_4_roSUBJ.ro
+subj_4_sosososubj_4_soSUBJ.so
+subj_4_tototosubj_4_toSUBJ.to
+subj_4_wowowosubj_4_woSUBJ.wo
+subj_4_yoyoyosubj_4_yoSUBJ.yo
+fv_4afv_4FV
+tam_kaakaatam_kaaTAM.kaa
+ext_5_ekekext_5_ekEXT.ek
+subj_5_nununusubj_5_nuSUBJ.nu
+subj_5_bububusubj_5_buSUBJ.bu
+subj_5_dududusubj_5_duSUBJ.du
+subj_5_gogogosubj_5_goSUBJ.go
+subj_5_hohohosubj_5_hoSUBJ.ho
+subj_5_kokokosubj_5_koSUBJ.ko
+subj_5_lololosubj_5_loSUBJ.lo
+subj_5_momomosubj_5_moSUBJ.mo
+subj_5_nononosubj_5_noSUBJ.no
+subj_5_popoposubj_5_poSUBJ.po
+subj_5_rororosubj_5_roSUBJ.ro
+subj_5_sosososubj_5_soSUBJ.so
+subj_5_tototosubj_5_toSUBJ.to
+subj_5_wowowosubj_5_woSUBJ.wo
+subj_5_yoyoyosubj_5_yoSUBJ.yo
+fv_5afv_5FV
+pl_5nipl_5PL
+tam_jeeyeetam_jeeTAM.jee
+ext_6_ololext_6_olEXT.ol
+subj_6_nununusubj_6_nuSUBJ.nu
+subj_6_bububusubj_6_buSUBJ.bu
+subj_6_dududusubj_6_duSUBJ.du
+subj_6_gogogosubj_6_goSUBJ.go
+subj_6_hohohosubj_6_hoSUBJ.ho
+subj_6_kokokosubj_6_koSUBJ.ko
+subj_6_lololosubj_6_loSUBJ.lo
+subj_6_momomosubj_6_moSUBJ.mo
+subj_6_nononosubj_6_noSUBJ.no
+subj_6_popoposubj_6_poSUBJ.po
+subj_6_rororosubj_6_roSUBJ.ro
+subj_6_sosososubj_6_soSUBJ.so
+subj_6_tototosubj_6_toSUBJ.to
+subj_6_wowowosubj_6_woSUBJ.wo
+subj_6_yoyoyosubj_6_yoSUBJ.yo
+fv_6afv_6FV
+tam_arearetam_areTAM.are
+ext_7_ututext_7_utEXT.ut
+subj_7_nununusubj_7_nuSUBJ.nu
+subj_7_bububusubj_7_buSUBJ.bu
+subj_7_dududusubj_7_duSUBJ.du
+subj_7_gogogosubj_7_goSUBJ.go
+subj_7_hohohosubj_7_hoSUBJ.ho
+subj_7_kokokosubj_7_koSUBJ.ko
+subj_7_lololosubj_7_loSUBJ.lo
+subj_7_momomosubj_7_moSUBJ.mo
+subj_7_nononosubj_7_noSUBJ.no
+subj_7_popoposubj_7_poSUBJ.po
+subj_7_rororosubj_7_roSUBJ.ro
+subj_7_sosososubj_7_soSUBJ.so
+subj_7_tototosubj_7_toSUBJ.to
+subj_7_wowowosubj_7_woSUBJ.wo
+subj_7_yoyoyosubj_7_yoSUBJ.yo
+fv_7afv_7FV
+pl_7nipl_7PL
+tam_meemeetam_meeTAM.mee
+ext_8_adadext_8_adEXT.ad
+subj_8_nununusubj_8_nuSUBJ.nu
+subj_8_bububusubj_8_buSUBJ.bu
+subj_8_dududusubj_8_duSUBJ.du
+subj_8_gogogosubj_8_goSUBJ.go
+subj_8_hohohosubj_8_hoSUBJ.ho
+subj_8_kokokosubj_8_koSUBJ.ko
+subj_8_lololosubj_8_loSUBJ.lo
+subj_8_momomosubj_8_moSUBJ.mo
+subj_8_nononosubj_8_noSUBJ.no
+subj_8_popoposubj_8_poSUBJ.po
+subj_8_rororosubj_8_roSUBJ.ro
+subj_8_sosososubj_8_soSUBJ.so
+subj_8_tototosubj_8_toSUBJ.to
+subj_8_wowowosubj_8_woSUBJ.wo
+subj_8_yoyoyosubj_8_yoSUBJ.yo
+fv_8afv_8FV
+tam_tuutuutam_tuuTAM.tuu
+ext_9_ememext_9_emEXT.em
+subj_9_nununusubj_9_nuSUBJ.nu
+subj_9_bububusubj_9_buSUBJ.bu
+subj_9_dududusubj_9_duSUBJ.du
+subj_9_gogogosubj_9_goSUBJ.go
+subj_9_hohohosubj_9_hoSUBJ.ho
+subj_9_kokokosubj_9_koSUBJ.ko
+subj_9_lololosubj_9_loSUBJ.lo
+subj_9_momomosubj_9_moSUBJ.mo
+subj_9_nononosubj_9_noSUBJ.no
+subj_9_popoposubj_9_poSUBJ.po
+subj_9_rororosubj_9_roSUBJ.ro
+subj_9_sosososubj_9_soSUBJ.so
+subj_9_tototosubj_9_toSUBJ.to
+subj_9_wowowosubj_9_woSUBJ.wo
+subj_9_yoyoyosubj_9_yoSUBJ.yo
+fv_9afv_9FV
+pl_9nipl_9PL
+tam_googootam_gooTAM.goo
+ext_10_ipipext_10_ipEXT.ip
+subj_10_nununusubj_10_nuSUBJ.nu
+subj_10_bububusubj_10_buSUBJ.bu
+subj_10_dududusubj_10_duSUBJ.du
+subj_10_gogogosubj_10_goSUBJ.go
+subj_10_hohohosubj_10_hoSUBJ.ho
+subj_10_kokokosubj_10_koSUBJ.ko
+subj_10_lololosubj_10_loSUBJ.lo
+subj_10_momomosubj_10_moSUBJ.mo
+subj_10_nononosubj_10_noSUBJ.no
+subj_10_popoposubj_10_poSUBJ.po
+subj_10_rororosubj_10_roSUBJ.ro
+subj_10_sosososubj_10_soSUBJ.so
+subj_10_tototosubj_10_toSUBJ.to
+subj_10_wowowosubj_10_woSUBJ.wo
+subj_10_yoyoyosubj_10_yoSUBJ.yo
+fv_10afv_10FV
+tam_kaa-iyekaaiyetam_kaa-iyeTAM.kaa-iye
+ext_11_obobext_11_obEXT.ob
+subj_11_nununusubj_11_nuSUBJ.nu
+subj_11_bububusubj_11_buSUBJ.bu
+subj_11_dududusubj_11_duSUBJ.du
+subj_11_gogogosubj_11_goSUBJ.go
+subj_11_hohohosubj_11_hoSUBJ.ho
+subj_11_kokokosubj_11_koSUBJ.ko
+subj_11_lololosubj_11_loSUBJ.lo
+subj_11_momomosubj_11_moSUBJ.mo
+subj_11_nononosubj_11_noSUBJ.no
+subj_11_popoposubj_11_poSUBJ.po
+subj_11_rororosubj_11_roSUBJ.ro
+subj_11_sosososubj_11_soSUBJ.so
+subj_11_tototosubj_11_toSUBJ.to
+subj_11_wowowosubj_11_woSUBJ.wo
+subj_11_yoyoyosubj_11_yoSUBJ.yo
+fv_11afv_11FV
+pl_11nipl_11PL
+
+t0_iyetenseobjectextsubjectfvt1_iletenseobjectextsubjectfvplt2_anatenseobjectextsubjectfvt3_ekatenseobjectextsubjectfvplt4_okatenseobjectextsubjectfvt5_kaatenseobjectextsubjectfvplt6_jeetenseobjectextsubjectfvt7_aretenseobjectextsubjectfvplt8_meetenseobjectextsubjectfvt9_tuutenseobjectextsubjectfvplt10_gootenseobjectextsubjectfvt11_kaa-iyetenseobjectextsubjectfvpl
+
+balbalbal
+temtemtem
+kumkumkum
+dipdipdip
+gorgorgor
+hanhanhan
+keskeskes
+lublublub
+mermermer
+nugnugnug
+patpatpat
+remremrem
+solsolsol
+tagtagtag
+wabwabwab
+belbelbel
+dagdagdag
+gumgumgum
+hithithit
+korkorkor
+lenlenlen
+mosmosmos
+nemnemnem
+pirpirpir
+rotrotrot
+sabsabsab
+tultultul
+wenwenwen
+bisbisbis
+doldoldol
+
diff --git a/conformance-stress/edge-cases/bantu-tam-fusion/words.yaml b/conformance-stress/edge-cases/bantu-tam-fusion/words.yaml
new file mode 100644
index 000000000..64b4255ee
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-fusion/words.yaml
@@ -0,0 +1,252 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressBantuTamFusion
+sources: []
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 60000
+words:
+ - word: wnonemileila
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: rokaatemani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_5_ro+tam_kaa+tem+fv_5+pl_5|rokaatemani"
+ rules: [fv_5, pl_5, subj_5_ro, tam_kaa]
+ - word: dudagileilni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_1_du+dag+tam_ile+ext_1_il+pl_1|dudagileilni"
+ rules: [ext_1_il, pl_1, subj_1_du, tam_ile]
+ - word: dbubbabisana
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: yogorileani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_1_yo+gor+tam_ile+fv_1+pl_1|yogorileani"
+ rules: [fv_1, pl_1, subj_1_yo, tam_ile]
+ - word: wokesana
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_2_wo+kes+tam_ana|wokesana"
+ rules: [subj_2_wo, tam_ana]
+ - word: kgogyayeedagola
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: holayeekum
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_6_ho+obj_la+tam_jee+kum|holayeekum"
+ rules: [obj_la, subj_6_ho, tam_jee]
+ - word: hopatanaana
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_2_ho+pat+tam_ana+ext_2_an+fv_2|hopatanaana"
+ rules: [ext_2_an, fv_2, subj_2_ho, tam_ana]
+ - word: tkokaawabani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: kosiarewabutani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_7_ko+obj_si+tam_are+wab+ext_7_ut+fv_7+pl_7|kosiarewabutani"
+ rules: [ext_7_ut, fv_7, obj_si, pl_7, subj_7_ko, tam_are]
+ - word: honanugileil
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_1_ho+obj_na+nug+tam_ile+ext_1_il|honanugileil"
+ rules: [ext_1_il, obj_na, subj_1_ho, tam_ile]
+ - word: nrorotiye
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: bubabelileni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_1_bu+obj_ba+bel+tam_ile+pl_1|bubabelileni"
+ rules: [obj_ba, pl_1, subj_1_bu, tam_ile]
+ - word: dupiriyeis
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_0_du+pir+tam_iye+ext_0_is|dupiriyeis"
+ rules: [ext_0_is, subj_0_du, tam_iye]
+ - word: hkokkakaapatekni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: logumiyeis
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_0_lo+gum+tam_iye+ext_0_is|logumiyeis"
+ rules: [ext_0_is, subj_0_lo, tam_iye]
+ - word: dudipirileani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_1_du+obj_di+pir+tam_ile+fv_1+pl_1|dudipirileani"
+ rules: [fv_1, obj_di, pl_1, subj_1_du, tam_ile]
+ - word: mdodagileilani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: rokesiye
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_0_ro+kes+tam_iye|rokesiye"
+ rules: [subj_0_ro, tam_iye]
+ - word: posayeetemola
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_6_po+obj_sa+tam_jee+tem+ext_6_ol+fv_6|posayeetemola"
+ rules: [ext_6_ol, fv_6, obj_sa, subj_6_po, tam_jee]
+ - word: kkokaatemekani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: pokaakumni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_5_po+tam_kaa+kum+pl_5|pokaakumni"
+ rules: [pl_5, subj_5_po, tam_kaa]
+ - word: somukaalub
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_5_so+obj_mu+tam_kaa+lub|somukaalub"
+ rules: [obj_mu, subj_5_so, tam_kaa]
+ - word: rtotgigoonema
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: womeebelada
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_8_wo+tam_mee+bel+ext_8_ad+fv_8|womeebelada"
+ rules: [ext_8_ad, fv_8, subj_8_wo, tam_mee]
+ - word: gomikaabeliyea
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_11_go+obj_mi+tam_kaa-iye+bel+fv_11|gomikaabeliyea"
+ rules: [fv_11, obj_mi, subj_11_go, tam_kaa-iye]
+ - word: mkokkakaaweniyeni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: yokaamosiye
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_11_yo+tam_kaa-iye+mos|yokaamosiye"
+ rules: [subj_11_yo, tam_kaa-iye]
+ - word: wobisokaa
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_4_wo+bis+tam_oka+fv_4|wobisokaa"
+ rules: [fv_4, subj_4_wo, tam_oka]
+ - word: tmomoseka
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: tomeenug
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_8_to+tam_mee+nug|tomeenug"
+ rules: [subj_8_to, tam_mee]
+ - word: sokatuudolemani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_9_so+obj_ka+tam_tuu+dol+ext_9_em+fv_9+pl_9|sokatuudolemani"
+ rules: [ext_9_em, fv_9, obj_ka, pl_9, subj_9_so, tam_tuu]
+ - word: hgogmameedaga
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: rotuupatem
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_9_ro+tam_tuu+pat+ext_9_em|rotuupatem"
+ rules: [ext_9_em, subj_9_ro, tam_tuu]
+ - word: romeewenad
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_8_ro+tam_mee+wen+ext_8_ad|romeewenad"
+ rules: [ext_8_ad, subj_8_ro, tam_mee]
+ - word: ntutuulenani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: tomameerota
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_8_to+obj_ma+tam_mee+rot+fv_8|tomameerota"
+ rules: [fv_8, obj_ma, subj_8_to, tam_mee]
+ - word: wokaabeliyea
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_11_wo+tam_kaa-iye+bel+fv_11|wokaabeliyea"
+ rules: [fv_11, subj_11_wo, tam_kaa-iye]
+ - word: gwowtatuubala
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: mowenekani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_3_mo+wen+tam_eka+pl_3|mowenekani"
+ rules: [pl_3, subj_3_mo, tam_eka]
+ - word: dutuulubani
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_9_du+tam_tuu+lub+fv_9+pl_9|dutuulubani"
+ rules: [fv_9, pl_9, subj_9_du, tam_tuu]
+ - word: tpopgagookor
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: gokaakoriyeni
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_11_go+tam_kaa-iye+kor+pl_11|gokaakoriyeni"
+ rules: [pl_11, subj_11_go, tam_kaa-iye]
+ - word: womugoogor
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_10_wo+obj_mu+tam_goo+gor|womugoogor"
+ rules: [obj_mu, subj_10_wo, tam_goo]
+ - word: ssostituurem
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: kotuubala
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_9_ko+tam_tuu+bal+fv_9|kotuubala"
+ rules: [fv_9, subj_9_ko, tam_tuu]
+ - word: ronimeedolada
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ parses:
+ - signature: "subj_8_ro+obj_ni+tam_mee+dol+ext_8_ad+fv_8|ronimeedolada"
+ rules: [ext_8_ad, fv_8, obj_ni, subj_8_ro, tam_mee]
+ - word: woarebam
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: arehit
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: rogipiye
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: yeehit
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: dugipiye
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: remile
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: nobameka
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: patoka
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: butuugip
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: goonem
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: dutuubam
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
+ - word: tuurot
+ note: "Bantu vowel-fusion slot-template stress: 60 words over 12 synthetic templates whose object and subject rules each have a plain and a vowel-fusion allomorph; expected parses are the master engine's, 28 words have no parse."
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/bantu-tam-templates-shared/grammar.xml b/conformance-stress/edge-cases/bantu-tam-templates-shared/grammar.xml
new file mode 100644
index 000000000..8d480e395
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-templates-shared/grammar.xml
@@ -0,0 +1,236 @@
+
+
+
+
+ bantu-tam-templates
+ v
+
+ syl+-
+ cons+-
+ son+-
+ nas+-
+ voice+-
+ cont+-
+ high+-
+ low+-
+ back+-
+ round+-
+ lat+-
+ placelabialalveolarvelarglottalnone
+
+
+ Main
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ h
+ k
+ l
+ m
+ n
+ p
+ r
+ s
+ t
+ w
+ y
+
+ Any
+ Main
+
+obj_mumuobj_muOBJ.mu
+obj_kukuobj_kuOBJ.ku
+obj_wawaobj_waOBJ.wa
+obj_babaobj_baOBJ.ba
+obj_mimiobj_miOBJ.mi
+obj_titiobj_tiOBJ.ti
+obj_niniobj_niOBJ.ni
+obj_ririobj_riOBJ.ri
+obj_sisiobj_siOBJ.si
+obj_didiobj_diOBJ.di
+obj_gagaobj_gaOBJ.ga
+obj_hahaobj_haOBJ.ha
+obj_kakaobj_kaOBJ.ka
+obj_lalaobj_laOBJ.la
+obj_mamaobj_maOBJ.ma
+obj_nanaobj_naOBJ.na
+obj_papaobj_paOBJ.pa
+obj_raraobj_raOBJ.ra
+obj_sasaobj_saOBJ.sa
+obj_tataobj_taOBJ.ta
+tam_iyeiyetam_iyeTAM.iye
+ext_0_isisext_0_isEXT.is
+subj_0_nunusubj_0_nuSUBJ.nu
+subj_0_bubusubj_0_buSUBJ.bu
+subj_0_dudusubj_0_duSUBJ.du
+subj_0_gogosubj_0_goSUBJ.go
+subj_0_hohosubj_0_hoSUBJ.ho
+subj_0_kokosubj_0_koSUBJ.ko
+subj_0_lolosubj_0_loSUBJ.lo
+subj_0_momosubj_0_moSUBJ.mo
+subj_0_nonosubj_0_noSUBJ.no
+subj_0_poposubj_0_poSUBJ.po
+subj_0_rorosubj_0_roSUBJ.ro
+subj_0_sososubj_0_soSUBJ.so
+subj_0_totosubj_0_toSUBJ.to
+subj_0_wowosubj_0_woSUBJ.wo
+subj_0_yoyosubj_0_yoSUBJ.yo
+fv_0afv_0FV
+tam_ileiletam_ileTAM.ile
+ext_1_ililext_1_ilEXT.il
+subj_sh_nunusubj_sh_nuSUBJ.nu
+subj_sh_bubusubj_sh_buSUBJ.bu
+subj_sh_dudusubj_sh_duSUBJ.du
+subj_sh_gogosubj_sh_goSUBJ.go
+subj_sh_hohosubj_sh_hoSUBJ.ho
+subj_sh_kokosubj_sh_koSUBJ.ko
+subj_sh_lolosubj_sh_loSUBJ.lo
+subj_sh_momosubj_sh_moSUBJ.mo
+subj_sh_nonosubj_sh_noSUBJ.no
+subj_sh_poposubj_sh_poSUBJ.po
+subj_sh_rorosubj_sh_roSUBJ.ro
+subj_sh_sososubj_sh_soSUBJ.so
+subj_sh_totosubj_sh_toSUBJ.to
+subj_sh_wowosubj_sh_woSUBJ.wo
+subj_sh_yoyosubj_sh_yoSUBJ.yo
+fv_shafv_shFV
+pl_shnipl_shPL
+tam_anaanatam_anaTAM.ana
+ext_2_ananext_2_anEXT.an
+subj_2_nunusubj_2_nuSUBJ.nu
+subj_2_bubusubj_2_buSUBJ.bu
+subj_2_dudusubj_2_duSUBJ.du
+subj_2_gogosubj_2_goSUBJ.go
+subj_2_hohosubj_2_hoSUBJ.ho
+subj_2_kokosubj_2_koSUBJ.ko
+subj_2_lolosubj_2_loSUBJ.lo
+subj_2_momosubj_2_moSUBJ.mo
+subj_2_nonosubj_2_noSUBJ.no
+subj_2_poposubj_2_poSUBJ.po
+subj_2_rorosubj_2_roSUBJ.ro
+subj_2_sososubj_2_soSUBJ.so
+subj_2_totosubj_2_toSUBJ.to
+subj_2_wowosubj_2_woSUBJ.wo
+subj_2_yoyosubj_2_yoSUBJ.yo
+fv_2afv_2FV
+tam_ekaekatam_ekaTAM.eka
+ext_3_ikikext_3_ikEXT.ik
+tam_okaokatam_okaTAM.oka
+ext_4_umumext_4_umEXT.um
+subj_4_nunusubj_4_nuSUBJ.nu
+subj_4_bubusubj_4_buSUBJ.bu
+subj_4_dudusubj_4_duSUBJ.du
+subj_4_gogosubj_4_goSUBJ.go
+subj_4_hohosubj_4_hoSUBJ.ho
+subj_4_kokosubj_4_koSUBJ.ko
+subj_4_lolosubj_4_loSUBJ.lo
+subj_4_momosubj_4_moSUBJ.mo
+subj_4_nonosubj_4_noSUBJ.no
+subj_4_poposubj_4_poSUBJ.po
+subj_4_rorosubj_4_roSUBJ.ro
+subj_4_sososubj_4_soSUBJ.so
+subj_4_totosubj_4_toSUBJ.to
+subj_4_wowosubj_4_woSUBJ.wo
+subj_4_yoyosubj_4_yoSUBJ.yo
+fv_4afv_4FV
+tam_kaakaatam_kaaTAM.kaa
+ext_5_ekekext_5_ekEXT.ek
+tam_jeeyeetam_jeeTAM.jee
+ext_6_ololext_6_olEXT.ol
+subj_6_nunusubj_6_nuSUBJ.nu
+subj_6_bubusubj_6_buSUBJ.bu
+subj_6_dudusubj_6_duSUBJ.du
+subj_6_gogosubj_6_goSUBJ.go
+subj_6_hohosubj_6_hoSUBJ.ho
+subj_6_kokosubj_6_koSUBJ.ko
+subj_6_lolosubj_6_loSUBJ.lo
+subj_6_momosubj_6_moSUBJ.mo
+subj_6_nonosubj_6_noSUBJ.no
+subj_6_poposubj_6_poSUBJ.po
+subj_6_rorosubj_6_roSUBJ.ro
+subj_6_sososubj_6_soSUBJ.so
+subj_6_totosubj_6_toSUBJ.to
+subj_6_wowosubj_6_woSUBJ.wo
+subj_6_yoyosubj_6_yoSUBJ.yo
+fv_6afv_6FV
+tam_arearetam_areTAM.are
+ext_7_ututext_7_utEXT.ut
+tam_meemeetam_meeTAM.mee
+ext_8_adadext_8_adEXT.ad
+subj_8_nunusubj_8_nuSUBJ.nu
+subj_8_bubusubj_8_buSUBJ.bu
+subj_8_dudusubj_8_duSUBJ.du
+subj_8_gogosubj_8_goSUBJ.go
+subj_8_hohosubj_8_hoSUBJ.ho
+subj_8_kokosubj_8_koSUBJ.ko
+subj_8_lolosubj_8_loSUBJ.lo
+subj_8_momosubj_8_moSUBJ.mo
+subj_8_nonosubj_8_noSUBJ.no
+subj_8_poposubj_8_poSUBJ.po
+subj_8_rorosubj_8_roSUBJ.ro
+subj_8_sososubj_8_soSUBJ.so
+subj_8_totosubj_8_toSUBJ.to
+subj_8_wowosubj_8_woSUBJ.wo
+subj_8_yoyosubj_8_yoSUBJ.yo
+fv_8afv_8FV
+tam_tuutuutam_tuuTAM.tuu
+ext_9_ememext_9_emEXT.em
+tam_googootam_gooTAM.goo
+ext_10_ipipext_10_ipEXT.ip
+subj_10_nunusubj_10_nuSUBJ.nu
+subj_10_bubusubj_10_buSUBJ.bu
+subj_10_dudusubj_10_duSUBJ.du
+subj_10_gogosubj_10_goSUBJ.go
+subj_10_hohosubj_10_hoSUBJ.ho
+subj_10_kokosubj_10_koSUBJ.ko
+subj_10_lolosubj_10_loSUBJ.lo
+subj_10_momosubj_10_moSUBJ.mo
+subj_10_nonosubj_10_noSUBJ.no
+subj_10_poposubj_10_poSUBJ.po
+subj_10_rorosubj_10_roSUBJ.ro
+subj_10_sososubj_10_soSUBJ.so
+subj_10_totosubj_10_toSUBJ.to
+subj_10_wowosubj_10_woSUBJ.wo
+subj_10_yoyosubj_10_yoSUBJ.yo
+fv_10afv_10FV
+tam_kaa-iyekaaiyetam_kaa-iyeTAM.kaa-iye
+ext_11_obobext_11_obEXT.ob
+
+t0_iyetenseobjectextsubjectfvt1_iletenseobjectextsubjectfvplt2_anatenseobjectextsubjectfvt3_ekatenseobjectextsubjectfvplt4_okatenseobjectextsubjectfvt5_kaatenseobjectextsubjectfvplt6_jeetenseobjectextsubjectfvt7_aretenseobjectextsubjectfvplt8_meetenseobjectextsubjectfvt9_tuutenseobjectextsubjectfvplt10_gootenseobjectextsubjectfvt11_kaa-iyetenseobjectextsubjectfvpl
+
+balbalbal
+temtemtem
+kumkumkum
+dipdipdip
+gorgorgor
+hanhanhan
+keskeskes
+lublublub
+mermermer
+nugnugnug
+patpatpat
+remremrem
+solsolsol
+tagtagtag
+wabwabwab
+belbelbel
+dagdagdag
+gumgumgum
+hithithit
+korkorkor
+lenlenlen
+mosmosmos
+nemnemnem
+pirpirpir
+rotrotrot
+sabsabsab
+tultultul
+wenwenwen
+bisbisbis
+doldoldol
+
diff --git a/conformance-stress/edge-cases/bantu-tam-templates-shared/words.yaml b/conformance-stress/edge-cases/bantu-tam-templates-shared/words.yaml
new file mode 100644
index 000000000..42ac12f26
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-templates-shared/words.yaml
@@ -0,0 +1,284 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressBantuTamTemplatesShared
+sources: []
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 60000
+words:
+ - word: horayeedagola
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_ho+obj_ra+tam_jee+dag+ext_6_ol+fv_6|horayeedagola"
+ rules: [ext_6_ol, fv_6, obj_ra, subj_6_ho, tam_jee]
+ - word: sorotanaa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_2_so+rot+tam_ana+fv_2|sorotanaa"
+ rules: [fv_2, subj_2_so, tam_ana]
+ - word: noarekesut
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_no+tam_are+kes+ext_7_ut|noarekesut"
+ rules: [ext_7_ut, subj_sh_no, tam_are]
+ - word: yoyeenema
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_yo+tam_jee+nem+fv_6|yoyeenema"
+ rules: [fv_6, subj_6_yo, tam_jee]
+ - word: bunidagiyeisa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_0_bu+obj_ni+dag+tam_iye+ext_0_is+fv_0|bunidagiyeisa"
+ rules: [ext_0_is, fv_0, obj_ni, subj_0_bu, tam_iye]
+ - word: howaarekumutani
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_ho+obj_wa+tam_are+kum+ext_7_ut+fv_sh+pl_sh|howaarekumutani"
+ rules: [ext_7_ut, fv_sh, obj_wa, pl_sh, subj_sh_ho, tam_are]
+ - word: pokaalenni
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_po+tam_kaa+len+pl_sh|pokaalenni"
+ rules: [pl_sh, subj_sh_po, tam_kaa]
+ - word: goyeehitola
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_go+tam_jee+hit+ext_6_ol+fv_6|goyeehitola"
+ rules: [ext_6_ol, fv_6, subj_6_go, tam_jee]
+ - word: dupaarebalani
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_du+obj_pa+tam_are+bal+fv_sh+pl_sh|dupaarebalani"
+ rules: [fv_sh, obj_pa, pl_sh, subj_sh_du, tam_are]
+ - word: todiyeetaga
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_to+obj_di+tam_jee+tag+fv_6|todiyeetaga"
+ rules: [fv_6, obj_di, subj_6_to, tam_jee]
+ - word: sogumileilni
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_so+gum+tam_ile+ext_1_il+pl_sh|sogumileilni"
+ rules: [ext_1_il, pl_sh, subj_sh_so, tam_ile]
+ - word: bumukaagora
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_bu+obj_mu+tam_kaa+gor+fv_sh|bumukaagora"
+ rules: [fv_sh, obj_mu, subj_sh_bu, tam_kaa]
+ - word: hohagoranaan
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_2_ho+obj_ha+gor+tam_ana+ext_2_an|hohagoranaan"
+ rules: [ext_2_an, obj_ha, subj_2_ho, tam_ana]
+ - word: bugakaadipeka
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_bu+obj_ga+tam_kaa+dip+ext_5_ek+fv_sh|bugakaadipeka"
+ rules: [ext_5_ek, fv_sh, obj_ga, subj_sh_bu, tam_kaa]
+ - word: kowayeebal
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_ko+obj_wa+tam_jee+bal|kowayeebal"
+ rules: [obj_wa, subj_6_ko, tam_jee]
+ - word: hodikumileni
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_ho+obj_di+kum+tam_ile+pl_sh|hodikumileni"
+ rules: [obj_di, pl_sh, subj_sh_ho, tam_ile]
+ - word: yowakaamosekni
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_yo+obj_wa+tam_kaa+mos+ext_5_ek+pl_sh|yowakaamosekni"
+ rules: [ext_5_ek, obj_wa, pl_sh, subj_sh_yo, tam_kaa]
+ - word: torotileila
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_to+rot+tam_ile+ext_1_il+fv_sh|torotileila"
+ rules: [ext_1_il, fv_sh, subj_sh_to, tam_ile]
+ - word: sotakesanaan
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_2_so+obj_ta+kes+tam_ana+ext_2_an|sotakesanaan"
+ rules: [ext_2_an, obj_ta, subj_2_so, tam_ana]
+ - word: moaretulut
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_mo+tam_are+tul+ext_7_ut|moaretulut"
+ rules: [ext_7_ut, subj_sh_mo, tam_are]
+ - word: sowadagileila
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_so+obj_wa+dag+tam_ile+ext_1_il+fv_sh|sowadagileila"
+ rules: [ext_1_il, fv_sh, obj_wa, subj_sh_so, tam_ile]
+ - word: popayeelenol
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_6_po+obj_pa+tam_jee+len+ext_6_ol|popayeelenol"
+ rules: [ext_6_ol, obj_pa, subj_6_po, tam_jee]
+ - word: yobisanaan
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_2_yo+bis+tam_ana+ext_2_an|yobisanaan"
+ rules: [ext_2_an, subj_2_yo, tam_ana]
+ - word: kohaaregoruta
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_ko+obj_ha+tam_are+gor+ext_7_ut+fv_sh|kohaaregoruta"
+ rules: [ext_7_ut, fv_sh, obj_ha, subj_sh_ko, tam_are]
+ - word: sotimosekaa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_so+obj_ti+mos+tam_eka+fv_sh|sotimosekaa"
+ rules: [fv_sh, obj_ti, subj_sh_so, tam_eka]
+ - word: womeehita
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_8_wo+tam_mee+hit+fv_8|womeehita"
+ rules: [fv_8, subj_8_wo, tam_mee]
+ - word: wotuudagem
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_wo+tam_tuu+dag+ext_9_em|wotuudagem"
+ rules: [ext_9_em, subj_sh_wo, tam_tuu]
+ - word: yotuunemani
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_yo+tam_tuu+nem+fv_sh+pl_sh|yotuunemani"
+ rules: [fv_sh, pl_sh, subj_sh_yo, tam_tuu]
+ - word: komeesaba
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_8_ko+tam_mee+sab+fv_8|komeesaba"
+ rules: [fv_8, subj_8_ko, tam_mee]
+ - word: pobalokauma
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_po+bal+tam_oka+ext_4_um+fv_4|pobalokauma"
+ rules: [ext_4_um, fv_4, subj_4_po, tam_oka]
+ - word: tokesoka
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_to+kes+tam_oka|tokesoka"
+ rules: [subj_4_to, tam_oka]
+ - word: nomeedola
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_8_no+tam_mee+dol+fv_8|nomeedola"
+ rules: [fv_8, subj_8_no, tam_mee]
+ - word: nogagumokauma
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_no+obj_ga+gum+tam_oka+ext_4_um+fv_4|nogagumokauma"
+ rules: [ext_4_um, fv_4, obj_ga, subj_4_no, tam_oka]
+ - word: yogoogumipa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_yo+tam_goo+gum+ext_10_ip+fv_10|yogoogumipa"
+ rules: [ext_10_ip, fv_10, subj_10_yo, tam_goo]
+ - word: kokagooguma
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_ko+obj_ka+tam_goo+gum+fv_10|kokagooguma"
+ rules: [fv_10, obj_ka, subj_10_ko, tam_goo]
+ - word: toragoogor
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_to+obj_ra+tam_goo+gor|toragoogor"
+ rules: [obj_ra, subj_10_to, tam_goo]
+ - word: sobeloka
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_so+bel+tam_oka|sobeloka"
+ rules: [subj_4_so, tam_oka]
+ - word: loremokaum
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_lo+rem+tam_oka+ext_4_um|loremokaum"
+ rules: [ext_4_um, subj_4_lo, tam_oka]
+ - word: gogoopat
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_go+tam_goo+pat|gogoopat"
+ rules: [subj_10_go, tam_goo]
+ - word: dumeepatad
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_8_du+tam_mee+pat+ext_8_ad|dumeepatad"
+ rules: [ext_8_ad, subj_8_du, tam_mee]
+ - word: yogoohitip
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_yo+tam_goo+hit+ext_10_ip|yogoohitip"
+ rules: [ext_10_ip, subj_10_yo, tam_goo]
+ - word: wogaremoka
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_wo+obj_ga+rem+tam_oka|wogaremoka"
+ rules: [obj_ga, subj_4_wo, tam_oka]
+ - word: lohalubokaa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_lo+obj_ha+lub+tam_oka+fv_4|lohalubokaa"
+ rules: [fv_4, obj_ha, subj_4_lo, tam_oka]
+ - word: nowenokaum
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_no+wen+tam_oka+ext_4_um|nowenokaum"
+ rules: [ext_4_um, subj_4_no, tam_oka]
+ - word: kohanokaa
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_4_ko+han+tam_oka+fv_4|kohanokaa"
+ rules: [fv_4, subj_4_ko, tam_oka]
+ - word: nomeebisada
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_8_no+tam_mee+bis+ext_8_ad+fv_8|nomeebisada"
+ rules: [ext_8_ad, fv_8, subj_8_no, tam_mee]
+ - word: sohagoolubip
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_10_so+obj_ha+tam_goo+lub+ext_10_ip|sohagoolubip"
+ rules: [ext_10_ip, obj_ha, subj_10_so, tam_goo]
+ - word: podituulenem
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ parses:
+ - signature: "subj_sh_po+obj_di+tam_tuu+len+ext_9_em|podituulenem"
+ rules: [ext_9_em, obj_di, subj_sh_po, tam_tuu]
+ - word: loyeebam
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: wabiye
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: dugipana
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: dagiye
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: goyeehul
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: dipiye
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: rotuuhul
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: tuurot
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: rogipeka
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: kaadagiye
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: mokaahuliye
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
+ - word: meehit
+ note: "Bantu slot-template stress, variant whose trailing three slots are shared across templates; expected parses are the master engine's."
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/bantu-tam-templates/grammar.xml b/conformance-stress/edge-cases/bantu-tam-templates/grammar.xml
new file mode 100644
index 000000000..54b102162
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-templates/grammar.xml
@@ -0,0 +1,321 @@
+
+
+
+
+ bantu-tam-templates
+ v
+
+ syl+-
+ cons+-
+ son+-
+ nas+-
+ voice+-
+ cont+-
+ high+-
+ low+-
+ back+-
+ round+-
+ lat+-
+ placelabialalveolarvelarglottalnone
+
+
+ Main
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ h
+ k
+ l
+ m
+ n
+ p
+ r
+ s
+ t
+ w
+ y
+
+ Any
+ Main
+
+obj_mumuobj_muOBJ.mu
+obj_kukuobj_kuOBJ.ku
+obj_wawaobj_waOBJ.wa
+obj_babaobj_baOBJ.ba
+obj_mimiobj_miOBJ.mi
+obj_titiobj_tiOBJ.ti
+obj_niniobj_niOBJ.ni
+obj_ririobj_riOBJ.ri
+obj_sisiobj_siOBJ.si
+obj_didiobj_diOBJ.di
+obj_gagaobj_gaOBJ.ga
+obj_hahaobj_haOBJ.ha
+obj_kakaobj_kaOBJ.ka
+obj_lalaobj_laOBJ.la
+obj_mamaobj_maOBJ.ma
+obj_nanaobj_naOBJ.na
+obj_papaobj_paOBJ.pa
+obj_raraobj_raOBJ.ra
+obj_sasaobj_saOBJ.sa
+obj_tataobj_taOBJ.ta
+tam_iyeiyetam_iyeTAM.iye
+ext_0_isisext_0_isEXT.is
+subj_0_nunusubj_0_nuSUBJ.nu
+subj_0_bubusubj_0_buSUBJ.bu
+subj_0_dudusubj_0_duSUBJ.du
+subj_0_gogosubj_0_goSUBJ.go
+subj_0_hohosubj_0_hoSUBJ.ho
+subj_0_kokosubj_0_koSUBJ.ko
+subj_0_lolosubj_0_loSUBJ.lo
+subj_0_momosubj_0_moSUBJ.mo
+subj_0_nonosubj_0_noSUBJ.no
+subj_0_poposubj_0_poSUBJ.po
+subj_0_rorosubj_0_roSUBJ.ro
+subj_0_sososubj_0_soSUBJ.so
+subj_0_totosubj_0_toSUBJ.to
+subj_0_wowosubj_0_woSUBJ.wo
+subj_0_yoyosubj_0_yoSUBJ.yo
+fv_0afv_0FV
+tam_ileiletam_ileTAM.ile
+ext_1_ililext_1_ilEXT.il
+subj_1_nunusubj_1_nuSUBJ.nu
+subj_1_bubusubj_1_buSUBJ.bu
+subj_1_dudusubj_1_duSUBJ.du
+subj_1_gogosubj_1_goSUBJ.go
+subj_1_hohosubj_1_hoSUBJ.ho
+subj_1_kokosubj_1_koSUBJ.ko
+subj_1_lolosubj_1_loSUBJ.lo
+subj_1_momosubj_1_moSUBJ.mo
+subj_1_nonosubj_1_noSUBJ.no
+subj_1_poposubj_1_poSUBJ.po
+subj_1_rorosubj_1_roSUBJ.ro
+subj_1_sososubj_1_soSUBJ.so
+subj_1_totosubj_1_toSUBJ.to
+subj_1_wowosubj_1_woSUBJ.wo
+subj_1_yoyosubj_1_yoSUBJ.yo
+fv_1afv_1FV
+pl_1nipl_1PL
+tam_anaanatam_anaTAM.ana
+ext_2_ananext_2_anEXT.an
+subj_2_nunusubj_2_nuSUBJ.nu
+subj_2_bubusubj_2_buSUBJ.bu
+subj_2_dudusubj_2_duSUBJ.du
+subj_2_gogosubj_2_goSUBJ.go
+subj_2_hohosubj_2_hoSUBJ.ho
+subj_2_kokosubj_2_koSUBJ.ko
+subj_2_lolosubj_2_loSUBJ.lo
+subj_2_momosubj_2_moSUBJ.mo
+subj_2_nonosubj_2_noSUBJ.no
+subj_2_poposubj_2_poSUBJ.po
+subj_2_rorosubj_2_roSUBJ.ro
+subj_2_sososubj_2_soSUBJ.so
+subj_2_totosubj_2_toSUBJ.to
+subj_2_wowosubj_2_woSUBJ.wo
+subj_2_yoyosubj_2_yoSUBJ.yo
+fv_2afv_2FV
+tam_ekaekatam_ekaTAM.eka
+ext_3_ikikext_3_ikEXT.ik
+subj_3_nunusubj_3_nuSUBJ.nu
+subj_3_bubusubj_3_buSUBJ.bu
+subj_3_dudusubj_3_duSUBJ.du
+subj_3_gogosubj_3_goSUBJ.go
+subj_3_hohosubj_3_hoSUBJ.ho
+subj_3_kokosubj_3_koSUBJ.ko
+subj_3_lolosubj_3_loSUBJ.lo
+subj_3_momosubj_3_moSUBJ.mo
+subj_3_nonosubj_3_noSUBJ.no
+subj_3_poposubj_3_poSUBJ.po
+subj_3_rorosubj_3_roSUBJ.ro
+subj_3_sososubj_3_soSUBJ.so
+subj_3_totosubj_3_toSUBJ.to
+subj_3_wowosubj_3_woSUBJ.wo
+subj_3_yoyosubj_3_yoSUBJ.yo
+fv_3afv_3FV
+pl_3nipl_3PL
+tam_okaokatam_okaTAM.oka
+ext_4_umumext_4_umEXT.um
+subj_4_nunusubj_4_nuSUBJ.nu
+subj_4_bubusubj_4_buSUBJ.bu
+subj_4_dudusubj_4_duSUBJ.du
+subj_4_gogosubj_4_goSUBJ.go
+subj_4_hohosubj_4_hoSUBJ.ho
+subj_4_kokosubj_4_koSUBJ.ko
+subj_4_lolosubj_4_loSUBJ.lo
+subj_4_momosubj_4_moSUBJ.mo
+subj_4_nonosubj_4_noSUBJ.no
+subj_4_poposubj_4_poSUBJ.po
+subj_4_rorosubj_4_roSUBJ.ro
+subj_4_sososubj_4_soSUBJ.so
+subj_4_totosubj_4_toSUBJ.to
+subj_4_wowosubj_4_woSUBJ.wo
+subj_4_yoyosubj_4_yoSUBJ.yo
+fv_4afv_4FV
+tam_kaakaatam_kaaTAM.kaa
+ext_5_ekekext_5_ekEXT.ek
+subj_5_nunusubj_5_nuSUBJ.nu
+subj_5_bubusubj_5_buSUBJ.bu
+subj_5_dudusubj_5_duSUBJ.du
+subj_5_gogosubj_5_goSUBJ.go
+subj_5_hohosubj_5_hoSUBJ.ho
+subj_5_kokosubj_5_koSUBJ.ko
+subj_5_lolosubj_5_loSUBJ.lo
+subj_5_momosubj_5_moSUBJ.mo
+subj_5_nonosubj_5_noSUBJ.no
+subj_5_poposubj_5_poSUBJ.po
+subj_5_rorosubj_5_roSUBJ.ro
+subj_5_sososubj_5_soSUBJ.so
+subj_5_totosubj_5_toSUBJ.to
+subj_5_wowosubj_5_woSUBJ.wo
+subj_5_yoyosubj_5_yoSUBJ.yo
+fv_5afv_5FV
+pl_5nipl_5PL
+tam_jeeyeetam_jeeTAM.jee
+ext_6_ololext_6_olEXT.ol
+subj_6_nunusubj_6_nuSUBJ.nu
+subj_6_bubusubj_6_buSUBJ.bu
+subj_6_dudusubj_6_duSUBJ.du
+subj_6_gogosubj_6_goSUBJ.go
+subj_6_hohosubj_6_hoSUBJ.ho
+subj_6_kokosubj_6_koSUBJ.ko
+subj_6_lolosubj_6_loSUBJ.lo
+subj_6_momosubj_6_moSUBJ.mo
+subj_6_nonosubj_6_noSUBJ.no
+subj_6_poposubj_6_poSUBJ.po
+subj_6_rorosubj_6_roSUBJ.ro
+subj_6_sososubj_6_soSUBJ.so
+subj_6_totosubj_6_toSUBJ.to
+subj_6_wowosubj_6_woSUBJ.wo
+subj_6_yoyosubj_6_yoSUBJ.yo
+fv_6afv_6FV
+tam_arearetam_areTAM.are
+ext_7_ututext_7_utEXT.ut
+subj_7_nunusubj_7_nuSUBJ.nu
+subj_7_bubusubj_7_buSUBJ.bu
+subj_7_dudusubj_7_duSUBJ.du
+subj_7_gogosubj_7_goSUBJ.go
+subj_7_hohosubj_7_hoSUBJ.ho
+subj_7_kokosubj_7_koSUBJ.ko
+subj_7_lolosubj_7_loSUBJ.lo
+subj_7_momosubj_7_moSUBJ.mo
+subj_7_nonosubj_7_noSUBJ.no
+subj_7_poposubj_7_poSUBJ.po
+subj_7_rorosubj_7_roSUBJ.ro
+subj_7_sososubj_7_soSUBJ.so
+subj_7_totosubj_7_toSUBJ.to
+subj_7_wowosubj_7_woSUBJ.wo
+subj_7_yoyosubj_7_yoSUBJ.yo
+fv_7afv_7FV
+pl_7nipl_7PL
+tam_meemeetam_meeTAM.mee
+ext_8_adadext_8_adEXT.ad
+subj_8_nunusubj_8_nuSUBJ.nu
+subj_8_bubusubj_8_buSUBJ.bu
+subj_8_dudusubj_8_duSUBJ.du
+subj_8_gogosubj_8_goSUBJ.go
+subj_8_hohosubj_8_hoSUBJ.ho
+subj_8_kokosubj_8_koSUBJ.ko
+subj_8_lolosubj_8_loSUBJ.lo
+subj_8_momosubj_8_moSUBJ.mo
+subj_8_nonosubj_8_noSUBJ.no
+subj_8_poposubj_8_poSUBJ.po
+subj_8_rorosubj_8_roSUBJ.ro
+subj_8_sososubj_8_soSUBJ.so
+subj_8_totosubj_8_toSUBJ.to
+subj_8_wowosubj_8_woSUBJ.wo
+subj_8_yoyosubj_8_yoSUBJ.yo
+fv_8afv_8FV
+tam_tuutuutam_tuuTAM.tuu
+ext_9_ememext_9_emEXT.em
+subj_9_nunusubj_9_nuSUBJ.nu
+subj_9_bubusubj_9_buSUBJ.bu
+subj_9_dudusubj_9_duSUBJ.du
+subj_9_gogosubj_9_goSUBJ.go
+subj_9_hohosubj_9_hoSUBJ.ho
+subj_9_kokosubj_9_koSUBJ.ko
+subj_9_lolosubj_9_loSUBJ.lo
+subj_9_momosubj_9_moSUBJ.mo
+subj_9_nonosubj_9_noSUBJ.no
+subj_9_poposubj_9_poSUBJ.po
+subj_9_rorosubj_9_roSUBJ.ro
+subj_9_sososubj_9_soSUBJ.so
+subj_9_totosubj_9_toSUBJ.to
+subj_9_wowosubj_9_woSUBJ.wo
+subj_9_yoyosubj_9_yoSUBJ.yo
+fv_9afv_9FV
+pl_9nipl_9PL
+tam_googootam_gooTAM.goo
+ext_10_ipipext_10_ipEXT.ip
+subj_10_nunusubj_10_nuSUBJ.nu
+subj_10_bubusubj_10_buSUBJ.bu
+subj_10_dudusubj_10_duSUBJ.du
+subj_10_gogosubj_10_goSUBJ.go
+subj_10_hohosubj_10_hoSUBJ.ho
+subj_10_kokosubj_10_koSUBJ.ko
+subj_10_lolosubj_10_loSUBJ.lo
+subj_10_momosubj_10_moSUBJ.mo
+subj_10_nonosubj_10_noSUBJ.no
+subj_10_poposubj_10_poSUBJ.po
+subj_10_rorosubj_10_roSUBJ.ro
+subj_10_sososubj_10_soSUBJ.so
+subj_10_totosubj_10_toSUBJ.to
+subj_10_wowosubj_10_woSUBJ.wo
+subj_10_yoyosubj_10_yoSUBJ.yo
+fv_10afv_10FV
+tam_kaa-iyekaaiyetam_kaa-iyeTAM.kaa-iye
+ext_11_obobext_11_obEXT.ob
+subj_11_nunusubj_11_nuSUBJ.nu
+subj_11_bubusubj_11_buSUBJ.bu
+subj_11_dudusubj_11_duSUBJ.du
+subj_11_gogosubj_11_goSUBJ.go
+subj_11_hohosubj_11_hoSUBJ.ho
+subj_11_kokosubj_11_koSUBJ.ko
+subj_11_lolosubj_11_loSUBJ.lo
+subj_11_momosubj_11_moSUBJ.mo
+subj_11_nonosubj_11_noSUBJ.no
+subj_11_poposubj_11_poSUBJ.po
+subj_11_rorosubj_11_roSUBJ.ro
+subj_11_sososubj_11_soSUBJ.so
+subj_11_totosubj_11_toSUBJ.to
+subj_11_wowosubj_11_woSUBJ.wo
+subj_11_yoyosubj_11_yoSUBJ.yo
+fv_11afv_11FV
+pl_11nipl_11PL
+
+t0_iyetenseobjectextsubjectfvt1_iletenseobjectextsubjectfvplt2_anatenseobjectextsubjectfvt3_ekatenseobjectextsubjectfvplt4_okatenseobjectextsubjectfvt5_kaatenseobjectextsubjectfvplt6_jeetenseobjectextsubjectfvt7_aretenseobjectextsubjectfvplt8_meetenseobjectextsubjectfvt9_tuutenseobjectextsubjectfvplt10_gootenseobjectextsubjectfvt11_kaa-iyetenseobjectextsubjectfvpl
+
+balbalbal
+temtemtem
+kumkumkum
+dipdipdip
+gorgorgor
+hanhanhan
+keskeskes
+lublublub
+mermermer
+nugnugnug
+patpatpat
+remremrem
+solsolsol
+tagtagtag
+wabwabwab
+belbelbel
+dagdagdag
+gumgumgum
+hithithit
+korkorkor
+lenlenlen
+mosmosmos
+nemnemnem
+pirpirpir
+rotrotrot
+sabsabsab
+tultultul
+wenwenwen
+bisbisbis
+doldoldol
+
diff --git a/conformance-stress/edge-cases/bantu-tam-templates/words.yaml b/conformance-stress/edge-cases/bantu-tam-templates/words.yaml
new file mode 100644
index 000000000..4f54fd557
--- /dev/null
+++ b/conformance-stress/edge-cases/bantu-tam-templates/words.yaml
@@ -0,0 +1,284 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressBantuTamTemplates
+sources: []
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 60000
+words:
+ - word: horayeedagola
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_ho+obj_ra+tam_jee+dag+ext_6_ol+fv_6|horayeedagola"
+ rules: [ext_6_ol, fv_6, obj_ra, subj_6_ho, tam_jee]
+ - word: sorotanaa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_2_so+rot+tam_ana+fv_2|sorotanaa"
+ rules: [fv_2, subj_2_so, tam_ana]
+ - word: noarekesut
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_7_no+tam_are+kes+ext_7_ut|noarekesut"
+ rules: [ext_7_ut, subj_7_no, tam_are]
+ - word: yoyeenema
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_yo+tam_jee+nem+fv_6|yoyeenema"
+ rules: [fv_6, subj_6_yo, tam_jee]
+ - word: bunidagiyeisa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_0_bu+obj_ni+dag+tam_iye+ext_0_is+fv_0|bunidagiyeisa"
+ rules: [ext_0_is, fv_0, obj_ni, subj_0_bu, tam_iye]
+ - word: howaarekumutani
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_7_ho+obj_wa+tam_are+kum+ext_7_ut+fv_7+pl_7|howaarekumutani"
+ rules: [ext_7_ut, fv_7, obj_wa, pl_7, subj_7_ho, tam_are]
+ - word: pokaalenni
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_5_po+tam_kaa+len+pl_5|pokaalenni"
+ rules: [pl_5, subj_5_po, tam_kaa]
+ - word: goyeehitola
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_go+tam_jee+hit+ext_6_ol+fv_6|goyeehitola"
+ rules: [ext_6_ol, fv_6, subj_6_go, tam_jee]
+ - word: dupaarebalani
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_7_du+obj_pa+tam_are+bal+fv_7+pl_7|dupaarebalani"
+ rules: [fv_7, obj_pa, pl_7, subj_7_du, tam_are]
+ - word: todiyeetaga
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_to+obj_di+tam_jee+tag+fv_6|todiyeetaga"
+ rules: [fv_6, obj_di, subj_6_to, tam_jee]
+ - word: sogumileilni
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_1_so+gum+tam_ile+ext_1_il+pl_1|sogumileilni"
+ rules: [ext_1_il, pl_1, subj_1_so, tam_ile]
+ - word: bumukaagora
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_5_bu+obj_mu+tam_kaa+gor+fv_5|bumukaagora"
+ rules: [fv_5, obj_mu, subj_5_bu, tam_kaa]
+ - word: hohagoranaan
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_2_ho+obj_ha+gor+tam_ana+ext_2_an|hohagoranaan"
+ rules: [ext_2_an, obj_ha, subj_2_ho, tam_ana]
+ - word: bugakaadipeka
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_5_bu+obj_ga+tam_kaa+dip+ext_5_ek+fv_5|bugakaadipeka"
+ rules: [ext_5_ek, fv_5, obj_ga, subj_5_bu, tam_kaa]
+ - word: kowayeebal
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_ko+obj_wa+tam_jee+bal|kowayeebal"
+ rules: [obj_wa, subj_6_ko, tam_jee]
+ - word: hodikumileni
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_1_ho+obj_di+kum+tam_ile+pl_1|hodikumileni"
+ rules: [obj_di, pl_1, subj_1_ho, tam_ile]
+ - word: yowakaamosekni
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_5_yo+obj_wa+tam_kaa+mos+ext_5_ek+pl_5|yowakaamosekni"
+ rules: [ext_5_ek, obj_wa, pl_5, subj_5_yo, tam_kaa]
+ - word: torotileila
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_1_to+rot+tam_ile+ext_1_il+fv_1|torotileila"
+ rules: [ext_1_il, fv_1, subj_1_to, tam_ile]
+ - word: sotakesanaan
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_2_so+obj_ta+kes+tam_ana+ext_2_an|sotakesanaan"
+ rules: [ext_2_an, obj_ta, subj_2_so, tam_ana]
+ - word: moaretulut
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_7_mo+tam_are+tul+ext_7_ut|moaretulut"
+ rules: [ext_7_ut, subj_7_mo, tam_are]
+ - word: sowadagileila
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_1_so+obj_wa+dag+tam_ile+ext_1_il+fv_1|sowadagileila"
+ rules: [ext_1_il, fv_1, obj_wa, subj_1_so, tam_ile]
+ - word: popayeelenol
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_6_po+obj_pa+tam_jee+len+ext_6_ol|popayeelenol"
+ rules: [ext_6_ol, obj_pa, subj_6_po, tam_jee]
+ - word: yobisanaan
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_2_yo+bis+tam_ana+ext_2_an|yobisanaan"
+ rules: [ext_2_an, subj_2_yo, tam_ana]
+ - word: kohaaregoruta
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_7_ko+obj_ha+tam_are+gor+ext_7_ut+fv_7|kohaaregoruta"
+ rules: [ext_7_ut, fv_7, obj_ha, subj_7_ko, tam_are]
+ - word: sotimosekaa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_3_so+obj_ti+mos+tam_eka+fv_3|sotimosekaa"
+ rules: [fv_3, obj_ti, subj_3_so, tam_eka]
+ - word: womeehita
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_8_wo+tam_mee+hit+fv_8|womeehita"
+ rules: [fv_8, subj_8_wo, tam_mee]
+ - word: wotuudagem
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_9_wo+tam_tuu+dag+ext_9_em|wotuudagem"
+ rules: [ext_9_em, subj_9_wo, tam_tuu]
+ - word: yotuunemani
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_9_yo+tam_tuu+nem+fv_9+pl_9|yotuunemani"
+ rules: [fv_9, pl_9, subj_9_yo, tam_tuu]
+ - word: komeesaba
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_8_ko+tam_mee+sab+fv_8|komeesaba"
+ rules: [fv_8, subj_8_ko, tam_mee]
+ - word: pobalokauma
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_po+bal+tam_oka+ext_4_um+fv_4|pobalokauma"
+ rules: [ext_4_um, fv_4, subj_4_po, tam_oka]
+ - word: tokesoka
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_to+kes+tam_oka|tokesoka"
+ rules: [subj_4_to, tam_oka]
+ - word: nomeedola
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_8_no+tam_mee+dol+fv_8|nomeedola"
+ rules: [fv_8, subj_8_no, tam_mee]
+ - word: nogagumokauma
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_no+obj_ga+gum+tam_oka+ext_4_um+fv_4|nogagumokauma"
+ rules: [ext_4_um, fv_4, obj_ga, subj_4_no, tam_oka]
+ - word: yogoogumipa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_yo+tam_goo+gum+ext_10_ip+fv_10|yogoogumipa"
+ rules: [ext_10_ip, fv_10, subj_10_yo, tam_goo]
+ - word: kokagooguma
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_ko+obj_ka+tam_goo+gum+fv_10|kokagooguma"
+ rules: [fv_10, obj_ka, subj_10_ko, tam_goo]
+ - word: toragoogor
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_to+obj_ra+tam_goo+gor|toragoogor"
+ rules: [obj_ra, subj_10_to, tam_goo]
+ - word: sobeloka
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_so+bel+tam_oka|sobeloka"
+ rules: [subj_4_so, tam_oka]
+ - word: loremokaum
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_lo+rem+tam_oka+ext_4_um|loremokaum"
+ rules: [ext_4_um, subj_4_lo, tam_oka]
+ - word: gogoopat
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_go+tam_goo+pat|gogoopat"
+ rules: [subj_10_go, tam_goo]
+ - word: dumeepatad
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_8_du+tam_mee+pat+ext_8_ad|dumeepatad"
+ rules: [ext_8_ad, subj_8_du, tam_mee]
+ - word: yogoohitip
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_yo+tam_goo+hit+ext_10_ip|yogoohitip"
+ rules: [ext_10_ip, subj_10_yo, tam_goo]
+ - word: wogaremoka
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_wo+obj_ga+rem+tam_oka|wogaremoka"
+ rules: [obj_ga, subj_4_wo, tam_oka]
+ - word: lohalubokaa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_lo+obj_ha+lub+tam_oka+fv_4|lohalubokaa"
+ rules: [fv_4, obj_ha, subj_4_lo, tam_oka]
+ - word: nowenokaum
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_no+wen+tam_oka+ext_4_um|nowenokaum"
+ rules: [ext_4_um, subj_4_no, tam_oka]
+ - word: kohanokaa
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_4_ko+han+tam_oka+fv_4|kohanokaa"
+ rules: [fv_4, subj_4_ko, tam_oka]
+ - word: nomeebisada
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_8_no+tam_mee+bis+ext_8_ad+fv_8|nomeebisada"
+ rules: [ext_8_ad, fv_8, subj_8_no, tam_mee]
+ - word: sohagoolubip
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_10_so+obj_ha+tam_goo+lub+ext_10_ip|sohagoolubip"
+ rules: [ext_10_ip, obj_ha, subj_10_so, tam_goo]
+ - word: podituulenem
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_9_po+obj_di+tam_tuu+len+ext_9_em|podituulenem"
+ rules: [ext_9_em, obj_di, subj_9_po, tam_tuu]
+ - word: loyeebam
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: wabiye
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: dugipana
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: dagiye
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: goyeehul
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: dipiye
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: rotuuhul
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: tuurot
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: rogipeka
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: kaadagiye
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: mokaahuliye
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: meehit
+ note: "Bantu slot-template stress: 60 words over subject/object/extension/TAM/final-vowel template slots with required slots; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/derivation-chain-homophone-roots/grammar.xml b/conformance-stress/edge-cases/derivation-chain-homophone-roots/grammar.xml
new file mode 100644
index 000000000..d744b53a1
--- /dev/null
+++ b/conformance-stress/edge-cases/derivation-chain-homophone-roots/grammar.xml
@@ -0,0 +1,313 @@
+
+
+
+
+ StressDerivationChainHomophoneRoots
+
+ v
+ n
+
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ k
+ l
+ m
+ n
+ p
+ s
+ t
+ v
+ w
+ y
+ c
+ r
+ h
+ z
+ j
+
+
+
+ Any
+
+
+
+ Main
+
+
+ mrDR1
+
+
+
+ lik
+
+
+ DR1
+ DR1
+
+
+ mrDR2
+
+
+
+ ci
+
+
+ DR2
+ DR2
+
+
+ mrDR3
+
+
+
+ sa
+
+
+ DR3
+ DR3
+
+
+ mrDR4
+
+
+
+ la
+
+
+ DR4
+ DR4
+
+
+ mrDR5
+
+
+
+ ma
+
+
+ DR5
+ DR5
+
+
+ mrDR6
+
+
+
+ ta
+
+
+ DR6
+ DR6
+
+
+ mrDR7
+
+
+
+ ki
+
+
+ DR7
+ DR7
+
+
+ mrTA1
+
+
+
+ di
+
+
+ TA1
+ TA1
+
+
+ mrTA2
+
+
+
+ mi
+
+
+ TA2
+ TA2
+
+
+ mrTA3
+
+
+
+ ir
+
+
+ TA3
+ TA3
+
+
+ mrTA4
+
+
+
+ ek
+
+
+ TA4
+ TA4
+
+
+ mrTA5
+
+
+
+ a
+
+
+ TA5
+ TA5
+
+
+ mrPR1
+
+
+
+ m
+
+
+ PR1
+ PR1
+
+
+ mrPR2
+
+
+
+ n
+
+
+ PR2
+ PR2
+
+
+ mrPR3
+
+
+
+ k
+
+
+ PR3
+ PR3
+
+
+
+
+ verbTemplate
+ tense
+ person
+
+
+
+
+ kal
+ V_KAL
+ kal.V
+
+
+ bol
+ V_BOL
+ bol.V
+
+
+ sev
+ V_SEV
+ sev.V
+
+
+ git
+ V_GIT
+ git.V
+
+
+ ver
+ V_VER
+ ver.V
+
+
+ tut
+ V_TUT
+ tut.V
+
+
+ dur
+ V_DUR
+ dur.V
+
+
+ yaz
+ V_YAZ
+ yaz.V
+
+
+ kal
+ N_KAL
+ kal.N
+
+
+ bol
+ N_BOL
+ bol.N
+
+
+ sev
+ N_SEV
+ sev.N
+
+
+ git
+ N_GIT
+ git.N
+
+
+ ver
+ N_VER
+ ver.N
+
+
+ tut
+ N_TUT
+ tut.N
+
+
+ dur
+ N_DUR
+ dur.N
+
+
+ yaz
+ N_YAZ
+ yaz.N
+
+
+ kitap
+ N_KITAP
+ kitap.N
+
+
+ deni
+ N_DENI
+ deni.N
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/derivation-chain-homophone-roots/words.yaml b/conformance-stress/edge-cases/derivation-chain-homophone-roots/words.yaml
new file mode 100644
index 000000000..c441a44f6
--- /dev/null
+++ b/conformance-stress/edge-cases/derivation-chain-homophone-roots/words.yaml
@@ -0,0 +1,444 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# HAND DERIVATION (see grammar.xml). Seven FS-free derivational suffixes in one unordered stratum apply to any root in any order. Verb roots and noun roots share shapes; only the verb template (required tense slot, optional person slot) applies to verbs, so every verb-root candidate for a nominal derivation applies its suffixes and then dies at the required slot.
+# Parses for each word are every (root, rule choice) whose surface equals the word, enumerated by an independent script over
+# the rule tables, then confirmed against the engine. Signature: morpheme IDs in surface order, then "|" and the surface.
+language: StressDerivationChainHomophoneRoots
+inspired_by: ["agglutinative suffixing language (Turkic-like): free derivational suffix chain, finite verb inflection template"]
+sources:
+ - "synthetic stress fixture (not a specific language)"
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: tutlasata
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_TUT+DR4+DR3+DR6|tutlasata"
+ rules: [mrDR4, mrDR3, mrDR6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tutsakila
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_TUT+DR3+DR7+DR4|tutsakila"
+ rules: [mrDR3, mrDR7, mrDR4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitlikcima
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_GIT+DR1+DR2+DR5|gitlikcima"
+ rules: [mrDR1, mrDR2, mrDR5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kalmasata
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_KAL+DR5+DR3+DR6|kalmasata"
+ rules: [mrDR5, mrDR3, mrDR6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kitapmacila
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_KITAP+DR5+DR2+DR4|kitapmacila"
+ rules: [mrDR5, mrDR2, mrDR4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitlakici
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_GIT+DR4+DR7+DR2|gitlakici"
+ rules: [mrDR4, mrDR7, mrDR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vertalama
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_VER+DR6+DR4+DR5|vertalama"
+ rules: [mrDR6, mrDR4, mrDR5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kaltacila
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_KAL+DR6+DR2+DR4|kaltacila"
+ rules: [mrDR6, mrDR2, mrDR4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: sevmalaki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_SEV+DR5+DR4+DR7|sevmalaki"
+ rules: [mrDR5, mrDR4, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: denilamasa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_DENI+DR4+DR5+DR3|denilamasa"
+ rules: [mrDR4, mrDR5, mrDR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yaztasaki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_YAZ+DR6+DR3+DR7|yaztasaki"
+ rules: [mrDR6, mrDR3, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitsataki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_GIT+DR3+DR6+DR7|gitsataki"
+ rules: [mrDR3, mrDR6, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yazliktama
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_YAZ+DR1+DR6+DR5|yazliktama"
+ rules: [mrDR1, mrDR6, mrDR5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bolcimasa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_BOL+DR2+DR5+DR3|bolcimasa"
+ rules: [mrDR2, mrDR5, mrDR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kalkitaci
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_KAL+DR7+DR6+DR2|kalkitaci"
+ rules: [mrDR7, mrDR6, mrDR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: denilikciki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_DENI+DR1+DR2+DR7|denilikciki"
+ rules: [mrDR1, mrDR2, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vermatala
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_VER+DR5+DR6+DR4|vermatala"
+ rules: [mrDR5, mrDR6, mrDR4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: denisacima
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_DENI+DR3+DR2+DR5|denisacima"
+ rules: [mrDR3, mrDR2, mrDR5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tuttaci
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_TUT+DR6+DR2|tuttaci"
+ rules: [mrDR6, mrDR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitcilaki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_GIT+DR2+DR4+DR7|gitcilaki"
+ rules: [mrDR2, mrDR4, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vertasaki
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_VER+DR6+DR3+DR7|vertasaki"
+ rules: [mrDR6, mrDR3, mrDR7]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yazlama
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_YAZ+DR4+DR5|yazlama"
+ rules: [mrDR4, mrDR5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bollikkisa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_BOL+DR1+DR7+DR3|bollikkisa"
+ rules: [mrDR1, mrDR7, mrDR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kallamasa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "N_KAL+DR4+DR5+DR3|kallamasa"
+ rules: [mrDR4, mrDR5, mrDR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bolliktair
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_BOL+DR1+DR6+TA3|bolliktair"
+ rules: [mrDR1, mrDR6, mrTA3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bollikcimaan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_BOL+DR1+DR2+DR5+TA5+PR2|bollikcimaan"
+ rules: [mrDR1, mrDR2, mrDR5, mrTA5, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bolciliktami
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_BOL+DR2+DR1+DR6+TA2|bolciliktami"
+ rules: [mrDR2, mrDR1, mrDR6, mrTA2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tutcitakidin
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_TUT+DR2+DR6+DR7+TA1+PR2|tutcitakidin"
+ rules: [mrDR2, mrDR6, mrDR7, mrTA1, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vertacilikirm
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_VER+DR6+DR2+DR1+TA3+PR1|vertacilikirm"
+ rules: [mrDR6, mrDR2, mrDR1, mrTA3, mrPR1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: verkilikmair
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_VER+DR7+DR1+DR5+TA3|verkilikmair"
+ rules: [mrDR7, mrDR1, mrDR5, mrTA3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yazlikcitadim
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_YAZ+DR1+DR2+DR6+TA1+PR1|yazlikcitadim"
+ rules: [mrDR1, mrDR2, mrDR6, mrTA1, mrPR1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: sevsataciak
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_SEV+DR3+DR6+DR2+TA5+PR3|sevsataciak"
+ rules: [mrDR3, mrDR6, mrDR2, mrTA5, mrPR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vercitasaekn
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_VER+DR2+DR6+DR3+TA4+PR2|vercitasaekn"
+ rules: [mrDR2, mrDR6, mrDR3, mrTA4, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tutcikitadi
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_TUT+DR2+DR7+DR6+TA1|tutcikitadi"
+ rules: [mrDR2, mrDR7, mrDR6, mrTA1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vercikiladik
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_VER+DR2+DR7+DR4+TA1+PR3|vercikiladik"
+ rules: [mrDR2, mrDR7, mrDR4, mrTA1, mrPR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kalcilikek
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_KAL+DR2+DR1+TA4|kalcilikek"
+ rules: [mrDR2, mrDR1, mrTA4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kalcimairk
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_KAL+DR2+DR5+TA3+PR3|kalcimairk"
+ rules: [mrDR2, mrDR5, mrTA3, mrPR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitlikcimi
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_GIT+DR1+DR2+TA2|gitlikcimi"
+ rules: [mrDR1, mrDR2, mrTA2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitmakilikan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_GIT+DR5+DR7+DR1+TA5+PR2|gitmakilikan"
+ rules: [mrDR5, mrDR7, mrDR1, mrTA5, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yazsaliklaa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_YAZ+DR3+DR1+DR4+TA5|yazsaliklaa"
+ rules: [mrDR3, mrDR1, mrDR4, mrTA5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: sevciliklairm
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_SEV+DR2+DR1+DR4+TA3+PR1|sevciliklairm"
+ rules: [mrDR2, mrDR1, mrDR4, mrTA3, mrPR1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: yazcisataan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_YAZ+DR2+DR3+DR6+TA5+PR2|yazcisataan"
+ rules: [mrDR2, mrDR3, mrDR6, mrTA5, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: durlamasaan
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_DUR+DR4+DR5+DR3+TA5+PR2|durlamasaan"
+ rules: [mrDR4, mrDR5, mrDR3, mrTA5, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: durcisataa
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_DUR+DR2+DR3+DR6+TA5|durcisataa"
+ rules: [mrDR2, mrDR3, mrDR6, mrTA5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kalliklamin
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_KAL+DR1+DR4+TA2+PR2|kalliklamin"
+ rules: [mrDR1, mrDR4, mrTA2, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bollikmacian
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_BOL+DR1+DR5+DR2+TA5+PR2|bollikmacian"
+ rules: [mrDR1, mrDR5, mrDR2, mrTA5, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: verciliklairn
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_VER+DR2+DR1+DR4+TA3+PR2|verciliklairn"
+ rules: [mrDR2, mrDR1, mrDR4, mrTA3, mrPR2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: gitsamairk
+ note: >-
+ 1 derivation(s): root x rule choices whose surface equals the word.
+ parses:
+ - signature: "V_GIT+DR3+DR5+TA3+PR3|gitsamairk"
+ rules: [mrDR3, mrDR5, mrTA3, mrPR3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
diff --git a/conformance-stress/edge-cases/early-lexicon-agglutinative/grammar.xml b/conformance-stress/edge-cases/early-lexicon-agglutinative/grammar.xml
new file mode 100644
index 000000000..b8d608fee
--- /dev/null
+++ b/conformance-stress/edge-cases/early-lexicon-agglutinative/grammar.xml
@@ -0,0 +1,95 @@
+
+
+
+
+ early-lexicon-agglutinative
+ x
+
+ syl+-
+ cons+-
+ son+-
+ nas+-
+ voice+-
+ cont+-
+ high+-
+ low+-
+ back+-
+ round+-
+
+
+ Main
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ k
+ l
+ m
+ n
+ p
+ r
+ s
+ t
+ y
+
+
+ Any
+ FrontV
+ Cons
+
+
+ vowel harmony
+
+ Main
+
+PLlarPLPL
+P1umP1P1
+P2unP2P2
+P3siiP3P3
+ACCniyiACCACC
+DATkaaDATDAT
+LOCdaLOCLOC
+ABLdanABLABL
+GENninGENGEN
+INSTlaINSTINST
+COMblaCOMCOM
+EQUgaEQUEQU
+NEGmaNEGNEG
+PASTditiPASTPAST
+EVIDmisEVIDEVID
+FUTasakFUTFUT
+CONDsaCONDCOND
+IMPsinIMPIMP
+ABILabilABILABIL
+CAUStirCAUSCAUS
+PASSilnPASSPASS
+RECIPisRECIPRECIP
+REFLinREFLREFL
+DESIDgiDESIDDESID
+AGENTkiAGENTAGENT
+
+katkatkat
+polpolpol
+murmurmur
+toktoktok
+basbasbas
+gungungun
+dardardar
+loploplop
+sutsutsut
+noknoknok
+kelkelkel
+pirpirpir
+sensensen
+bilbilbil
+desdesdes
+gitgitgit
+nernerner
+tiptiptip
+mekmekmek
+lislislis
+
diff --git a/conformance-stress/edge-cases/early-lexicon-agglutinative/words.yaml b/conformance-stress/edge-cases/early-lexicon-agglutinative/words.yaml
new file mode 100644
index 000000000..948ec404e
--- /dev/null
+++ b/conformance-stress/edge-cases/early-lexicon-agglutinative/words.yaml
@@ -0,0 +1,235 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressEarlyLexiconAgglutinative
+sources: []
+requires: [phonology]
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 60000
+words:
+ - word: polsi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "pol+P3|polsi"
+ rules: [mr_P3]
+ - word: subissime
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: bille
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "bil+INST|bille"
+ rules: [mr_INST, prule1]
+ - word: katn
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "kat+PASS|katn"
+ rules: [mr_PASS]
+ - word: metkegeyiundanbla
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: lolisninseinkide
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: mekdeseum
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "mek+LOC+COND+P1|mekdeseum"
+ rules: [mr_COND, mr_LOC, mr_P1, prule1]
+ - word: dayblaabilsidenkiun
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: pokkiummisninebildi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: nagunmisse
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: tigesekuminlede
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: negkemissinkiin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: katgisin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "kat+DESID+IMP|katgisin"
+ rules: [mr_DESID, mr_IMP]
+ - signature: "kat+DESID+P3+PASS|katgisin"
+ rules: [mr_DESID, mr_P3, mr_PASS]
+ - word: didtiyimesi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: dukgiiebilun
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: darga
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "dar+EQU|darga"
+ rules: [mr_EQU]
+ - word: bibiebildedenis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: rugniilmissinble
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: mekge
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "mek+EQU|mekge"
+ rules: [mr_EQU, prule1]
+ - word: yermisesekni
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: gundimis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "gun+PAST+EVID|gundimis"
+ rules: [mr_EVID, mr_PAST]
+ - word: kelsin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "kel+IMP|kelsin"
+ rules: [mr_IMP]
+ - signature: "kel+P3+PASS|kelsin"
+ rules: [mr_P3, mr_PASS]
+ - word: tatisesekinimissin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: lapsinkemisti
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: piyikiebil
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: denkeebildeblege
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: yatabiltirilinge
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: gatagalarumsigi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: yupdadiille
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: kelgiun
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "kel+DESID+P2|kelgiun"
+ rules: [mr_DESID, mr_P2]
+ - word: sekdiunblala
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: yimseleum
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: kelninmis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "kel+ACC+PASS+EVID|kelninmis"
+ rules: [mr_ACC, mr_EVID, mr_PASS]
+ - signature: "kel+GEN+EVID|kelninmis"
+ rules: [mr_EVID, mr_GEN]
+ - signature: "kel+PASS+REFL+EVID|kelninmis"
+ rules: [mr_EVID, mr_PASS, mr_REFL]
+ - word: tipinleble
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "tip+P3+PASS+INST+COM|tipinleble"
+ rules: [mr_COM, mr_INST, mr_P3, mr_PASS, prule1]
+ - signature: "tip+REFL+INST+COM|tipinleble"
+ rules: [mr_COM, mr_INST, mr_REFL, prule1]
+ - word: darun
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "dar+P2|darun"
+ rules: [mr_P2]
+ - word: kumninesekis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: gidnininesekniki
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: likkikese
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: lagblaisgeninsin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: pabnigelededennin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: boksingeble
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: randasinkegi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: bobkamislergime
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: demgiselelermis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: seltirsimediin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: kidingibleninse
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: toksin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "tok+IMP|toksin"
+ rules: [mr_IMP]
+ - signature: "tok+P3+PASS|toksin"
+ rules: [mr_P3, mr_PASS]
+ - word: riggebleleris
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: rasilmisis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: sutblalar
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "sut+COM+PL|sutblalar"
+ rules: [mr_COM, mr_PL]
+ - word: gittirler
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "git+CAUS+PL|gittirler"
+ rules: [mr_CAUS, mr_PL, prule1]
+ - word: tipisunbla
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "tip+RECIP+P2+COM|tipisunbla"
+ rules: [mr_COM, mr_P2, mr_RECIP]
+ - word: pirkisium
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "pir+AGENT+P3+P1|pirkisium"
+ rules: [mr_AGENT, mr_P1, mr_P3]
+ - word: darasakmis
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ parses:
+ - signature: "dar+FUT+EVID|darasakmis"
+ rules: [mr_EVID, mr_FUT]
+ - word: nurlarinninuntiris
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: kegisinkileede
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: kosasinninumgagi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: nemungiebilkidesin
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
+ - word: lodundakiinsingi
+ note: "Agglutinative stress with root material found early in the word, so root-substring and edge-segment prunes apply; expected parses are the master engine's."
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/env-austronesian-nasal-prefix/grammar.xml b/conformance-stress/edge-cases/env-austronesian-nasal-prefix/grammar.xml
new file mode 100644
index 000000000..f1ce9cd4c
--- /dev/null
+++ b/conformance-stress/edge-cases/env-austronesian-nasal-prefix/grammar.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+ AustronesianNasalPrefixes
+ x
+ idaeiupbtdkgmns
+
+ Main
+
+ a
+ e
+ i
+ u
+ p
+ b
+ t
+ d
+ k
+ g
+ m
+ n
+ s
+
+
+
+ Any
+ Lab
+ Cor
+ Vel
+ V
+ Nas
+
+
+
+ Main
+
+ activememmenmekmemeACT
+ causativepempenpekpeCAUS
+ locativeikanLOC
+
+
+ pabaR00root0
+ bupiR01root1
+ bapuR02root2
+ tadiR03root3
+ dusaR04root4
+ saduR05root5
+ kaguR06root6
+ gakuR07root7
+ kugaR08root8
+ umiR09root9
+ apiR10root10
+ ubuR11root11
+ ataR12root12
+ isuR13root13
+ aduR14root14
+ pipaR15root15
+ bubaR16root16
+ dasiR17root17
+ kiguR18root18
+ gusiR19root19
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/env-austronesian-nasal-prefix/words.yaml b/conformance-stress/edge-cases/env-austronesian-nasal-prefix/words.yaml
new file mode 100644
index 000000000..f0bc3da74
--- /dev/null
+++ b/conformance-stress/edge-cases/env-austronesian-nasal-prefix/words.yaml
@@ -0,0 +1,286 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: AustronesianNasalPrefixes
+inspired_by: ["Synthetic Austronesian nasal-assimilating meN- and peN- prefixes with place-conditioned allomorphs and a locative suffix with a zero allomorph (not modeling one real language)."]
+sources: []
+requires: []
+# Stress fixture for the required-environment prefilter. Expected parses follow the allomorph and disjunction
+# rules by hand; the zero allomorphs' environments are read at an engine-defined position, so words with a
+# zero-allomorph parse take the engine's verdict with the prefilter switched off.
+budget_ms: 60000
+words:
+ - word: paba
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ exercises:
+ - "AffixProcessRule: prefix/suffix/circumfix/infix"
+ parses:
+ - signature: "R00|paba"
+ gloss: parse
+ rules: []
+ - word: bupi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R01|bupi"
+ gloss: parse
+ rules: []
+ - word: bapu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R02|bapu"
+ gloss: parse
+ rules: []
+ - word: tadi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R03|tadi"
+ gloss: parse
+ rules: []
+ - word: dusa
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R04|dusa"
+ gloss: parse
+ rules: []
+ - word: sadu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R05|sadu"
+ gloss: parse
+ rules: []
+ - word: kagu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R06|kagu"
+ gloss: parse
+ rules: []
+ - word: gaku
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R07|gaku"
+ gloss: parse
+ rules: []
+ - word: kuga
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R08|kuga"
+ gloss: parse
+ rules: []
+ - word: umi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R09+LOC|umi"
+ gloss: parse
+ rules: [mrLOC]
+ - signature: "R09|umi"
+ gloss: parse
+ rules: []
+ - word: api
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R10|api"
+ gloss: parse
+ rules: []
+ - word: ubu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R11|ubu"
+ gloss: parse
+ rules: []
+ - word: ata
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R12|ata"
+ gloss: parse
+ rules: []
+ - word: isu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R13|isu"
+ gloss: parse
+ rules: []
+ - word: peisui
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+R13+LOC|peisui"
+ gloss: parse
+ rules: [mrCAUS, mrLOC]
+ - signature: "CAUS+R13+LOC|peisui"
+ gloss: parse
+ rules: [mrLOC, mrCAUS]
+ - word: mempaba
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R00|mempaba"
+ gloss: parse
+ rules: [mrACT]
+ - word: pemeata
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+ACT+R12|pemeata"
+ gloss: parse
+ rules: [mrCAUS, mrACT]
+ - word: kigui
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R18+LOC|kigui"
+ gloss: parse
+ rules: [mrLOC]
+ - word: meata
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R12|meata"
+ gloss: parse
+ rules: [mrACT]
+ - word: tadii
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R03+LOC|tadii"
+ gloss: parse
+ rules: [mrLOC]
+ - word: mekgusi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R19|mekgusi"
+ gloss: parse
+ rules: [mrACT]
+ - word: pembapu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+R02|pembapu"
+ gloss: parse
+ rules: [mrCAUS]
+ - word: meadu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R14|meadu"
+ gloss: parse
+ rules: [mrACT]
+ - word: pentadi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+R03|pentadi"
+ gloss: parse
+ rules: [mrCAUS]
+ - word: mempendasi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+LOC+CAUS+R17|mempendasi"
+ gloss: parse
+ rules: [mrACT, mrCAUS, mrLOC]
+ - signature: "ACT+CAUS+R17|mempendasi"
+ gloss: parse
+ rules: [mrACT, mrCAUS]
+ - word: gusii
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R19+LOC|gusii"
+ gloss: parse
+ rules: [mrLOC]
+ - word: mekgaku
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R07|mekgaku"
+ gloss: parse
+ rules: [mrACT]
+ - word: pemempaba
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+ACT+R00|pemempaba"
+ gloss: parse
+ rules: [mrCAUS, mrACT]
+ - word: pemekkuga
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CAUS+ACT+R08|pemekkuga"
+ gloss: parse
+ rules: [mrCAUS, mrACT]
+ - word: meapii
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R10+LOC|meapii"
+ gloss: parse
+ rules: [mrACT, mrLOC]
+ - signature: "ACT+R10+LOC|meapii"
+ gloss: parse
+ rules: [mrLOC, mrACT]
+ - word: mempipai
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R15+LOC|mempipai"
+ gloss: parse
+ rules: [mrACT, mrLOC]
+ - signature: "ACT+R15+LOC|mempipai"
+ gloss: parse
+ rules: [mrLOC, mrACT]
+ - word: mekgakui
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "ACT+R07+LOC|mekgakui"
+ gloss: parse
+ rules: [mrACT, mrLOC]
+ - signature: "ACT+R07+LOC|mekgakui"
+ gloss: parse
+ rules: [mrLOC, mrACT]
+ - word: pekdusa
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: mepekadu
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: mekdasi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: pemmentadi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: pekmeapi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: mekpemkigu
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: penmengusi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: mempekbupi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/env-bantu-concord/grammar.xml b/conformance-stress/edge-cases/env-bantu-concord/grammar.xml
new file mode 100644
index 000000000..a86c4c28b
--- /dev/null
+++ b/conformance-stress/edge-cases/env-bantu-concord/grammar.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+ BantuConcordAllomorphy
+ x
+ idaeioupbtdkgmns
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ p
+ b
+ t
+ d
+ k
+ g
+ m
+ n
+ s
+
+
+
+ Any
+ Lab
+ Cor
+ Vel
+ Nas
+ V
+ VA
+ VB
+
+
+
+ Main
+
+ concordmnkuaCONC
+ negationttiNEG
+ tenseninasiTAM
+
+
+ papaR00root0
+ bipuR01root1
+ pubiR02root2
+ bapiR03root3
+ tadaR04root4
+ diduR05root5
+ tudaR06root6
+ kakiR07root7
+ guguR08root8
+ kagiR09root9
+ mamaR10root10
+ ninaR11root11
+ mumiR12root12
+ apaR13root13
+ ibuR14root14
+ ukiR15root15
+ atuR16root16
+ ekiR17root17
+ oduR18root18
+ esaR19root19
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/env-bantu-concord/words.yaml b/conformance-stress/edge-cases/env-bantu-concord/words.yaml
new file mode 100644
index 000000000..439716b2c
--- /dev/null
+++ b/conformance-stress/edge-cases/env-bantu-concord/words.yaml
@@ -0,0 +1,298 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: BantuConcordAllomorphy
+inspired_by: ["Synthetic Bantu-style noun-class concord and tense allomorphy (not modeling one real language): a concord prefix with four place-conditioned allomorphs plus a fallback, a negative prefix, and a tense suffix with a zero allomorph; conditioned allomorphs precede the fallback so synthesis tries them."]
+sources: []
+requires: []
+# Stress fixture for the required-environment prefilter. Expected parses follow the allomorph and disjunction
+# rules by hand; the zero allomorphs' environments are read at an engine-defined position, so words with a
+# zero-allomorph parse take the engine's verdict with the prefilter switched off.
+budget_ms: 60000
+words:
+ - word: papa
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ exercises:
+ - "AffixProcessRule: prefix/suffix/circumfix/infix"
+ parses:
+ - signature: "R00|papa"
+ gloss: parse
+ rules: []
+ - word: bipu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R01|bipu"
+ gloss: parse
+ rules: []
+ - word: pubi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R02|pubi"
+ gloss: parse
+ rules: []
+ - word: bapi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R03|bapi"
+ gloss: parse
+ rules: []
+ - word: tada
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R04|tada"
+ gloss: parse
+ rules: []
+ - word: didu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R05|didu"
+ gloss: parse
+ rules: []
+ - word: tuda
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R06|tuda"
+ gloss: parse
+ rules: []
+ - word: kaki
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R07|kaki"
+ gloss: parse
+ rules: []
+ - word: gugu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R08|gugu"
+ gloss: parse
+ rules: []
+ - word: kagi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R09|kagi"
+ gloss: parse
+ rules: []
+ - word: mama
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R10|mama"
+ gloss: parse
+ rules: []
+ - signature: "R10+TAM|mama"
+ gloss: parse
+ rules: [mrTAM]
+ - word: nina
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R11|nina"
+ gloss: parse
+ rules: []
+ - signature: "R11+TAM|nina"
+ gloss: parse
+ rules: [mrTAM]
+ - word: mumi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R12|mumi"
+ gloss: parse
+ rules: []
+ - signature: "R12+TAM|mumi"
+ gloss: parse
+ rules: [mrTAM]
+ - word: apa
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R13|apa"
+ gloss: parse
+ rules: []
+ - word: tauki
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+CONC+R15|tauki"
+ gloss: parse
+ rules: [mrNEG, mrCONC]
+ - word: mpubi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+R02|mpubi"
+ gloss: parse
+ rules: [mrCONC]
+ - word: tikugugu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+CONC+R08|tikugugu"
+ gloss: parse
+ rules: [mrNEG, mrCONC]
+ - word: apani
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R13+TAM|apani"
+ gloss: parse
+ rules: [mrTAM]
+ - word: diduna
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R05+TAM|diduna"
+ gloss: parse
+ rules: [mrTAM]
+ - word: kakina
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R07+TAM|kakina"
+ gloss: parse
+ rules: [mrTAM]
+ - word: tididu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+R05|tididu"
+ gloss: parse
+ rules: [mrNEG]
+ - word: auki
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+R15|auki"
+ gloss: parse
+ rules: [mrCONC]
+ - word: tukina
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+R15+TAM|tukina"
+ gloss: parse
+ rules: [mrNEG, mrTAM]
+ - signature: "NEG+R15+TAM|tukina"
+ gloss: parse
+ rules: [mrTAM, mrNEG]
+ - word: ntigugu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+NEG+R08|ntigugu"
+ gloss: parse
+ rules: [mrCONC, mrNEG]
+ - signature: "CONC+TAM+NEG+R08|ntigugu"
+ gloss: parse
+ rules: [mrCONC, mrNEG, mrTAM]
+ - word: aibuna
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+R14+TAM|aibuna"
+ gloss: parse
+ rules: [mrCONC, mrTAM]
+ - signature: "CONC+R14+TAM|aibuna"
+ gloss: parse
+ rules: [mrTAM, mrCONC]
+ - word: ibuna
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R14+TAM|ibuna"
+ gloss: parse
+ rules: [mrTAM]
+ - word: timumina
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+NEG+R12+TAM|timumina"
+ gloss: parse
+ rules: [mrNEG, mrCONC, mrTAM]
+ - signature: "CONC+NEG+R12+TAM|timumina"
+ gloss: parse
+ rules: [mrTAM, mrNEG, mrCONC]
+ - signature: "NEG+R12+TAM|timumina"
+ gloss: parse
+ rules: [mrNEG, mrTAM]
+ - signature: "NEG+R12+TAM|timumina"
+ gloss: parse
+ rules: [mrTAM, mrNEG]
+ - word: timbipu
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+CONC+R01|timbipu"
+ gloss: parse
+ rules: [mrNEG, mrCONC]
+ - word: bipuna
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R01+TAM|bipuna"
+ gloss: parse
+ rules: [mrTAM]
+ - word: ntipubi
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "CONC+NEG+R02|ntipubi"
+ gloss: parse
+ rules: [mrCONC, mrNEG]
+ - signature: "CONC+TAM+NEG+R02|ntipubi"
+ gloss: parse
+ rules: [mrCONC, mrNEG, mrTAM]
+ - word: kagina
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "R09+TAM|kagina"
+ gloss: parse
+ rules: [mrTAM]
+ - word: timpapa
+ note: >-
+ Parse by allomorph selection: each prefix allomorph is chosen by the segment that follows it, the suffix by the segment before it, and an earlier conditioned allomorph whose context holds blocks the fallback.
+ parses:
+ - signature: "NEG+CONC+R00|timpapa"
+ gloss: parse
+ rules: [mrNEG, mrCONC]
+ - word: atadani
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: timkagi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: kakini
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: kutodu
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: tkumumi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: tkukagi
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: tingugu
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
+ - word: atatu
+ note: >-
+ Rejection: no allomorph choice satisfies every Required environment and disjunctive block for this surface.
+ expect_fail: true
diff --git a/conformance-stress/edge-cases/env-zero-allomorphs/grammar.xml b/conformance-stress/edge-cases/env-zero-allomorphs/grammar.xml
new file mode 100644
index 000000000..d7b0d6f70
--- /dev/null
+++ b/conformance-stress/edge-cases/env-zero-allomorphs/grammar.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ StressEnvZeroAllomorphs
+ x
+
+ idaiupbtkdgsmn
+
+
+ Main
+
+ a
+ i
+ u
+ p
+ b
+ t
+ k
+ d
+ g
+ s
+ m
+ n
+
+
+
+ Any
+ Nas
+ Sib
+
+
+
+ Main
+
+classPrefixkukaP1
+personPrefixtiP2
+suffixpapiS1
+
+
+ batuR00root0
+ kidaR01root1
+ gupiR02root2
+ tabiR03root3
+ dupaR04root4
+ kipaR05root5
+ gitaR06root6
+ bidaR07root7
+ pudiR08root8
+ kabuR09root9
+ tukaR10root10
+ gabiR11root11
+ dikaR12root12
+ paguR13root13
+ bukitR14root14
+ mapuR15root15
+ kanuR16root16
+ tabunR17root17
+ gisamR18root18
+ pikasR19root19
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/env-zero-allomorphs/words.yaml b/conformance-stress/edge-cases/env-zero-allomorphs/words.yaml
new file mode 100644
index 000000000..afcc56fc2
--- /dev/null
+++ b/conformance-stress/edge-cases/env-zero-allomorphs/words.yaml
@@ -0,0 +1,317 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressEnvZeroAllomorphs
+inspired_by: ["synthetic Bantu/Austronesian zero-allomorph prefix and suffix probe (not modeling any real language)"]
+sources: []
+requires: []
+# Research stress fixture for the required-environment prefilter, not registered in the conformance ledgers.
+# The zero allomorphs (indexes 0) carry a Required left environment on a rare segment class and are placed
+# first so synthesis tries them; no word here validates them.
+budget_ms: 60000
+words:
+ - word: batu
+ note: >-
+ Bare root batu; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ exercises:
+ - "AffixProcessRule: prefix/suffix/circumfix/infix"
+ parses:
+ - signature: "R00|batu"
+ gloss: R00
+ rules: []
+ - word: kida
+ note: >-
+ Bare root kida; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R01|kida"
+ gloss: R01
+ rules: []
+ - word: gupi
+ note: >-
+ Bare root gupi; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R02|gupi"
+ gloss: R02
+ rules: []
+ - word: tabi
+ note: >-
+ Bare root tabi; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R03|tabi"
+ gloss: R03
+ rules: []
+ - word: dupa
+ note: >-
+ Bare root dupa; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R04|dupa"
+ gloss: R04
+ rules: []
+ - word: kipa
+ note: >-
+ Bare root kipa; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R05|kipa"
+ gloss: R05
+ rules: []
+ - word: gita
+ note: >-
+ Bare root gita; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R06|gita"
+ gloss: R06
+ rules: []
+ - word: bida
+ note: >-
+ Bare root bida; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R07|bida"
+ gloss: R07
+ rules: []
+ - word: pudi
+ note: >-
+ Bare root pudi; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R08|pudi"
+ gloss: R08
+ rules: []
+ - word: kabu
+ note: >-
+ Bare root kabu; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R09|kabu"
+ gloss: R09
+ rules: []
+ - word: tuka
+ note: >-
+ Bare root tuka; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R10|tuka"
+ gloss: R10
+ rules: []
+ - word: gabi
+ note: >-
+ Bare root gabi; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R11|gabi"
+ gloss: R11
+ rules: []
+ - word: kukida
+ note: >-
+ Hand derivation: root R01 'kida' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R01|kukida"
+ gloss: R01
+ rules: [mrP1]
+ - word: kagupi
+ note: >-
+ Hand derivation: root R02 'gupi' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R02|kagupi"
+ gloss: R02
+ rules: [mrP1]
+ - word: titabi
+ note: >-
+ Hand derivation: root R03 'tabi' with prefixes P2 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+R03|titabi"
+ gloss: R03
+ rules: [mrP2]
+ - word: dupapa
+ note: >-
+ Hand derivation: root R04 'dupa' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R04+S1|dupapa"
+ gloss: R04
+ rules: [mrS1]
+ - word: kipapi
+ note: >-
+ Hand derivation: root R05 'kipa' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R05+S1|kipapi"
+ gloss: R05
+ rules: [mrS1]
+ - word: kugitapa
+ note: >-
+ Hand derivation: root R06 'gita' with prefixes P1 applied inner to outer and suffix S1; 2 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R06+S1|kugitapa"
+ gloss: R06
+ rules: [mrS1, mrP1]
+ - signature: "P1+R06+S1|kugitapa"
+ gloss: R06
+ rules: [mrP1, mrS1]
+ - word: tibidapi
+ note: >-
+ Hand derivation: root R07 'bida' with prefixes P2 applied inner to outer and suffix S1; 2 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+R07+S1|tibidapi"
+ gloss: R07
+ rules: [mrS1, mrP2]
+ - signature: "P2+R07+S1|tibidapi"
+ gloss: R07
+ rules: [mrP2, mrS1]
+ - word: katipudi
+ note: >-
+ Hand derivation: root R08 'pudi' with prefixes P2+P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+P2+R08|katipudi"
+ gloss: R08
+ rules: [mrP2, mrP1]
+ - word: tikukabupa
+ note: >-
+ Hand derivation: root R09 'kabu' with prefixes P1+P2 applied inner to outer and suffix S1; 3 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+P1+R09+S1|tikukabupa"
+ gloss: R09
+ rules: [mrS1, mrP1, mrP2]
+ - signature: "P2+P1+R09+S1|tikukabupa"
+ gloss: R09
+ rules: [mrP1, mrS1, mrP2]
+ - signature: "P2+P1+R09+S1|tikukabupa"
+ gloss: R09
+ rules: [mrP1, mrP2, mrS1]
+ - word: mapu
+ note: >-
+ Bare root mapu; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R15|mapu"
+ gloss: R15
+ rules: []
+ - word: kanu
+ note: >-
+ Bare root kanu; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R16|kanu"
+ gloss: R16
+ rules: []
+ - signature: "R16+P1|kanu"
+ gloss: R16
+ rules: [mrP1]
+ - signature: "R16+S1|kanu"
+ gloss: R16
+ rules: [mrS1]
+ - word: tabun
+ note: >-
+ Bare root tabun; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R17|tabun"
+ gloss: R17
+ rules: []
+ - word: gisam
+ note: >-
+ Bare root gisam; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R18|gisam"
+ gloss: R18
+ rules: []
+ - word: pikas
+ note: >-
+ Bare root pikas; every affix is optional, and no zero allomorph's rare-class context is satisfied.
+ parses:
+ - signature: "R19|pikas"
+ gloss: R19
+ rules: []
+ - word: kumapu
+ note: >-
+ Hand derivation: root R15 'mapu' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R15|kumapu"
+ gloss: R15
+ rules: [mrP1]
+ - word: mapupa
+ note: >-
+ Hand derivation: root R15 'mapu' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R15+S1|mapupa"
+ gloss: R15
+ rules: [mrS1]
+ - word: kanupi
+ note: >-
+ Hand derivation: root R16 'kanu' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R16+S1|kanupi"
+ gloss: R16
+ rules: [mrS1]
+ - word: kukanupa
+ note: >-
+ Hand derivation: root R16 'kanu' with prefixes P1 applied inner to outer and suffix S1; 2 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R16+S1|kukanupa"
+ gloss: R16
+ rules: [mrS1, mrP1]
+ - signature: "P1+R16+S1|kukanupa"
+ gloss: R16
+ rules: [mrP1, mrS1]
+ - word: tipikas
+ note: >-
+ Hand derivation: root R19 'pikas' with prefixes P2 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+R19|tipikas"
+ gloss: R19
+ rules: [mrP2]
+ - word: katabun
+ note: >-
+ Hand derivation: root R17 'tabun' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R17|katabun"
+ gloss: R17
+ rules: [mrP1]
+ - word: tigisampa
+ note: >-
+ Discriminating rejection: the suffix pa follows m, so the zero allomorph S1z (Required left environment on nasals) holds there, and the earlier, more specific zero allomorph disjunctively blocks the overt pa. The zero allomorph cannot itself produce this surface.
+ expect_fail: true
+ blocked_by: [mrS1]
+ - word: kadika
+ note: >-
+ Hand derivation: root R12 'dika' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R12|kadika"
+ gloss: R12
+ rules: [mrP1]
+ - word: tipagupa
+ note: >-
+ Hand derivation: root R13 'pagu' with prefixes P2 applied inner to outer and suffix S1; 2 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+R13+S1|tipagupa"
+ gloss: R13
+ rules: [mrS1, mrP2]
+ - signature: "P2+R13+S1|tipagupa"
+ gloss: R13
+ rules: [mrP2, mrS1]
+ - word: bukitpi
+ note: >-
+ Hand derivation: root R14 'bukit' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R14+S1|bukitpi"
+ gloss: R14
+ rules: [mrS1]
+ - word: kupagu
+ note: >-
+ Hand derivation: root R13 'pagu' with prefixes P1 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R13|kupagu"
+ gloss: R13
+ rules: [mrP1]
+ - word: tibatu
+ note: >-
+ Hand derivation: root R00 'batu' with prefixes P2 applied inner to outer; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P2+R00|tibatu"
+ gloss: R00
+ rules: [mrP2]
+ - word: gupipa
+ note: >-
+ Hand derivation: root R02 'gupi' and suffix S1; 1 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "R02+S1|gupipa"
+ gloss: R02
+ rules: [mrS1]
+ - word: katukapi
+ note: >-
+ Hand derivation: root R10 'tuka' with prefixes P1 applied inner to outer and suffix S1; 2 rule orders are possible because the unordered suffix may be applied between or after the prefixes.
+ parses:
+ - signature: "P1+R10+S1|katukapi"
+ gloss: R10
+ rules: [mrS1, mrP1]
+ - signature: "P1+R10+S1|katukapi"
+ gloss: R10
+ rules: [mrP1, mrS1]
diff --git a/conformance-stress/edge-cases/excluded-cooccurrence/grammar.xml b/conformance-stress/edge-cases/excluded-cooccurrence/grammar.xml
new file mode 100644
index 000000000..355bb69c4
--- /dev/null
+++ b/conformance-stress/edge-cases/excluded-cooccurrence/grammar.xml
@@ -0,0 +1,368 @@
+
+
+
+
+ StressExcludedCoOccurrence
+
+
+ v
+
+
+ Main
+
+ p
+ t
+ k
+ m
+ n
+ s
+ a
+ i
+ u
+
+
+
+ Any
+
+
+
+ Main
+
+
+ s1a
+
+
+
+ a
+
+
+ S1a
+
+
+ s1b
+
+
+
+ ma
+
+
+ S1b
+
+
+ s1c
+
+
+
+ ni
+
+
+ S1c
+
+
+ s1d
+
+
+
+ ku
+
+
+ S1d
+
+
+ s2a
+
+
+
+ i
+
+
+ S2a
+
+
+ s2b
+
+
+
+ ta
+
+
+ S2b
+
+
+ s2c
+
+
+
+ ma
+
+
+ S2c
+
+
+ s2d
+
+
+
+ su
+
+
+ S2d
+
+
+ s3a
+
+
+
+ u
+
+
+ S3a
+
+
+ s3b
+
+
+
+ na
+
+
+ S3b
+
+
+ s3c
+
+
+
+ ka
+
+
+ S3c
+
+
+ s3d
+
+
+
+ ti
+
+
+ S3d
+
+
+ s4a
+
+
+
+ a
+
+
+ S4a
+
+
+ s4b
+
+
+
+ pa
+
+
+ S4b
+
+
+ s4c
+
+
+
+ mi
+
+
+ S4c
+
+
+ s4d
+
+
+
+ si
+
+
+ S4d
+
+
+ s5a
+
+
+
+ i
+
+
+ S5a
+
+
+ s5b
+
+
+
+ ka
+
+
+ S5b
+
+
+ s5c
+
+
+
+ nu
+
+
+ S5c
+
+
+ s5d
+
+
+
+ ta
+
+
+ S5d
+
+
+ s6a
+
+
+
+ u
+
+
+ S6a
+
+
+ s6b
+
+
+
+ sa
+
+
+ S6b
+
+
+ s6c
+
+
+
+ pi
+
+
+ S6c
+
+
+ s6d
+
+
+
+
+
+
+ S6d
+
+
+
+
+ verbPrefixes
+
+ slot1
+
+
+ slot2
+
+
+ slot3
+
+
+ slot4
+
+
+ slot5
+
+
+ slot6
+
+
+
+
+
+ kat
+ R1
+
+
+ mis
+ R2
+
+
+ nup
+ R3
+
+
+ tas
+ R4
+
+
+ pum
+ R5
+
+
+ sik
+ R6
+
+
+ kam
+ R7
+
+
+ nit
+ R8
+
+
+ tup
+ R9
+
+
+ mas
+ R10
+
+
+ sin
+ R11
+
+
+ pat
+ R12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/excluded-cooccurrence/words.yaml b/conformance-stress/edge-cases/excluded-cooccurrence/words.yaml
new file mode 100644
index 000000000..68c1eb99e
--- /dev/null
+++ b/conformance-stress/edge-cases/excluded-cooccurrence/words.yaml
@@ -0,0 +1,419 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# Stress fixture for excluded co-occurrence pruning. Generated by gen_excluded_cooccurrence.py; the
+# expected parses come from that script's independent enumeration of slot choices, and were confirmed
+# against the engine with Morpher.PruneExcludedCoOccurrence off.
+language: StressExcludedCoOccurrence
+inspired_by: ["synthetic prefix-complex stress probe (not modeling any real language)"]
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: "tikunup"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S3d+S1d+R3+S6d|tikunup"
+ rules: [mrS6d, mrS3d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3d+S1d+R3|tikunup"
+ rules: [mrS3d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pikukat"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S1d+R1|pikukat"
+ rules: [mrS6c, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pinunup"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S5c+R3|pinunup"
+ rules: [mrS6c, mrS5c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "piminatanisin"
+ note: >-
+ 1 segmentations; 0 survive the exclude rules.
+ expect_fail: true
+ blocked_by: [mrS3b, mrS4c]
+ - word: "kanatakupum"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5b+S3b+S2b+S1d+R5+S6d|kanatakupum"
+ rules: [mrS6d, mrS5b, mrS3b, mrS2b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S3b+S2b+S1d+R5|kanatakupum"
+ rules: [mrS5b, mrS3b, mrS2b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nuumas"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5c+S3a+R10+S6d|nuumas"
+ rules: [mrS6d, mrS5c, mrS3a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S3a+R10|nuumas"
+ rules: [mrS5c, mrS3a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tasikasunup"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S4d+S3c+S2d+R3+S6d|tasikasunup"
+ rules: [mrS6d, mrS5d, mrS4d, mrS3c, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4d+S3c+S2d+R3|tasikasunup"
+ rules: [mrS5d, mrS4d, mrS3c, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "uukat"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6a+S3a+R1|uukat"
+ rules: [mrS6a, mrS3a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "sapakamis"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6b+S4b+S3c+R2|sapakamis"
+ rules: [mrS6b, mrS4b, mrS3c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "sikatapat"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S4d+S3c+S2b+R12+S6d|sikatapat"
+ rules: [mrS6d, mrS4d, mrS3c, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4d+S3c+S2b+R12|sikatapat"
+ rules: [mrS4d, mrS3c, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nupauimas"
+ note: >-
+ 2 segmentations; 0 survive the exclude rules.
+ expect_fail: true
+ blocked_by: [mrS2a, mrS4b]
+ - word: "iusunisik"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5a+S3a+S2d+S1c+R6+S6d|iusunisik"
+ rules: [mrS6d, mrS5a, mrS3a, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S3a+S2d+S1c+R6|iusunisik"
+ rules: [mrS5a, mrS3a, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "sanukanisin"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6b+S5c+S3c+S1c+R11|sanukanisin"
+ rules: [mrS6b, mrS5c, mrS3c, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nutimanup"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S5c+S3d+S1b+R3+S6d|nutimanup"
+ rules: [mrS6d, mrS5c, mrS3d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S3d+S1b+R3|nutimanup"
+ rules: [mrS5c, mrS3d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S3d+S2c+R3+S6d|nutimanup"
+ rules: [mrS6d, mrS5c, mrS3d, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S3d+S2c+R3|nutimanup"
+ rules: [mrS5c, mrS3d, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nuamakat"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S5c+S4a+S1b+R1+S6d|nuamakat"
+ rules: [mrS6d, mrS5c, mrS4a, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S1b+R1|nuamakat"
+ rules: [mrS5c, mrS4a, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S2c+R1+S6d|nuamakat"
+ rules: [mrS6d, mrS5c, mrS4a, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S2c+R1|nuamakat"
+ rules: [mrS5c, mrS4a, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "taumatas"
+ note: >-
+ 4 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S3a+S2c+R4+S6d|taumatas"
+ rules: [mrS6d, mrS5d, mrS3a, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S3a+S2c+R4|taumatas"
+ rules: [mrS5d, mrS3a, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kaiamas"
+ note: >-
+ 4 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S3c+S2a+S1a+R10|kaiamas"
+ rules: [mrS3c, mrS2a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S2a+S1a+R10|kaiamas"
+ rules: [mrS5b, mrS2a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "ikatakumis"
+ note: >-
+ 2 segmentations; 0 survive the exclude rules.
+ expect_fail: true
+ blocked_by: [mrS2b, mrS5a]
+ - word: "tapanakunit"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S4b+S3b+S1d+R8+S6d|tapanakunit"
+ rules: [mrS6d, mrS5d, mrS4b, mrS3b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S4b+S3b+S1d+R8|tapanakunit"
+ rules: [mrS5d, mrS4b, mrS3b, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pasusin"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S4b+S2d+R11+S6d|pasusin"
+ rules: [mrS6d, mrS4b, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S2d+R11|pasusin"
+ rules: [mrS4b, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "piaipum"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S4a+S2a+R5|piaipum"
+ rules: [mrS6c, mrS4a, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "tatapum"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5d+S2b+R5+S6d|tatapum"
+ rules: [mrS6d, mrS5d, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5d+S2b+R5|tatapum"
+ rules: [mrS5d, mrS2b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "unimas"
+ note: >-
+ 3 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "S3a+S1c+R10+S6d|unimas"
+ rules: [mrS6d, mrS3a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3a+S1c+R10|unimas"
+ rules: [mrS3a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S1c+R10|unimas"
+ rules: [mrS6a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "akutas"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S4a+S1d+R4+S6d|akutas"
+ rules: [mrS6d, mrS4a, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4a+S1d+R4|akutas"
+ rules: [mrS4a, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pinupatimakam"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S6c+S5c+S4b+S3d+S1b+R7|pinupatimakam"
+ rules: [mrS6c, mrS5c, mrS4b, mrS3d, mrS1b]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S5c+S4b+S3d+S2c+R7|pinupatimakam"
+ rules: [mrS6c, mrS5c, mrS4b, mrS3d, mrS2c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nasuapum"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S3b+S2d+S1a+R5|nasuapum"
+ rules: [mrS3b, mrS2d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "patisukukat"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S4b+S3d+S2d+S1d+R1+S6d|patisukukat"
+ rules: [mrS6d, mrS4b, mrS3d, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4b+S3d+S2d+S1d+R1|patisukukat"
+ rules: [mrS4b, mrS3d, mrS2d, mrS1d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "inikam"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S2a+S1c+R7+S6d|inikam"
+ rules: [mrS6d, mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S2a+S1c+R7|inikam"
+ rules: [mrS2a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S1c+R7+S6d|inikam"
+ rules: [mrS6d, mrS5a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5a+S1c+R7|inikam"
+ rules: [mrS5a, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "uatisunikat"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6a+S4a+S3d+S2d+S1c+R1|uatisunikat"
+ rules: [mrS6a, mrS4a, mrS3d, mrS2d, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nuananimis"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5c+S4a+S3b+S1c+R2+S6d|nuananimis"
+ rules: [mrS6d, mrS5c, mrS4a, mrS3b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4a+S3b+S1c+R2|nuananimis"
+ rules: [mrS5c, mrS4a, mrS3b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pikatisuakam"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S5b+S3d+S2d+S1a+R7|pikatisuakam"
+ rules: [mrS6c, mrS5b, mrS3d, mrS2d, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "uamis"
+ note: >-
+ 4 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "S3a+S1a+R2|uamis"
+ rules: [mrS3a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S1a+R2|uamis"
+ rules: [mrS6a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4a+R2|uamis"
+ rules: [mrS6a, mrS4a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nupausunit"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5c+S4b+S3a+S2d+R8+S6d|nupausunit"
+ rules: [mrS6d, mrS5c, mrS4b, mrS3a, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5c+S4b+S3a+S2d+R8|nupausunit"
+ rules: [mrS5c, mrS4b, mrS3a, mrS2d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "katanipat"
+ note: >-
+ 4 segmentations; 4 survive the exclude rules.
+ parses:
+ - signature: "S3c+S2b+S1c+R12+S6d|katanipat"
+ rules: [mrS6d, mrS3c, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S3c+S2b+S1c+R12|katanipat"
+ rules: [mrS3c, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S2b+S1c+R12+S6d|katanipat"
+ rules: [mrS6d, mrS5b, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S2b+S1c+R12|katanipat"
+ rules: [mrS5b, mrS2b, mrS1c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "mikatup"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S4c+S3c+R9+S6d|mikatup"
+ rules: [mrS6d, mrS4c, mrS3c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S4c+S3c+R9|mikatup"
+ rules: [mrS4c, mrS3c]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "piimis"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S6c+S2a+R2|piimis"
+ rules: [mrS6c, mrS2a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6c+S5a+R2|piimis"
+ rules: [mrS6c, mrS5a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "nusinaasik"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5c+S4d+S3b+S1a+R6|nusinaasik"
+ rules: [mrS5c, mrS4d, mrS3b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "maatup"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S2c+S1a+R9|maatup"
+ rules: [mrS2c, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kasitipum"
+ note: >-
+ 2 segmentations; 2 survive the exclude rules.
+ parses:
+ - signature: "S5b+S4d+S3d+R5+S6d|kasitipum"
+ rules: [mrS6d, mrS5b, mrS4d, mrS3d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S5b+S4d+S3d+R5|kasitipum"
+ rules: [mrS5b, mrS4d, mrS3d]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "pinunataatas"
+ note: >-
+ 1 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S6c+S5c+S3b+S2b+S1a+R4|pinunataatas"
+ rules: [mrS6c, mrS5c, mrS3b, mrS2b, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "numinakusik"
+ note: >-
+ 2 segmentations; 0 survive the exclude rules.
+ expect_fail: true
+ blocked_by: [mrS3b, mrS4c]
+ - word: "uasik"
+ note: >-
+ 4 segmentations; 3 survive the exclude rules.
+ parses:
+ - signature: "S3a+S1a+R6|uasik"
+ rules: [mrS3a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S1a+R6|uasik"
+ rules: [mrS6a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - signature: "S6a+S4a+R6|uasik"
+ rules: [mrS6a, mrS4a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "kasinaiamas"
+ note: >-
+ 2 segmentations; 1 survive the exclude rules.
+ parses:
+ - signature: "S5b+S4d+S3b+S2a+S1a+R10|kasinaiamas"
+ rules: [mrS5b, mrS4d, mrS3b, mrS2a, mrS1a]
+ exercises: ["Morpheme co-occurrence rules"]
+ - word: "sanuminakupat"
+ note: >-
+ 1 segmentations; 0 survive the exclude rules.
+ expect_fail: true
+ blocked_by: [mrS3b, mrS4c]
diff --git a/conformance-stress/edge-cases/mpr-bantu-concord/grammar.xml b/conformance-stress/edge-cases/mpr-bantu-concord/grammar.xml
new file mode 100644
index 000000000..94d45745f
--- /dev/null
+++ b/conformance-stress/edge-cases/mpr-bantu-concord/grammar.xml
@@ -0,0 +1,208 @@
+
+
+
+
+ StressMprBantuConcord
+ v
+
+ Class1
+ Class2
+ Class3
+ Class4
+ Class5
+ Class6
+ NounClass
+
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ l
+ m
+ n
+ r
+ s
+ t
+ k
+ p
+ d
+
+
+ Any
+
+
+ S
+
+
+ sm
+
+
+
+ a
+
+
+
+ u
+
+
+
+ i
+
+
+
+ a
+
+
+
+ u
+
+
+
+ i
+
+
+ SM
+
+
+ om
+
+
+
+ u
+
+
+
+ a
+
+
+
+ i
+
+
+
+ i
+
+
+
+ a
+
+
+
+ u
+
+
+
+ ka
+
+
+ OM
+
+
+ fv
+
+
+
+ a
+
+
+
+ i
+
+
+
+ a
+
+
+
+ i
+
+
+
+ a
+
+
+
+ i
+
+
+ FV
+
+
+
+
+ verbTemplate
+ smSlot
+ omSlot
+ fvSlot
+
+
+
+
+ tum
+ V_tum
+ tum
+
+
+ lim
+ V_lim
+ lim
+
+
+ tuma
+ V_tuma
+ tuma
+
+
+ lima
+ V_lima
+ lima
+
+
+ kal
+ V_kal
+ kal
+
+
+ pak
+ V_pak
+ pak
+
+
+ kala
+ V_kala
+ kala
+
+
+ paka
+ V_paka
+ paka
+
+
+ dum
+ V_dum
+ dum
+
+
+ mal
+ V_mal
+ mal
+
+
+ duma
+ V_duma
+ duma
+
+
+ mala
+ V_mala
+ mala
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/mpr-bantu-concord/words.yaml b/conformance-stress/edge-cases/mpr-bantu-concord/words.yaml
new file mode 100644
index 000000000..d75db7c58
--- /dev/null
+++ b/conformance-stress/edge-cases/mpr-bantu-concord/words.yaml
@@ -0,0 +1,138 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# Stress fixture for trail MPR replay, Bantu style: six noun-class features in one MPR group gate three
+# agreement slots (subject concord, object concord, final vowel), each with one allomorph per class and
+# homophonous shapes across classes. The object concord has one allomorph gated by excludedMPRFeatures.
+# Expected parses were derived by hand from the concord tables in grammar.xml and confirmed against the engine.
+language: StressMprBantuConcord
+inspired_by: ["Bantu noun-class agreement (Swahili, Shona style); synthetic, not modeling a real language"]
+sources:
+ - "research stress fixture; no external source"
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 15000
+words:
+ - word: atuma
+ note: "atuma"
+ parses:
+ - signature: "SM+V_tum+FV|atuma"
+ rules: [mrFv, mrSm]
+ - word: autuma
+ note: "autuma"
+ parses:
+ - signature: "SM+OM+V_tum+FV|autuma"
+ rules: [mrFv, mrOm, mrSm]
+ - word: alima
+ note: "alima"
+ parses:
+ - signature: "SM+V_lim+FV|alima"
+ rules: [mrFv, mrSm]
+ - word: aulima
+ note: "aulima"
+ parses:
+ - signature: "SM+OM+V_lim+FV|aulima"
+ rules: [mrFv, mrOm, mrSm]
+ - word: utumai
+ note: "utumai"
+ parses:
+ - signature: "SM+V_tuma+FV|utumai"
+ rules: [mrFv, mrSm]
+ - word: uatumai
+ note: "uatumai"
+ parses:
+ - signature: "SM+OM+V_tuma+FV|uatumai"
+ rules: [mrFv, mrOm, mrSm]
+ - word: ulimai
+ note: "ulimai"
+ parses:
+ - signature: "SM+V_lima+FV|ulimai"
+ rules: [mrFv, mrSm]
+ - word: ualimai
+ note: "ualimai"
+ parses:
+ - signature: "SM+OM+V_lima+FV|ualimai"
+ rules: [mrFv, mrOm, mrSm]
+ - word: ikala
+ note: "ikala"
+ parses:
+ - signature: "SM+V_kal+FV|ikala"
+ rules: [mrFv, mrSm]
+ - word: iikala
+ note: "iikala"
+ parses:
+ - signature: "OM+SM+V_kal+FV|iikala"
+ rules: [mrFv, mrOm, mrSm]
+ - signature: "SM+OM+V_kal+FV|iikala"
+ rules: [mrFv, mrOm, mrSm]
+ - word: ipaka
+ note: "ipaka"
+ parses:
+ - signature: "SM+V_pak+FV|ipaka"
+ rules: [mrFv, mrSm]
+ - word: iipaka
+ note: "iipaka"
+ parses:
+ - signature: "OM+SM+V_pak+FV|iipaka"
+ rules: [mrFv, mrOm, mrSm]
+ - signature: "SM+OM+V_pak+FV|iipaka"
+ rules: [mrFv, mrOm, mrSm]
+ - word: akalai
+ note: "akalai"
+ parses:
+ - signature: "SM+V_kala+FV|akalai"
+ rules: [mrFv, mrSm]
+ - word: aikalai
+ note: "aikalai"
+ parses:
+ - signature: "SM+OM+V_kala+FV|aikalai"
+ rules: [mrFv, mrOm, mrSm]
+ - word: apakai
+ note: "apakai"
+ parses:
+ - signature: "SM+V_paka+FV|apakai"
+ rules: [mrFv, mrSm]
+ - word: aipakai
+ note: "aipakai"
+ parses:
+ - signature: "SM+OM+V_paka+FV|aipakai"
+ rules: [mrFv, mrOm, mrSm]
+ - word: uduma
+ note: "uduma"
+ parses:
+ - signature: "SM+V_dum+FV|uduma"
+ rules: [mrFv, mrSm]
+ - word: uaduma
+ note: "uaduma"
+ parses:
+ - signature: "SM+OM+V_dum+FV|uaduma"
+ rules: [mrFv, mrOm, mrSm]
+ - word: umala
+ note: "umala"
+ parses:
+ - signature: "SM+V_mal+FV|umala"
+ rules: [mrFv, mrSm]
+ - word: uamala
+ note: "uamala"
+ parses:
+ - signature: "SM+OM+V_mal+FV|uamala"
+ rules: [mrFv, mrOm, mrSm]
+ - word: idumai
+ note: "idumai"
+ parses:
+ - signature: "SM+V_duma+FV|idumai"
+ rules: [mrFv, mrSm]
+ - word: iudumai
+ note: "iudumai"
+ parses:
+ - signature: "SM+OM+V_duma+FV|iudumai"
+ rules: [mrFv, mrOm, mrSm]
+ - word: imalai
+ note: "imalai"
+ parses:
+ - signature: "SM+V_mala+FV|imalai"
+ rules: [mrFv, mrSm]
+ - word: iumalai
+ note: "iumalai"
+ parses:
+ - signature: "SM+OM+V_mala+FV|iumalai"
+ rules: [mrFv, mrOm, mrSm]
diff --git a/conformance-stress/edge-cases/mpr-inflection-classes/grammar.xml b/conformance-stress/edge-cases/mpr-inflection-classes/grammar.xml
new file mode 100644
index 000000000..128904854
--- /dev/null
+++ b/conformance-stress/edge-cases/mpr-inflection-classes/grammar.xml
@@ -0,0 +1,294 @@
+
+
+
+
+ StressMprInflectionClasses
+ n
+
+ Decl1
+ Decl2
+ Decl3
+ Decl4
+ Decl5
+ ThemeA
+ ThemeB
+ Declension
+ Theme
+
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ l
+ m
+ n
+ r
+ s
+ t
+ k
+ p
+ d
+
+
+ Any
+
+
+ S
+
+
+ der
+
+
+
+ ti
+
+
+
+ ta
+
+
+
+ te
+
+
+
+ ti
+
+
+
+ to
+
+
+ DER
+
+
+ pl
+
+
+
+ ar
+
+
+
+ or
+
+
+
+ ar
+
+
+
+ or
+
+
+
+ er
+
+
+ PL
+
+
+ nom
+
+
+
+ a
+
+
+
+ o
+
+
+
+ s
+
+
+
+ us
+
+
+
+ e
+
+
+
+ ak
+
+
+ NOM
+
+
+ gen
+
+
+
+ is
+
+
+
+ i
+
+
+
+ is
+
+
+
+ us
+
+
+
+ es
+
+
+ GEN
+
+
+ dat
+
+
+
+ ai
+
+
+
+ o
+
+
+
+ i
+
+
+
+ ui
+
+
+
+ is
+
+
+
+ um
+
+
+ DAT
+
+
+
+
+ nounTemplate
+ derSlot
+ plSlot
+ caseSlot
+
+
+
+
+ tel
+ R_tel
+ tel
+
+
+ mur
+ R_mur
+ mur
+
+
+ kasp
+ R_kasp
+ kasp
+
+
+ lup
+ R_lup
+ lup
+
+
+ tela
+ R_tela
+ tela
+
+
+ mura
+ R_mura
+ mura
+
+
+ kas
+ R_kas
+ kas
+
+
+ lupo
+ R_lupo
+ lupo
+
+
+ nis
+ R_nis
+ nis
+
+
+ pat
+ R_pat
+ pat
+
+
+ ron
+ R_ron
+ ron
+
+
+ dom
+ R_dom
+ dom
+
+
+ nisu
+ R_nisu
+ nisu
+
+
+ pati
+ R_pati
+ pati
+
+
+ rona
+ R_rona
+ rona
+
+
+ domi
+ R_domi
+ domi
+
+
+ sim
+ R_sim
+ sim
+
+
+ nor
+ R_nor
+ nor
+
+
+ kad
+ R_kad
+ kad
+
+
+ lut
+ R_lut
+ lut
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/mpr-inflection-classes/words.yaml b/conformance-stress/edge-cases/mpr-inflection-classes/words.yaml
new file mode 100644
index 000000000..df225862b
--- /dev/null
+++ b/conformance-stress/edge-cases/mpr-inflection-classes/words.yaml
@@ -0,0 +1,306 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# Stress fixture for trail MPR replay: five declension classes carried as one MPR group, 20 noun roots
+# (four per class, stems overlapping in shape across classes), and case/number suffixes with one allomorph
+# per class, each gated by requiredMPRFeatures. Endings are homophonous across classes and cases, so most
+# analyses of a surface form pick a suffix allomorph of the wrong class and die in synthesis on the MPR check.
+# The DAT rule has one allomorph gated by excludedMPRFeatures. The DER slot outputs features of an Overwrite
+# group (Theme), which also feeds the NOM "ak" allomorph. Expected parses were derived by hand from the
+# ending tables in grammar.xml (root + optional DER + optional PL + one case ending, class-gated) and
+# confirmed against the engine.
+language: StressMprInflectionClasses
+inspired_by: ["Indo-European declension classes (Latin, Russian style); synthetic, not modeling a real language"]
+sources:
+ - "research harness stress fixture; no external source"
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 15000
+words:
+ - word: telis
+ note: "telis"
+ parses:
+ - signature: "R_tel+GEN|telis"
+ rules: [mrGen]
+ - word: muris
+ note: "muris"
+ parses:
+ - signature: "R_mur+GEN|muris"
+ rules: [mrGen]
+ - word: kaspis
+ note: "kaspis"
+ parses:
+ - signature: "R_kasp+GEN|kaspis"
+ rules: [mrGen]
+ - word: lupis
+ note: "lupis"
+ parses:
+ - signature: "R_lup+GEN|lupis"
+ rules: [mrGen]
+ - word: telai
+ note: "telai"
+ parses:
+ - signature: "R_tel+DAT|telai"
+ rules: [mrDat]
+ - signature: "R_tela+GEN|telai"
+ rules: [mrGen]
+ - word: murai
+ note: "murai"
+ parses:
+ - signature: "R_mur+DAT|murai"
+ rules: [mrDat]
+ - signature: "R_mura+GEN|murai"
+ rules: [mrGen]
+ - word: kasi
+ note: "kasi"
+ parses:
+ - signature: "R_kas+GEN|kasi"
+ rules: [mrGen]
+ - word: lupoi
+ note: "lupoi"
+ parses:
+ - signature: "R_lupo+GEN|lupoi"
+ rules: [mrGen]
+ - word: nisis
+ note: "nisis"
+ parses:
+ - signature: "R_nis+GEN|nisis"
+ rules: [mrGen]
+ - word: patis
+ note: "patis"
+ parses:
+ - signature: "R_pat+GEN|patis"
+ rules: [mrGen]
+ - word: ronis
+ note: "ronis"
+ parses:
+ - signature: "R_ron+GEN|ronis"
+ rules: [mrGen]
+ - word: domis
+ note: "domis"
+ parses:
+ - signature: "R_dom+GEN|domis"
+ rules: [mrGen]
+ - word: nisuus
+ note: "nisuus"
+ parses:
+ - signature: "R_nisu+GEN|nisuus"
+ rules: [mrGen]
+ - signature: "R_nisu+NOM|nisuus"
+ rules: [mrNom]
+ - word: patius
+ note: "patius"
+ parses:
+ - signature: "R_pati+GEN|patius"
+ rules: [mrGen]
+ - signature: "R_pati+NOM|patius"
+ rules: [mrNom]
+ - word: ronaus
+ note: "ronaus"
+ parses:
+ - signature: "R_rona+GEN|ronaus"
+ rules: [mrGen]
+ - signature: "R_rona+NOM|ronaus"
+ rules: [mrNom]
+ - word: domius
+ note: "domius"
+ parses:
+ - signature: "R_domi+GEN|domius"
+ rules: [mrGen]
+ - signature: "R_domi+NOM|domius"
+ rules: [mrNom]
+ - word: simes
+ note: "simes"
+ parses:
+ - signature: "R_sim+GEN|simes"
+ rules: [mrGen]
+ - word: nores
+ note: "nores"
+ parses:
+ - signature: "R_nor+GEN|nores"
+ rules: [mrGen]
+ - word: kades
+ note: "kades"
+ parses:
+ - signature: "R_kad+GEN|kades"
+ rules: [mrGen]
+ - word: lutes
+ note: "lutes"
+ parses:
+ - signature: "R_lut+GEN|lutes"
+ rules: [mrGen]
+ - word: telarai
+ note: "telarai"
+ parses:
+ - signature: "R_tel+PL+DAT|telarai"
+ rules: [mrPl, mrDat]
+ - word: murarai
+ note: "murarai"
+ parses:
+ - signature: "R_mur+PL+DAT|murarai"
+ rules: [mrPl, mrDat]
+ - word: kasparai
+ note: "kasparai"
+ parses:
+ - signature: "R_kasp+PL+DAT|kasparai"
+ rules: [mrPl, mrDat]
+ - word: luparai
+ note: "luparai"
+ parses:
+ - signature: "R_lup+PL+DAT|luparai"
+ rules: [mrPl, mrDat]
+ - word: telaoro
+ note: "telaoro"
+ parses:
+ - signature: "R_tela+PL+DAT|telaoro"
+ rules: [mrPl, mrDat]
+ - signature: "R_tela+PL+NOM|telaoro"
+ rules: [mrPl, mrNom]
+ - word: muraoro
+ note: "muraoro"
+ parses:
+ - signature: "R_mura+PL+DAT|muraoro"
+ rules: [mrPl, mrDat]
+ - signature: "R_mura+PL+NOM|muraoro"
+ rules: [mrPl, mrNom]
+ - word: kasoro
+ note: "kasoro"
+ parses:
+ - signature: "R_kas+PL+DAT|kasoro"
+ rules: [mrPl, mrDat]
+ - signature: "R_kas+PL+NOM|kasoro"
+ rules: [mrPl, mrNom]
+ - word: lupooro
+ note: "lupooro"
+ parses:
+ - signature: "R_lupo+PL+DAT|lupooro"
+ rules: [mrPl, mrDat]
+ - signature: "R_lupo+PL+NOM|lupooro"
+ rules: [mrPl, mrNom]
+ - word: nisari
+ note: "nisari"
+ parses:
+ - signature: "R_nis+PL+DAT|nisari"
+ rules: [mrPl, mrDat]
+ - word: patari
+ note: "patari"
+ parses:
+ - signature: "R_pat+PL+DAT|patari"
+ rules: [mrPl, mrDat]
+ - word: ronari
+ note: "ronari"
+ parses:
+ - signature: "R_ron+PL+DAT|ronari"
+ rules: [mrPl, mrDat]
+ - word: domari
+ note: "domari"
+ parses:
+ - signature: "R_dom+PL+DAT|domari"
+ rules: [mrPl, mrDat]
+ - word: nisuorui
+ note: "nisuorui"
+ parses:
+ - signature: "R_nisu+PL+DAT|nisuorui"
+ rules: [mrPl, mrDat]
+ - word: patiorui
+ note: "patiorui"
+ parses:
+ - signature: "R_pati+PL+DAT|patiorui"
+ rules: [mrPl, mrDat]
+ - word: ronaorui
+ note: "ronaorui"
+ parses:
+ - signature: "R_rona+PL+DAT|ronaorui"
+ rules: [mrPl, mrDat]
+ - word: domiorui
+ note: "domiorui"
+ parses:
+ - signature: "R_domi+PL+DAT|domiorui"
+ rules: [mrPl, mrDat]
+ - word: simeris
+ note: "simeris"
+ parses:
+ - signature: "R_sim+PL+DAT|simeris"
+ rules: [mrPl, mrDat]
+ - word: noreris
+ note: "noreris"
+ parses:
+ - signature: "R_nor+PL+DAT|noreris"
+ rules: [mrPl, mrDat]
+ - word: kaderis
+ note: "kaderis"
+ parses:
+ - signature: "R_kad+PL+DAT|kaderis"
+ rules: [mrPl, mrDat]
+ - word: luteris
+ note: "luteris"
+ parses:
+ - signature: "R_lut+PL+DAT|luteris"
+ rules: [mrPl, mrDat]
+ - word: teltia
+ note: "teltia"
+ parses:
+ - signature: "R_tel+DER+NOM|teltia"
+ rules: [mrDer, mrNom]
+ - word: murtia
+ note: "murtia"
+ parses:
+ - signature: "R_mur+DER+NOM|murtia"
+ rules: [mrDer, mrNom]
+ - word: kasptia
+ note: "kasptia"
+ parses:
+ - signature: "R_kasp+DER+NOM|kasptia"
+ rules: [mrDer, mrNom]
+ - word: luptia
+ note: "luptia"
+ parses:
+ - signature: "R_lup+DER+NOM|luptia"
+ rules: [mrDer, mrNom]
+ - word: telatao
+ note: "telatao"
+ parses:
+ - signature: "R_tela+DER+DAT|telatao"
+ rules: [mrDer, mrDat]
+ - signature: "R_tela+DER+NOM|telatao"
+ rules: [mrDer, mrNom]
+ - word: muratao
+ note: "muratao"
+ parses:
+ - signature: "R_mura+DER+DAT|muratao"
+ rules: [mrDer, mrDat]
+ - signature: "R_mura+DER+NOM|muratao"
+ rules: [mrDer, mrNom]
+ - word: kastao
+ note: "kastao"
+ parses:
+ - signature: "R_kas+DER+DAT|kastao"
+ rules: [mrDer, mrDat]
+ - signature: "R_kas+DER+NOM|kastao"
+ rules: [mrDer, mrNom]
+ - word: lupotao
+ note: "lupotao"
+ parses:
+ - signature: "R_lupo+DER+DAT|lupotao"
+ rules: [mrDer, mrDat]
+ - signature: "R_lupo+DER+NOM|lupotao"
+ rules: [mrDer, mrNom]
+ - word: nistes
+ note: "nistes"
+ parses:
+ - signature: "R_nis+DER+NOM|nistes"
+ rules: [mrDer, mrNom]
+ - word: pattes
+ note: "pattes"
+ parses:
+ - signature: "R_pat+DER+NOM|pattes"
+ rules: [mrDer, mrNom]
+ - word: rontes
+ note: "rontes"
+ parses:
+ - signature: "R_ron+DER+NOM|rontes"
+ rules: [mrDer, mrNom]
+ - word: domtes
+ note: "domtes"
+ parses:
+ - signature: "R_dom+DER+NOM|domtes"
+ rules: [mrDer, mrNom]
diff --git a/conformance-stress/edge-cases/prefix-class-density/grammar.xml b/conformance-stress/edge-cases/prefix-class-density/grammar.xml
new file mode 100644
index 000000000..ebbfc3426
--- /dev/null
+++ b/conformance-stress/edge-cases/prefix-class-density/grammar.xml
@@ -0,0 +1,110 @@
+
+
+
+
+ StressBantuPrefixDensity
+
+ nounverb
+ phaeiouptkbdgmnljsvwy
+ Main
+ a
+ e
+ i
+ o
+ u
+ p
+ t
+ k
+ b
+ d
+ g
+ m
+ n
+ l
+ j
+ s
+ v
+ w
+ y
+
+
+ Any
+ nc_a
+ nc_aeiou
+ nc_aou
+ nc_bdg
+ nc_bdgmnl
+ nc_ei
+ nc_l
+ nc_mn
+ nc_mnl
+ nc_ou
+ nc_ptk
+
+
+
+ Main
+
+ rCls
+ ng
+ ka
+ mu
+ ny
+ ki
+ ku
+ lu
+ CLSCLS
+ rPlu
+ ba
+ ma
+ ve
+ va
+ be
+ PLUPLU
+ rSubj
+ ni
+ tu
+ ko
+ si
+ wa
+ SUBJSUBJ
+ rObj
+ ku
+ ji
+ mi
+ OBJOBJ
+
+
+ nounTemplateslotClsslotPlu
+ verbTemplateslotObjslotSubj
+
+
+ pataPATApata
+ tikaTIKAtika
+ kopoKOPOkopo
+ bedeBEDEbede
+ giduGIDUgidu
+ manoMANOmano
+ nukuNUKUnuku
+ lemaLEMAlema
+ pelaPELApela
+ kituKITUkitu
+ daliDALIdali
+ bagoBAGObago
+ petPETpet
+ tikTIKtik
+ konKONkon
+ bedBEDbed
+ gidGIDgid
+ munMUNmun
+ nokNOKnok
+ lomLOMlom
+ ateATEate
+ emiEMIemi
+ ilaILAila
+ okuOKUoku
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/prefix-class-density/words.yaml b/conformance-stress/edge-cases/prefix-class-density/words.yaml
new file mode 100644
index 000000000..17c78abfb
--- /dev/null
+++ b/conformance-stress/edge-cases/prefix-class-density/words.yaml
@@ -0,0 +1,394 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# HAND DERIVATION. Prefix rules, each with allomorphs conditioned on the first segment of the stem to its right
+# (RightEnvironment). Environments of one rule are mutually exclusive, so exactly one allomorph is valid.
+# CLS (noun class): p t k -> mu, b d g -> ng, m n -> ny, a -> ka, e i -> ki, o u -> ku, l -> lu
+# PLU (plural, outside CLS): e i -> ba, p t k -> ma, b d g -> ve, a o u -> va, m n l -> be
+# OBJ (verb, inner): b d g m n l -> ku, p t k -> ji, vowel -> mi
+# SUBJ (verb, outer): p t k -> ni, any vowel -> tu, b d g -> ko, m n -> si, l -> wa
+# Prefixes are applied innermost first, so an outer prefix sees the first segment of the inner prefix.
+# Allomorph lists are ordered differently per rule, so recorded indices spread over 0..A-1. Every expected
+# parse enumerates every root and slot choice that yields the surface, so ambiguous surfaces list all analyses.
+# Confirmed against the engine with the E1 cutoff off.
+language: StressBantuPrefixDensity
+inspired_by: ["synthetic Bantu noun-class and agreement prefixes written as separate environment-conditioned allomorphs"]
+sources:
+ - "E1 stress fixture 2, hermitcrab-2026-10-27-synthesis-to-analysis-round"
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: bemupata
+ note: >-
+ pata + CLS + PLU: CLS -> mu- (allomorph 2); PLU -> be- (allomorph 4). Surface bemupata.
+ parses:
+ - signature: "PLU+CLS+PATA|bemupata"
+ gloss: PLU-CLS-pata
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: mupata
+ note: >-
+ pata + CLS: CLS -> mu- (allomorph 2). Surface mupata.
+ parses:
+ - signature: "CLS+PATA|mupata"
+ gloss: CLS-pata
+ rules: [rCls]
+ exercises: []
+ - word: bemutika
+ note: >-
+ tika + CLS + PLU: CLS -> mu- (allomorph 2); PLU -> be- (allomorph 4). Surface bemutika.
+ parses:
+ - signature: "PLU+CLS+TIKA|bemutika"
+ gloss: PLU-CLS-tika
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: mutika
+ note: >-
+ tika + CLS: CLS -> mu- (allomorph 2). Surface mutika.
+ parses:
+ - signature: "CLS+TIKA|mutika"
+ gloss: CLS-tika
+ rules: [rCls]
+ exercises: []
+ - word: bemukopo
+ note: >-
+ kopo + CLS + PLU: CLS -> mu- (allomorph 2); PLU -> be- (allomorph 4). Surface bemukopo.
+ parses:
+ - signature: "PLU+CLS+KOPO|bemukopo"
+ gloss: PLU-CLS-kopo
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: mukopo
+ note: >-
+ kopo + CLS: CLS -> mu- (allomorph 2). Surface mukopo.
+ parses:
+ - signature: "CLS+KOPO|mukopo"
+ gloss: CLS-kopo
+ rules: [rCls]
+ exercises: []
+ - word: bengbede
+ note: >-
+ bede + CLS + PLU: CLS -> ng- (allomorph 0); PLU -> be- (allomorph 4). Surface bengbede.
+ parses:
+ - signature: "PLU+CLS+BEDE|bengbede"
+ gloss: PLU-CLS-bede
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: ngbede
+ note: >-
+ bede + CLS: CLS -> ng- (allomorph 0). Surface ngbede.
+ parses:
+ - signature: "CLS+BEDE|ngbede"
+ gloss: CLS-bede
+ rules: [rCls]
+ exercises: []
+ - word: benggidu
+ note: >-
+ gidu + CLS + PLU: CLS -> ng- (allomorph 0); PLU -> be- (allomorph 4). Surface benggidu.
+ parses:
+ - signature: "PLU+CLS+GIDU|benggidu"
+ gloss: PLU-CLS-gidu
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: nggidu
+ note: >-
+ gidu + CLS: CLS -> ng- (allomorph 0). Surface nggidu.
+ parses:
+ - signature: "CLS+GIDU|nggidu"
+ gloss: CLS-gidu
+ rules: [rCls]
+ exercises: []
+ - word: benymano
+ note: >-
+ mano + CLS + PLU: CLS -> ny- (allomorph 3); PLU -> be- (allomorph 4). Surface benymano.
+ parses:
+ - signature: "PLU+CLS+MANO|benymano"
+ gloss: PLU-CLS-mano
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: nymano
+ note: >-
+ mano + CLS: CLS -> ny- (allomorph 3). Surface nymano.
+ parses:
+ - signature: "CLS+MANO|nymano"
+ gloss: CLS-mano
+ rules: [rCls]
+ exercises: []
+ - word: benynuku
+ note: >-
+ nuku + CLS + PLU: CLS -> ny- (allomorph 3); PLU -> be- (allomorph 4). Surface benynuku.
+ parses:
+ - signature: "PLU+CLS+NUKU|benynuku"
+ gloss: PLU-CLS-nuku
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: nynuku
+ note: >-
+ nuku + CLS: CLS -> ny- (allomorph 3). Surface nynuku.
+ parses:
+ - signature: "CLS+NUKU|nynuku"
+ gloss: CLS-nuku
+ rules: [rCls]
+ exercises: []
+ - word: belulema
+ note: >-
+ lema + CLS + PLU: CLS -> lu- (allomorph 6); PLU -> be- (allomorph 4). Surface belulema.
+ parses:
+ - signature: "PLU+CLS+LEMA|belulema"
+ gloss: PLU-CLS-lema
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: lulema
+ note: >-
+ lema + CLS: CLS -> lu- (allomorph 6). Surface lulema.
+ parses:
+ - signature: "CLS+LEMA|lulema"
+ gloss: CLS-lema
+ rules: [rCls]
+ exercises: []
+ - word: bemupela
+ note: >-
+ pela + CLS + PLU: CLS -> mu- (allomorph 2); PLU -> be- (allomorph 4). Surface bemupela.
+ parses:
+ - signature: "PLU+CLS+PELA|bemupela"
+ gloss: PLU-CLS-pela
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: mupela
+ note: >-
+ pela + CLS: CLS -> mu- (allomorph 2). Surface mupela.
+ parses:
+ - signature: "CLS+PELA|mupela"
+ gloss: CLS-pela
+ rules: [rCls]
+ exercises: []
+ - word: bemukitu
+ note: >-
+ kitu + CLS + PLU: CLS -> mu- (allomorph 2); PLU -> be- (allomorph 4). Surface bemukitu.
+ parses:
+ - signature: "PLU+CLS+KITU|bemukitu"
+ gloss: PLU-CLS-kitu
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: mukitu
+ note: >-
+ kitu + CLS: CLS -> mu- (allomorph 2). Surface mukitu.
+ parses:
+ - signature: "CLS+KITU|mukitu"
+ gloss: CLS-kitu
+ rules: [rCls]
+ exercises: []
+ - word: bengdali
+ note: >-
+ dali + CLS + PLU: CLS -> ng- (allomorph 0); PLU -> be- (allomorph 4). Surface bengdali.
+ parses:
+ - signature: "PLU+CLS+DALI|bengdali"
+ gloss: PLU-CLS-dali
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: ngdali
+ note: >-
+ dali + CLS: CLS -> ng- (allomorph 0). Surface ngdali.
+ parses:
+ - signature: "CLS+DALI|ngdali"
+ gloss: CLS-dali
+ rules: [rCls]
+ exercises: []
+ - word: bengbago
+ note: >-
+ bago + CLS + PLU: CLS -> ng- (allomorph 0); PLU -> be- (allomorph 4). Surface bengbago.
+ parses:
+ - signature: "PLU+CLS+BAGO|bengbago"
+ gloss: PLU-CLS-bago
+ rules: [rCls, rPlu]
+ exercises: []
+ - word: ngbago
+ note: >-
+ bago + CLS: CLS -> ng- (allomorph 0). Surface ngbago.
+ parses:
+ - signature: "CLS+BAGO|ngbago"
+ gloss: CLS-bago
+ rules: [rCls]
+ exercises: []
+ - word: jipet
+ note: >-
+ pet + OBJ: OBJ -> ji- (allomorph 1). Surface jipet.
+ parses:
+ - signature: "OBJ+PET|jipet"
+ gloss: OBJ-pet
+ rules: [rObj]
+ exercises: []
+ - word: jitik
+ note: >-
+ tik + OBJ: OBJ -> ji- (allomorph 1). Surface jitik.
+ parses:
+ - signature: "OBJ+TIK|jitik"
+ gloss: OBJ-tik
+ rules: [rObj]
+ exercises: []
+ - word: jikon
+ note: >-
+ kon + OBJ: OBJ -> ji- (allomorph 1). Surface jikon.
+ parses:
+ - signature: "OBJ+KON|jikon"
+ gloss: OBJ-kon
+ rules: [rObj]
+ exercises: []
+ - word: nikubed
+ note: >-
+ bed + OBJ + SUBJ: OBJ -> ku- (allomorph 0); SUBJ -> ni- (allomorph 0). Surface nikubed.
+ parses:
+ - signature: "SUBJ+OBJ+BED|nikubed"
+ gloss: SUBJ-OBJ-bed
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: kubed
+ note: >-
+ bed + OBJ: OBJ -> ku- (allomorph 0). Surface kubed.
+ parses:
+ - signature: "OBJ+BED|kubed"
+ gloss: OBJ-bed
+ rules: [rObj]
+ exercises: []
+ - word: nikugid
+ note: >-
+ gid + OBJ + SUBJ: OBJ -> ku- (allomorph 0); SUBJ -> ni- (allomorph 0). Surface nikugid.
+ parses:
+ - signature: "SUBJ+OBJ+GID|nikugid"
+ gloss: SUBJ-OBJ-gid
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: kugid
+ note: >-
+ gid + OBJ: OBJ -> ku- (allomorph 0). Surface kugid.
+ parses:
+ - signature: "OBJ+GID|kugid"
+ gloss: OBJ-gid
+ rules: [rObj]
+ exercises: []
+ - word: nikumun
+ note: >-
+ mun + OBJ + SUBJ: OBJ -> ku- (allomorph 0); SUBJ -> ni- (allomorph 0). Surface nikumun.
+ parses:
+ - signature: "SUBJ+OBJ+MUN|nikumun"
+ gloss: SUBJ-OBJ-mun
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: kumun
+ note: >-
+ mun + OBJ: OBJ -> ku- (allomorph 0). Surface kumun.
+ parses:
+ - signature: "OBJ+MUN|kumun"
+ gloss: OBJ-mun
+ rules: [rObj]
+ exercises: []
+ - word: nikunok
+ note: >-
+ nok + OBJ + SUBJ: OBJ -> ku- (allomorph 0); SUBJ -> ni- (allomorph 0). Surface nikunok.
+ parses:
+ - signature: "SUBJ+OBJ+NOK|nikunok"
+ gloss: SUBJ-OBJ-nok
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: kunok
+ note: >-
+ nok + OBJ: OBJ -> ku- (allomorph 0). Surface kunok.
+ parses:
+ - signature: "OBJ+NOK|kunok"
+ gloss: OBJ-nok
+ rules: [rObj]
+ exercises: []
+ - word: nikulom
+ note: >-
+ lom + OBJ + SUBJ: OBJ -> ku- (allomorph 0); SUBJ -> ni- (allomorph 0). Surface nikulom.
+ parses:
+ - signature: "SUBJ+OBJ+LOM|nikulom"
+ gloss: SUBJ-OBJ-lom
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: kulom
+ note: >-
+ lom + OBJ: OBJ -> ku- (allomorph 0). Surface kulom.
+ parses:
+ - signature: "OBJ+LOM|kulom"
+ gloss: OBJ-lom
+ rules: [rObj]
+ exercises: []
+ - word: simiate
+ note: >-
+ ate + OBJ + SUBJ: OBJ -> mi- (allomorph 2); SUBJ -> si- (allomorph 3). Surface simiate.
+ parses:
+ - signature: "SUBJ+OBJ+ATE|simiate"
+ gloss: SUBJ-OBJ-ate
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: miate
+ note: >-
+ ate + OBJ: OBJ -> mi- (allomorph 2). Surface miate.
+ parses:
+ - signature: "OBJ+ATE|miate"
+ gloss: OBJ-ate
+ rules: [rObj]
+ exercises: []
+ - word: simiemi
+ note: >-
+ emi + OBJ + SUBJ: OBJ -> mi- (allomorph 2); SUBJ -> si- (allomorph 3). Surface simiemi.
+ parses:
+ - signature: "SUBJ+OBJ+EMI|simiemi"
+ gloss: SUBJ-OBJ-emi
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: miemi
+ note: >-
+ emi + OBJ: OBJ -> mi- (allomorph 2). Surface miemi.
+ parses:
+ - signature: "OBJ+EMI|miemi"
+ gloss: OBJ-emi
+ rules: [rObj]
+ exercises: []
+ - word: simiila
+ note: >-
+ ila + OBJ + SUBJ: OBJ -> mi- (allomorph 2); SUBJ -> si- (allomorph 3). Surface simiila.
+ parses:
+ - signature: "SUBJ+OBJ+ILA|simiila"
+ gloss: SUBJ-OBJ-ila
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: miila
+ note: >-
+ ila + OBJ: OBJ -> mi- (allomorph 2). Surface miila.
+ parses:
+ - signature: "OBJ+ILA|miila"
+ gloss: OBJ-ila
+ rules: [rObj]
+ exercises: []
+ - word: simioku
+ note: >-
+ oku + OBJ + SUBJ: OBJ -> mi- (allomorph 2); SUBJ -> si- (allomorph 3). Surface simioku.
+ parses:
+ - signature: "SUBJ+OBJ+OKU|simioku"
+ gloss: SUBJ-OBJ-oku
+ rules: [rObj, rSubj]
+ exercises: []
+ - word: mioku
+ note: >-
+ oku + OBJ: OBJ -> mi- (allomorph 2). Surface mioku.
+ parses:
+ - signature: "OBJ+OKU|mioku"
+ gloss: OBJ-oku
+ rules: [rObj]
+ exercises: []
+ - word: kakata
+ note: >-
+ No allomorph environment and root combination yields this surface.
+ expect_fail: true
+ exercises: []
+ - word: nipata
+ note: >-
+ No allomorph environment and root combination yields this surface.
+ expect_fail: true
+ exercises: []
+ - word: bapata
+ note: >-
+ No allomorph environment and root combination yields this surface.
+ expect_fail: true
+ exercises: []
diff --git a/conformance-stress/edge-cases/required-template-slot/grammar.xml b/conformance-stress/edge-cases/required-template-slot/grammar.xml
new file mode 100644
index 000000000..ae1d04968
--- /dev/null
+++ b/conformance-stress/edge-cases/required-template-slot/grammar.xml
@@ -0,0 +1,529 @@
+
+
+
+
+ StressRequiredTemplateSlot
+
+ v
+ n
+
+
+ Main
+
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ k
+ l
+ m
+ n
+ p
+ s
+ t
+ v
+ w
+ y
+
+
+
+ Any
+
+
+
+ Main
+
+
+ mrEXT1
+
+
+
+ il
+
+
+ EXT1
+ EXT1
+
+
+ mrEXT2
+
+
+
+ an
+
+
+ EXT2
+ EXT2
+
+
+ mrFV1
+
+
+
+ a
+
+
+ FV1
+ FV1
+
+
+ mrFV2
+
+
+
+ e
+
+
+ FV2
+ FV2
+
+
+ mrOM1
+
+
+
+ mu
+
+
+ OM1
+ OM1
+
+
+ mrOM2
+
+
+
+ wa
+
+
+ OM2
+ OM2
+
+
+ mrOM3
+
+
+
+ ki
+
+
+ OM3
+ OM3
+
+
+ mrOM4
+
+
+
+ vi
+
+
+ OM4
+ OM4
+
+
+ mrOM5
+
+
+
+ ku
+
+
+ OM5
+ OM5
+
+
+ mrOM6
+
+
+
+ tu
+
+
+ OM6
+ OM6
+
+
+ mrTAM1
+
+
+
+ a
+
+
+ TAM1
+ TAM1
+
+
+ mrTAM2
+
+
+
+ na
+
+
+ TAM2
+ TAM2
+
+
+ mrTAM3
+
+
+
+ li
+
+
+ TAM3
+ TAM3
+
+
+ mrTAM4
+
+
+
+ ta
+
+
+ TAM4
+ TAM4
+
+
+ mrTAM5
+
+
+
+ me
+
+
+ TAM5
+ TAM5
+
+
+ mrSM1
+
+
+
+ ni
+
+
+ SM1
+ SM1
+
+
+ mrSM2
+
+
+
+ u
+
+
+ SM2
+ SM2
+
+
+ mrSM3
+
+
+
+ a
+
+
+ SM3
+ SM3
+
+
+ mrSM4
+
+
+
+ tu
+
+
+ SM4
+ SM4
+
+
+ mrSM5
+
+
+
+ m
+
+
+ SM5
+ SM5
+
+
+ mrSM6
+
+
+
+ wa
+
+
+ SM6
+ SM6
+
+
+ mrSM7
+
+
+
+ ki
+
+
+ SM7
+ SM7
+
+
+ mrSM8
+
+
+
+ vi
+
+
+ SM8
+ SM8
+
+
+ mrCL1
+
+
+
+ m
+
+
+ CL1
+ CL1
+
+
+ mrCL2
+
+
+
+ wa
+
+
+ CL2
+ CL2
+
+
+ mrCL3
+
+
+
+ ki
+
+
+ CL3
+ CL3
+
+
+ mrCL4
+
+
+
+ vi
+
+
+ CL4
+ CL4
+
+
+ mrCL5
+
+
+
+ n
+
+
+ CL5
+ CL5
+
+
+ mrCL6
+
+
+
+ ma
+
+
+ CL6
+ CL6
+
+
+
+
+ verbTemplate
+ extension
+ finalVowel
+ objectMarker
+ tam
+ subjectMarker
+
+
+ nounTemplate
+ nounClass
+
+
+
+
+ lim
+ V_LIM
+ lim.V
+
+
+ tum
+ V_TUM
+ tum.V
+
+
+ bon
+ V_BON
+ bon.V
+
+
+ kal
+ V_KAL
+ kal.V
+
+
+ pat
+ V_PAT
+ pat.V
+
+
+ sem
+ V_SEM
+ sem.V
+
+
+ som
+ V_SOM
+ som.V
+
+
+ gul
+ V_GUL
+ gul.V
+
+
+ nen
+ V_NEN
+ nen.V
+
+
+ dik
+ V_DIK
+ dik.V
+
+
+ lek
+ V_LEK
+ lek.V
+
+
+ wan
+ V_WAN
+ wan.V
+
+
+ bal
+ V_BAL
+ bal.V
+
+
+ tek
+ V_TEK
+ tek.V
+
+
+ mak
+ V_MAK
+ mak.V
+
+
+ sip
+ V_SIP
+ sip.V
+
+
+ lim
+ N_LIM
+ lim.N
+
+
+ tum
+ N_TUM
+ tum.N
+
+
+ kal
+ N_KAL
+ kal.N
+
+
+ bon
+ N_BON
+ bon.N
+
+
+ kilim
+ N_KILIM
+ kilim.N
+
+
+ mbali
+ N_MBALI
+ mbali.N
+
+
+ sima
+ N_SIMA
+ sima.N
+
+
+ kiti
+ N_KITI
+ kiti.N
+
+
+ nana
+ N_NANA
+ nana.N
+
+
+ lek
+ N_LEK
+ lek.N
+
+
+ tuma
+ N_TUMA
+ tuma.N
+
+
+ taka
+ N_TAKA
+ taka.N
+
+
+ mtu
+ N_MTU
+ mtu.N
+
+
+ diko
+ N_DIKO
+ diko.N
+
+
+
+
+
+
diff --git a/conformance-stress/edge-cases/required-template-slot/words.yaml b/conformance-stress/edge-cases/required-template-slot/words.yaml
new file mode 100644
index 000000000..24c20d510
--- /dev/null
+++ b/conformance-stress/edge-cases/required-template-slot/words.yaml
@@ -0,0 +1,508 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+# HAND DERIVATION (see grammar.xml). Pure-morphotactics Bantu-like stress grammar, no phonology.
+# Verb template, application order innermost to outermost: extension (optional suffix, 2 fillers),
+# final vowel (optional suffix, 2), object marker (optional prefix, 6), TAM (REQUIRED prefix, 5),
+# subject marker (optional prefix, 8). Surface = SM TAM OM root EXT FV. Noun template: one REQUIRED
+# class prefix (6 fillers). 16 verb roots and 14 noun roots; several noun and verb shapes coincide
+# (lim tum kal bon lek) and noun roots like kilim/tuma contain verb-affix material, so bare stems
+# and partly unapplied forms reach root lookup and die at the required slot.
+# For each word the parses below are every (root, slot choice) whose surface equals the word. They
+# were enumerated by a small independent script over the slot tables above, then confirmed against
+# the engine with PruneByTemplateReplay off. A word with no derivation is an expect_fail word; its
+# blocked_by names the required-slot rule class that no analysis can supply.
+# Signature: morpheme IDs outermost first, then the root, then "|" and the surface.
+language: StressRequiredTemplateSlot
+inspired_by: ["Bantu verb templates with a required TAM slot (synthetic stress, not a specific language)"]
+sources:
+ - "synthetic stress fixture for E3 (template replay at lexical lookup)"
+requires: []
+fieldworks_producible: true
+budget_ms: 60000
+words:
+ - word: matuma
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_TUMA|matuma"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_TUM+FV1|matuma"
+ rules: [mrFV1, mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: makilim
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_KILIM|makilim"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+OM3+V_LIM|makilim"
+ rules: [mrOM3, mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mabon
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_BON|mabon"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_BON|mabon"
+ rules: [mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: matum
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_TUM|matum"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_TUM|matum"
+ rules: [mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: malim
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_LIM|malim"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_LIM|malim"
+ rules: [mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: malek
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_LEK|malek"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_LEK|malek"
+ rules: [mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: makal
+ note: >-
+ 2 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL6+N_KAL|makal"
+ rules: [mrCL6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+ - signature: "SM5+TAM1+V_KAL|makal"
+ rules: [mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tuliwanan
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM4+TAM3+V_WAN+EXT2|tuliwanan"
+ rules: [mrEXT2, mrTAM3, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mnamulekil
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM2+OM1+V_LEK+EXT1|mnamulekil"
+ rules: [mrEXT1, mrOM1, mrTAM2, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nilimubona
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM1+TAM3+OM1+V_BON+FV1|nilimubona"
+ rules: [mrFV1, mrOM1, mrTAM3, mrSM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: anawamake
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM3+TAM2+OM2+V_MAK+FV2|anawamake"
+ rules: [mrFV2, mrOM2, mrTAM2, mrSM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: waakal
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM6+TAM1+V_KAL|waakal"
+ rules: [mrTAM1, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: ulimutuman
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM2+TAM3+OM1+V_TUM+EXT2|ulimutuman"
+ rules: [mrEXT2, mrOM1, mrTAM3, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: anamuteka
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM3+TAM2+OM1+V_TEK+FV1|anamuteka"
+ rules: [mrFV1, mrOM1, mrTAM2, mrSM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mnamutekan
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM2+OM1+V_TEK+EXT2|mnamutekan"
+ rules: [mrEXT2, mrOM1, mrTAM2, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: wamewaleke
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM6+TAM5+OM2+V_LEK+FV2|wamewaleke"
+ rules: [mrFV2, mrOM2, mrTAM5, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: waawatekil
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM6+TAM1+OM2+V_TEK+EXT1|waawatekil"
+ rules: [mrEXT1, mrOM2, mrTAM1, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: likipatana
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM3+OM3+V_PAT+EXT2+FV1|likipatana"
+ rules: [mrEXT2, mrFV1, mrOM3, mrTAM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mlitunene
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM3+OM6+V_NEN+FV2|mlitunene"
+ rules: [mrFV2, mrOM6, mrTAM3, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: waavisipe
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM6+TAM1+OM4+V_SIP+FV2|waavisipe"
+ rules: [mrFV2, mrOM4, mrTAM1, mrSM6]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mmenena
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM5+V_NEN+FV1|mmenena"
+ rules: [mrFV1, mrTAM5, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mmetutek
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM5+OM6+V_TEK|mmetutek"
+ rules: [mrOM6, mrTAM5, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: metumila
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM5+V_TUM+EXT1+FV1|metumila"
+ rules: [mrEXT1, mrFV1, mrTAM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nitakusipa
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM1+TAM4+OM5+V_SIP+FV1|nitakusipa"
+ rules: [mrFV1, mrOM5, mrTAM4, mrSM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: awalima
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM1+OM2+V_LIM+FV1|awalima"
+ rules: [mrFV1, mrOM2, mrTAM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: unamakil
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM2+TAM2+V_MAK+EXT1|unamakil"
+ rules: [mrEXT1, mrTAM2, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: malimana
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM1+V_LIM+EXT2+FV1|malimana"
+ rules: [mrEXT2, mrFV1, mrTAM1, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tavipatila
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM4+OM4+V_PAT+EXT1+FV1|tavipatila"
+ rules: [mrEXT1, mrFV1, mrOM4, mrTAM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mekibalane
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM5+OM3+V_BAL+EXT2+FV2|mekibalane"
+ rules: [mrEXT2, mrFV2, mrOM3, mrTAM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tumebalane
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM4+TAM5+V_BAL+EXT2+FV2|tumebalane"
+ rules: [mrEXT2, mrFV2, mrTAM5, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tamugula
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM4+OM1+V_GUL+FV1|tamugula"
+ rules: [mrFV1, mrOM1, mrTAM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: ulimutuma
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM2+TAM3+OM1+V_TUM+FV1|ulimutuma"
+ rules: [mrFV1, mrOM1, mrTAM3, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: unawagul
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM2+TAM2+OM2+V_GUL|unawagul"
+ rules: [mrOM2, mrTAM2, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mewasemane
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM5+OM2+V_SEM+EXT2+FV2|mewasemane"
+ rules: [mrEXT2, mrFV2, mrOM2, mrTAM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mtatuseman
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM5+TAM4+OM6+V_SEM+EXT2|mtatuseman"
+ rules: [mrEXT2, mrOM6, mrTAM4, mrSM5]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nakukalan
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM2+OM5+V_KAL+EXT2|nakukalan"
+ rules: [mrEXT2, mrOM5, mrTAM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tuagulane
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM4+TAM1+V_GUL+EXT2+FV2|tuagulane"
+ rules: [mrEXT2, mrFV2, mrTAM1, mrSM4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nakileke
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "TAM2+OM3+V_LEK+FV2|nakileke"
+ rules: [mrFV2, mrOM3, mrTAM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vinatubona
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM8+TAM2+OM6+V_BON+FV1|vinatubona"
+ rules: [mrFV1, mrOM6, mrTAM2, mrSM8]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: umewateke
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM2+TAM5+OM2+V_TEK+FV2|umewateke"
+ rules: [mrFV2, mrOM2, mrTAM5, mrSM2]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vitatum
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM8+TAM4+V_TUM|vitatum"
+ rules: [mrTAM4, mrSM8]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: aaleke
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM3+TAM1+V_LEK+FV2|aaleke"
+ rules: [mrFV2, mrTAM1, mrSM3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vinabale
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "SM8+TAM2+V_BAL+FV2|vinabale"
+ rules: [mrFV2, mrTAM2, mrSM8]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: mtuma
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL1+N_TUMA|mtuma"
+ rules: [mrCL1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vikal
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL4+N_KAL|vikal"
+ rules: [mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: vidiko
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL4+N_DIKO|vidiko"
+ rules: [mrCL4]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: kibon
+ note: >-
+ 1 derivation(s) found by enumerating root x slot choices (see header).
+ parses:
+ - signature: "CL3+N_BON|kibon"
+ rules: [mrCL3]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: tumu
+ note: >-
+ No derivation: the verb template needs a TAM prefix and the noun template a class prefix, and no
+ root plus slot choice yields this surface. Zero parses.
+ expect_fail: true
+ blocked_by: [mrTAM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: nalekk
+ note: >-
+ No derivation: the verb template needs a TAM prefix and the noun template a class prefix, and no
+ root plus slot choice yields this surface. Zero parses.
+ expect_fail: true
+ blocked_by: [mrTAM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: bon
+ note: >-
+ No derivation: the verb template needs a TAM prefix and the noun template a class prefix, and no
+ root plus slot choice yields this surface. Zero parses.
+ expect_fail: true
+ blocked_by: [mrTAM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
+ - word: waatumb
+ note: >-
+ No derivation: the verb template needs a TAM prefix and the noun template a class prefix, and no
+ root plus slot choice yields this surface. Zero parses.
+ expect_fail: true
+ blocked_by: [mrTAM1]
+ exercises:
+ - "Affix template slots (obligatory/disjunctive/ordering)"
+
diff --git a/conformance-stress/edge-cases/truncating-slot-chain/grammar.xml b/conformance-stress/edge-cases/truncating-slot-chain/grammar.xml
new file mode 100644
index 000000000..6704e29a0
--- /dev/null
+++ b/conformance-stress/edge-cases/truncating-slot-chain/grammar.xml
@@ -0,0 +1,137 @@
+
+
+
+
+ truncating-slot-chain
+ v
+
+ syl+-
+ cons+-
+ son+-
+ nas+-
+ voice+-
+ cont+-
+ high+-
+ low+-
+ back+-
+ round+-
+ lat+-
+ placelabialalveolarvelarglottalnone
+
+
+ Main
+ a
+ e
+ i
+ o
+ u
+ b
+ d
+ g
+ h
+ k
+ l
+ m
+ n
+ p
+ r
+ s
+ t
+ w
+ y
+
+ AnyVowel
+ Main
+
+tam_kakatam_kaTAM.ka
+tam_keketam_keTAM.ke
+tam_kikitam_kiTAM.ki
+tam_kokotam_koTAM.ko
+tam_kukutam_kuTAM.ku
+ext_kakaext_kaEXT.ka
+ext_titiext_tiEXT.ti
+ext_pupuext_puEXT.pu
+ext_leleext_leEXT.le
+ext_momoext_moEXT.mo
+ext_nanaext_naEXT.na
+ext_ririext_riEXT.ri
+ext_susuext_suEXT.su
+o2_babao2_baO2.ba
+o2_didio2_diO2.di
+o2_guguo2_guO2.gu
+o2_heheo2_heO2.he
+o2_kokoo2_koO2.ko
+o2_lalao2_laO2.la
+o2_memeo2_meO2.me
+o2_nonoo2_noO2.no
+o2_papao2_paO2.pa
+o2_ruruo2_ruO2.ru
+o3_tatao3_taO3.ta
+o3_kikio3_kiO3.ki
+o3_susuo3_suO3.su
+o3_neneo3_neO3.ne
+o3_popoo3_poO3.po
+o3_rarao3_raO3.ra
+o3_mimio3_miO3.mi
+o3_loloo3_loO3.lo
+o3_bubuo3_buO3.bu
+o3_dadao3_daO3.da
+o4_gagao4_gaO4.ga
+o4_hihio4_hiO4.hi
+o4_tutuo4_tuO4.tu
+o4_kekeo4_keO4.ke
+o4_boboo4_boO4.bo
+o4_sasao4_saO4.sa
+o4_ninio4_niO4.ni
+o4_mamao4_maO4.ma
+o4_pipio4_piO4.pi
+o4_luluo4_luO4.lu
+subj_nunusubj_nuSUBJ.nu
+subj_bubusubj_buSUBJ.bu
+subj_dudusubj_duSUBJ.du
+subj_gogosubj_goSUBJ.go
+subj_hohosubj_hoSUBJ.ho
+subj_kokosubj_koSUBJ.ko
+subj_lolosubj_loSUBJ.lo
+subj_momosubj_moSUBJ.mo
+subj_nonosubj_noSUBJ.no
+subj_poposubj_poSUBJ.po
+subj_rorosubj_roSUBJ.ro
+subj_sososubj_soSUBJ.so
+subj_totosubj_toSUBJ.to
+subj_wowosubj_woSUBJ.wo
+subj_yoyosubj_yoSUBJ.yo
+
+t0_katenseextopt2opt3opt4subjectt1_ketenseextopt2opt3opt4subjectt2_kitenseextopt2opt3opt4subjectt3_kotenseextopt2opt3opt4subjectt4_kutenseextopt2opt3opt4subject
+
+balbalbal
+temtemtem
+kumkumkum
+dipdipdip
+gorgorgor
+hanhanhan
+keskeskes
+lublublub
+mermermer
+nugnugnug
+patpatpat
+remremrem
+solsolsol
+tagtagtag
+wabwabwab
+belbelbel
+dagdagdag
+gumgumgum
+hithithit
+korkorkor
+lenlenlen
+mosmosmos
+nemnemnem
+pirpirpir
+rotrotrot
+sabsabsab
+tultultul
+wenwenwen
+bisbisbis
+doldoldol
+
diff --git a/conformance-stress/edge-cases/truncating-slot-chain/words.yaml b/conformance-stress/edge-cases/truncating-slot-chain/words.yaml
new file mode 100644
index 000000000..84989dc04
--- /dev/null
+++ b/conformance-stress/edge-cases/truncating-slot-chain/words.yaml
@@ -0,0 +1,798 @@
+# kind: stress (timing and optimization parity fixture, not conformance; see conformance-stress/README.md)
+language: StressTruncatingSlotChain
+sources: []
+requires: []
+fieldworks_producible: false
+fieldworks_producible_notes: "research stress fixture; not authored through FieldWorks"
+budget_ms: 60000
+words:
+ - word: tokorklsu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_to+kor+tam_ka+ext_le+o3_su|tokorklsu"
+ rules: [ext_le, o3_su, subj_to, tam_ka]
+ - signature: "subj_to+kor+tam_ke+ext_le+o3_su|tokorklsu"
+ rules: [ext_le, o3_su, subj_to, tam_ke]
+ - signature: "subj_to+kor+tam_ki+ext_le+o3_su|tokorklsu"
+ rules: [ext_le, o3_su, subj_to, tam_ki]
+ - signature: "subj_to+kor+tam_ko+ext_le+o3_su|tokorklsu"
+ rules: [ext_le, o3_su, subj_to, tam_ko]
+ - signature: "subj_to+kor+tam_ku+ext_le+o3_su|tokorklsu"
+ rules: [ext_le, o3_su, subj_to, tam_ku]
+ - word: nolenksu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_no+len+tam_ka+ext_su|nolenksu"
+ rules: [ext_su, subj_no, tam_ka]
+ - signature: "subj_no+len+tam_ke+ext_su|nolenksu"
+ rules: [ext_su, subj_no, tam_ke]
+ - signature: "subj_no+len+tam_ki+ext_su|nolenksu"
+ rules: [ext_su, subj_no, tam_ki]
+ - signature: "subj_no+len+tam_ko+ext_su|nolenksu"
+ rules: [ext_su, subj_no, tam_ko]
+ - signature: "subj_no+len+tam_ku+ext_su|nolenksu"
+ rules: [ext_su, subj_no, tam_ku]
+ - word: dusabkti
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_du+sab+tam_ka+ext_ti|dusabkti"
+ rules: [ext_ti, subj_du, tam_ka]
+ - signature: "subj_du+sab+tam_ke+ext_ti|dusabkti"
+ rules: [ext_ti, subj_du, tam_ke]
+ - signature: "subj_du+sab+tam_ki+ext_ti|dusabkti"
+ rules: [ext_ti, subj_du, tam_ki]
+ - signature: "subj_du+sab+tam_ko+ext_ti|dusabkti"
+ rules: [ext_ti, subj_du, tam_ko]
+ - signature: "subj_du+sab+tam_ku+ext_ti|dusabkti"
+ rules: [ext_ti, subj_du, tam_ku]
+ - word: sodipkpu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_so+dip+tam_ka+ext_pu|sodipkpu"
+ rules: [ext_pu, subj_so, tam_ka]
+ - signature: "subj_so+dip+tam_ke+ext_pu|sodipkpu"
+ rules: [ext_pu, subj_so, tam_ke]
+ - signature: "subj_so+dip+tam_ki+ext_pu|sodipkpu"
+ rules: [ext_pu, subj_so, tam_ki]
+ - signature: "subj_so+dip+tam_ko+ext_pu|sodipkpu"
+ rules: [ext_pu, subj_so, tam_ko]
+ - signature: "subj_so+dip+tam_ku+ext_pu|sodipkpu"
+ rules: [ext_pu, subj_so, tam_ku]
+ - word: topatksu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_to+pat+tam_ka+ext_su|topatksu"
+ rules: [ext_su, subj_to, tam_ka]
+ - signature: "subj_to+pat+tam_ke+ext_su|topatksu"
+ rules: [ext_su, subj_to, tam_ke]
+ - signature: "subj_to+pat+tam_ki+ext_su|topatksu"
+ rules: [ext_su, subj_to, tam_ki]
+ - signature: "subj_to+pat+tam_ko+ext_su|topatksu"
+ rules: [ext_su, subj_to, tam_ko]
+ - signature: "subj_to+pat+tam_ku+ext_su|topatksu"
+ rules: [ext_su, subj_to, tam_ku]
+ - word: notagkkne
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_no+tag+tam_ka+ext_ka+o3_ne|notagkkne"
+ rules: [ext_ka, o3_ne, subj_no, tam_ka]
+ - signature: "subj_no+tag+tam_ke+ext_ka+o3_ne|notagkkne"
+ rules: [ext_ka, o3_ne, subj_no, tam_ke]
+ - signature: "subj_no+tag+tam_ki+ext_ka+o3_ne|notagkkne"
+ rules: [ext_ka, o3_ne, subj_no, tam_ki]
+ - signature: "subj_no+tag+tam_ko+ext_ka+o3_ne|notagkkne"
+ rules: [ext_ka, o3_ne, subj_no, tam_ko]
+ - signature: "subj_no+tag+tam_ku+ext_ka+o3_ne|notagkkne"
+ rules: [ext_ka, o3_ne, subj_no, tam_ku]
+ - word: pobiskrda
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_po+bis+tam_ka+ext_ri+o3_da|pobiskrda"
+ rules: [ext_ri, o3_da, subj_po, tam_ka]
+ - signature: "subj_po+bis+tam_ke+ext_ri+o3_da|pobiskrda"
+ rules: [ext_ri, o3_da, subj_po, tam_ke]
+ - signature: "subj_po+bis+tam_ki+ext_ri+o3_da|pobiskrda"
+ rules: [ext_ri, o3_da, subj_po, tam_ki]
+ - signature: "subj_po+bis+tam_ko+ext_ri+o3_da|pobiskrda"
+ rules: [ext_ri, o3_da, subj_po, tam_ko]
+ - signature: "subj_po+bis+tam_ku+ext_ri+o3_da|pobiskrda"
+ rules: [ext_ri, o3_da, subj_po, tam_ku]
+ - word: nunugkspi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_nu+nug+tam_ka+ext_su+o4_pi|nunugkspi"
+ rules: [ext_su, o4_pi, subj_nu, tam_ka]
+ - signature: "subj_nu+nug+tam_ke+ext_su+o4_pi|nunugkspi"
+ rules: [ext_su, o4_pi, subj_nu, tam_ke]
+ - signature: "subj_nu+nug+tam_ki+ext_su+o4_pi|nunugkspi"
+ rules: [ext_su, o4_pi, subj_nu, tam_ki]
+ - signature: "subj_nu+nug+tam_ko+ext_su+o4_pi|nunugkspi"
+ rules: [ext_su, o4_pi, subj_nu, tam_ko]
+ - signature: "subj_nu+nug+tam_ku+ext_su+o4_pi|nunugkspi"
+ rules: [ext_su, o4_pi, subj_nu, tam_ku]
+ - word: rotemkprra
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ro+tem+tam_ka+ext_pu+o2_ru+o3_ra|rotemkprra"
+ rules: [ext_pu, o2_ru, o3_ra, subj_ro, tam_ka]
+ - signature: "subj_ro+tem+tam_ke+ext_pu+o2_ru+o3_ra|rotemkprra"
+ rules: [ext_pu, o2_ru, o3_ra, subj_ro, tam_ke]
+ - signature: "subj_ro+tem+tam_ki+ext_pu+o2_ru+o3_ra|rotemkprra"
+ rules: [ext_pu, o2_ru, o3_ra, subj_ro, tam_ki]
+ - signature: "subj_ro+tem+tam_ko+ext_pu+o2_ru+o3_ra|rotemkprra"
+ rules: [ext_pu, o2_ru, o3_ra, subj_ro, tam_ko]
+ - signature: "subj_ro+tem+tam_ku+ext_pu+o2_ru+o3_ra|rotemkprra"
+ rules: [ext_pu, o2_ru, o3_ra, subj_ro, tam_ku]
+ - word: mowabkpdma
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_mo+wab+tam_ka+ext_pu+o2_di+o4_ma|mowabkpdma"
+ rules: [ext_pu, o2_di, o4_ma, subj_mo, tam_ka]
+ - signature: "subj_mo+wab+tam_ka+ext_pu+o3_da+o4_ma|mowabkpdma"
+ rules: [ext_pu, o3_da, o4_ma, subj_mo, tam_ka]
+ - signature: "subj_mo+wab+tam_ke+ext_pu+o2_di+o4_ma|mowabkpdma"
+ rules: [ext_pu, o2_di, o4_ma, subj_mo, tam_ke]
+ - signature: "subj_mo+wab+tam_ke+ext_pu+o3_da+o4_ma|mowabkpdma"
+ rules: [ext_pu, o3_da, o4_ma, subj_mo, tam_ke]
+ - signature: "subj_mo+wab+tam_ki+ext_pu+o2_di+o4_ma|mowabkpdma"
+ rules: [ext_pu, o2_di, o4_ma, subj_mo, tam_ki]
+ - signature: "subj_mo+wab+tam_ki+ext_pu+o3_da+o4_ma|mowabkpdma"
+ rules: [ext_pu, o3_da, o4_ma, subj_mo, tam_ki]
+ - signature: "subj_mo+wab+tam_ko+ext_pu+o2_di+o4_ma|mowabkpdma"
+ rules: [ext_pu, o2_di, o4_ma, subj_mo, tam_ko]
+ - signature: "subj_mo+wab+tam_ko+ext_pu+o3_da+o4_ma|mowabkpdma"
+ rules: [ext_pu, o3_da, o4_ma, subj_mo, tam_ko]
+ - signature: "subj_mo+wab+tam_ku+ext_pu+o2_di+o4_ma|mowabkpdma"
+ rules: [ext_pu, o2_di, o4_ma, subj_mo, tam_ku]
+ - signature: "subj_mo+wab+tam_ku+ext_pu+o3_da+o4_ma|mowabkpdma"
+ rules: [ext_pu, o3_da, o4_ma, subj_mo, tam_ku]
+ - word: nomerkkpa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_no+mer+tam_ka+ext_ka+o2_pa|nomerkkpa"
+ rules: [ext_ka, o2_pa, subj_no, tam_ka]
+ - signature: "subj_no+mer+tam_ke+ext_ka+o2_pa|nomerkkpa"
+ rules: [ext_ka, o2_pa, subj_no, tam_ke]
+ - signature: "subj_no+mer+tam_ki+ext_ka+o2_pa|nomerkkpa"
+ rules: [ext_ka, o2_pa, subj_no, tam_ki]
+ - signature: "subj_no+mer+tam_ko+ext_ka+o2_pa|nomerkkpa"
+ rules: [ext_ka, o2_pa, subj_no, tam_ko]
+ - signature: "subj_no+mer+tam_ku+ext_ka+o2_pa|nomerkkpa"
+ rules: [ext_ka, o2_pa, subj_no, tam_ku]
+ - word: sowabkndmi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_so+wab+tam_ka+ext_na+o2_di+o3_mi|sowabkndmi"
+ rules: [ext_na, o2_di, o3_mi, subj_so, tam_ka]
+ - signature: "subj_so+wab+tam_ke+ext_na+o2_di+o3_mi|sowabkndmi"
+ rules: [ext_na, o2_di, o3_mi, subj_so, tam_ke]
+ - signature: "subj_so+wab+tam_ki+ext_na+o2_di+o3_mi|sowabkndmi"
+ rules: [ext_na, o2_di, o3_mi, subj_so, tam_ki]
+ - signature: "subj_so+wab+tam_ko+ext_na+o2_di+o3_mi|sowabkndmi"
+ rules: [ext_na, o2_di, o3_mi, subj_so, tam_ko]
+ - signature: "subj_so+wab+tam_ku+ext_na+o2_di+o3_mi|sowabkndmi"
+ rules: [ext_na, o2_di, o3_mi, subj_so, tam_ku]
+ - word: mowenkmki
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_mo+wen+tam_ka+ext_mo+o3_ki|mowenkmki"
+ rules: [ext_mo, o3_ki, subj_mo, tam_ka]
+ - signature: "subj_mo+wen+tam_ke+ext_mo+o3_ki|mowenkmki"
+ rules: [ext_mo, o3_ki, subj_mo, tam_ke]
+ - signature: "subj_mo+wen+tam_ki+ext_mo+o3_ki|mowenkmki"
+ rules: [ext_mo, o3_ki, subj_mo, tam_ki]
+ - signature: "subj_mo+wen+tam_ko+ext_mo+o3_ki|mowenkmki"
+ rules: [ext_mo, o3_ki, subj_mo, tam_ko]
+ - signature: "subj_mo+wen+tam_ku+ext_mo+o3_ki|mowenkmki"
+ rules: [ext_mo, o3_ki, subj_mo, tam_ku]
+ - word: lomoskpra
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_lo+mos+tam_ka+ext_pu+o3_ra|lomoskpra"
+ rules: [ext_pu, o3_ra, subj_lo, tam_ka]
+ - signature: "subj_lo+mos+tam_ke+ext_pu+o3_ra|lomoskpra"
+ rules: [ext_pu, o3_ra, subj_lo, tam_ke]
+ - signature: "subj_lo+mos+tam_ki+ext_pu+o3_ra|lomoskpra"
+ rules: [ext_pu, o3_ra, subj_lo, tam_ki]
+ - signature: "subj_lo+mos+tam_ko+ext_pu+o3_ra|lomoskpra"
+ rules: [ext_pu, o3_ra, subj_lo, tam_ko]
+ - signature: "subj_lo+mos+tam_ku+ext_pu+o3_ra|lomoskpra"
+ rules: [ext_pu, o3_ra, subj_lo, tam_ku]
+ - word: dutemkmllu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_du+tem+tam_ka+ext_mo+o2_la+o4_lu|dutemkmllu"
+ rules: [ext_mo, o2_la, o4_lu, subj_du, tam_ka]
+ - signature: "subj_du+tem+tam_ka+ext_mo+o3_lo+o4_lu|dutemkmllu"
+ rules: [ext_mo, o3_lo, o4_lu, subj_du, tam_ka]
+ - signature: "subj_du+tem+tam_ke+ext_mo+o2_la+o4_lu|dutemkmllu"
+ rules: [ext_mo, o2_la, o4_lu, subj_du, tam_ke]
+ - signature: "subj_du+tem+tam_ke+ext_mo+o3_lo+o4_lu|dutemkmllu"
+ rules: [ext_mo, o3_lo, o4_lu, subj_du, tam_ke]
+ - signature: "subj_du+tem+tam_ki+ext_mo+o2_la+o4_lu|dutemkmllu"
+ rules: [ext_mo, o2_la, o4_lu, subj_du, tam_ki]
+ - signature: "subj_du+tem+tam_ki+ext_mo+o3_lo+o4_lu|dutemkmllu"
+ rules: [ext_mo, o3_lo, o4_lu, subj_du, tam_ki]
+ - signature: "subj_du+tem+tam_ko+ext_mo+o2_la+o4_lu|dutemkmllu"
+ rules: [ext_mo, o2_la, o4_lu, subj_du, tam_ko]
+ - signature: "subj_du+tem+tam_ko+ext_mo+o3_lo+o4_lu|dutemkmllu"
+ rules: [ext_mo, o3_lo, o4_lu, subj_du, tam_ko]
+ - signature: "subj_du+tem+tam_ku+ext_mo+o2_la+o4_lu|dutemkmllu"
+ rules: [ext_mo, o2_la, o4_lu, subj_du, tam_ku]
+ - signature: "subj_du+tem+tam_ku+ext_mo+o3_lo+o4_lu|dutemkmllu"
+ rules: [ext_mo, o3_lo, o4_lu, subj_du, tam_ku]
+ - word: lotagkna
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_lo+tag+tam_ka+ext_na|lotagkna"
+ rules: [ext_na, subj_lo, tam_ka]
+ - signature: "subj_lo+tag+tam_ke+ext_na|lotagkna"
+ rules: [ext_na, subj_lo, tam_ke]
+ - signature: "subj_lo+tag+tam_ki+ext_na|lotagkna"
+ rules: [ext_na, subj_lo, tam_ki]
+ - signature: "subj_lo+tag+tam_ko+ext_na|lotagkna"
+ rules: [ext_na, subj_lo, tam_ko]
+ - signature: "subj_lo+tag+tam_ku+ext_na|lotagkna"
+ rules: [ext_na, subj_lo, tam_ku]
+ - word: mogumksta
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_mo+gum+tam_ka+ext_su+o3_ta|mogumksta"
+ rules: [ext_su, o3_ta, subj_mo, tam_ka]
+ - signature: "subj_mo+gum+tam_ke+ext_su+o3_ta|mogumksta"
+ rules: [ext_su, o3_ta, subj_mo, tam_ke]
+ - signature: "subj_mo+gum+tam_ki+ext_su+o3_ta|mogumksta"
+ rules: [ext_su, o3_ta, subj_mo, tam_ki]
+ - signature: "subj_mo+gum+tam_ko+ext_su+o3_ta|mogumksta"
+ rules: [ext_su, o3_ta, subj_mo, tam_ko]
+ - signature: "subj_mo+gum+tam_ku+ext_su+o3_ta|mogumksta"
+ rules: [ext_su, o3_ta, subj_mo, tam_ku]
+ - word: hokesksnpi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ho+kes+tam_ka+ext_su+o2_no+o4_pi|hokesksnpi"
+ rules: [ext_su, o2_no, o4_pi, subj_ho, tam_ka]
+ - signature: "subj_ho+kes+tam_ka+ext_su+o3_ne+o4_pi|hokesksnpi"
+ rules: [ext_su, o3_ne, o4_pi, subj_ho, tam_ka]
+ - signature: "subj_ho+kes+tam_ke+ext_su+o2_no+o4_pi|hokesksnpi"
+ rules: [ext_su, o2_no, o4_pi, subj_ho, tam_ke]
+ - signature: "subj_ho+kes+tam_ke+ext_su+o3_ne+o4_pi|hokesksnpi"
+ rules: [ext_su, o3_ne, o4_pi, subj_ho, tam_ke]
+ - signature: "subj_ho+kes+tam_ki+ext_su+o2_no+o4_pi|hokesksnpi"
+ rules: [ext_su, o2_no, o4_pi, subj_ho, tam_ki]
+ - signature: "subj_ho+kes+tam_ki+ext_su+o3_ne+o4_pi|hokesksnpi"
+ rules: [ext_su, o3_ne, o4_pi, subj_ho, tam_ki]
+ - signature: "subj_ho+kes+tam_ko+ext_su+o2_no+o4_pi|hokesksnpi"
+ rules: [ext_su, o2_no, o4_pi, subj_ho, tam_ko]
+ - signature: "subj_ho+kes+tam_ko+ext_su+o3_ne+o4_pi|hokesksnpi"
+ rules: [ext_su, o3_ne, o4_pi, subj_ho, tam_ko]
+ - signature: "subj_ho+kes+tam_ku+ext_su+o2_no+o4_pi|hokesksnpi"
+ rules: [ext_su, o2_no, o4_pi, subj_ho, tam_ku]
+ - signature: "subj_ho+kes+tam_ku+ext_su+o3_ne+o4_pi|hokesksnpi"
+ rules: [ext_su, o3_ne, o4_pi, subj_ho, tam_ku]
+ - word: pobalklbpo
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_po+bal+tam_ka+ext_le+o2_ba+o3_po|pobalklbpo"
+ rules: [ext_le, o2_ba, o3_po, subj_po, tam_ka]
+ - signature: "subj_po+bal+tam_ke+ext_le+o2_ba+o3_po|pobalklbpo"
+ rules: [ext_le, o2_ba, o3_po, subj_po, tam_ke]
+ - signature: "subj_po+bal+tam_ki+ext_le+o2_ba+o3_po|pobalklbpo"
+ rules: [ext_le, o2_ba, o3_po, subj_po, tam_ki]
+ - signature: "subj_po+bal+tam_ko+ext_le+o2_ba+o3_po|pobalklbpo"
+ rules: [ext_le, o2_ba, o3_po, subj_po, tam_ko]
+ - signature: "subj_po+bal+tam_ku+ext_le+o2_ba+o3_po|pobalklbpo"
+ rules: [ext_le, o2_ba, o3_po, subj_po, tam_ku]
+ - word: sosolkklo
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_so+sol+tam_ka+ext_ka+o3_lo|sosolkklo"
+ rules: [ext_ka, o3_lo, subj_so, tam_ka]
+ - signature: "subj_so+sol+tam_ke+ext_ka+o3_lo|sosolkklo"
+ rules: [ext_ka, o3_lo, subj_so, tam_ke]
+ - signature: "subj_so+sol+tam_ki+ext_ka+o3_lo|sosolkklo"
+ rules: [ext_ka, o3_lo, subj_so, tam_ki]
+ - signature: "subj_so+sol+tam_ko+ext_ka+o3_lo|sosolkklo"
+ rules: [ext_ka, o3_lo, subj_so, tam_ko]
+ - signature: "subj_so+sol+tam_ku+ext_ka+o3_lo|sosolkklo"
+ rules: [ext_ka, o3_lo, subj_so, tam_ku]
+ - word: totagktpa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_to+tag+tam_ka+ext_ti+o2_pa|totagktpa"
+ rules: [ext_ti, o2_pa, subj_to, tam_ka]
+ - signature: "subj_to+tag+tam_ke+ext_ti+o2_pa|totagktpa"
+ rules: [ext_ti, o2_pa, subj_to, tam_ke]
+ - signature: "subj_to+tag+tam_ki+ext_ti+o2_pa|totagktpa"
+ rules: [ext_ti, o2_pa, subj_to, tam_ki]
+ - signature: "subj_to+tag+tam_ko+ext_ti+o2_pa|totagktpa"
+ rules: [ext_ti, o2_pa, subj_to, tam_ko]
+ - signature: "subj_to+tag+tam_ku+ext_ti+o2_pa|totagktpa"
+ rules: [ext_ti, o2_pa, subj_to, tam_ku]
+ - word: lobelktta
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_lo+bel+tam_ka+ext_ti+o3_ta|lobelktta"
+ rules: [ext_ti, o3_ta, subj_lo, tam_ka]
+ - signature: "subj_lo+bel+tam_ke+ext_ti+o3_ta|lobelktta"
+ rules: [ext_ti, o3_ta, subj_lo, tam_ke]
+ - signature: "subj_lo+bel+tam_ki+ext_ti+o3_ta|lobelktta"
+ rules: [ext_ti, o3_ta, subj_lo, tam_ki]
+ - signature: "subj_lo+bel+tam_ko+ext_ti+o3_ta|lobelktta"
+ rules: [ext_ti, o3_ta, subj_lo, tam_ko]
+ - signature: "subj_lo+bel+tam_ku+ext_ti+o3_ta|lobelktta"
+ rules: [ext_ti, o3_ta, subj_lo, tam_ku]
+ - word: sobelksu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_so+bel+tam_ka+ext_su|sobelksu"
+ rules: [ext_su, subj_so, tam_ka]
+ - signature: "subj_so+bel+tam_ke+ext_su|sobelksu"
+ rules: [ext_su, subj_so, tam_ke]
+ - signature: "subj_so+bel+tam_ki+ext_su|sobelksu"
+ rules: [ext_su, subj_so, tam_ki]
+ - signature: "subj_so+bel+tam_ko+ext_su|sobelksu"
+ rules: [ext_su, subj_so, tam_ko]
+ - signature: "subj_so+bel+tam_ku+ext_su|sobelksu"
+ rules: [ext_su, subj_so, tam_ku]
+ - word: rotemkka
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ro+tem+tam_ka+ext_ka|rotemkka"
+ rules: [ext_ka, subj_ro, tam_ka]
+ - signature: "subj_ro+tem+tam_ke+ext_ka|rotemkka"
+ rules: [ext_ka, subj_ro, tam_ke]
+ - signature: "subj_ro+tem+tam_ki+ext_ka|rotemkka"
+ rules: [ext_ka, subj_ro, tam_ki]
+ - signature: "subj_ro+tem+tam_ko+ext_ka|rotemkka"
+ rules: [ext_ka, subj_ro, tam_ko]
+ - signature: "subj_ro+tem+tam_ku+ext_ka|rotemkka"
+ rules: [ext_ka, subj_ro, tam_ku]
+ - word: dumerkrkni
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_du+mer+tam_ka+ext_ri+o2_ko+o4_ni|dumerkrkni"
+ rules: [ext_ri, o2_ko, o4_ni, subj_du, tam_ka]
+ - signature: "subj_du+mer+tam_ka+ext_ri+o3_ki+o4_ni|dumerkrkni"
+ rules: [ext_ri, o3_ki, o4_ni, subj_du, tam_ka]
+ - signature: "subj_du+mer+tam_ke+ext_ri+o2_ko+o4_ni|dumerkrkni"
+ rules: [ext_ri, o2_ko, o4_ni, subj_du, tam_ke]
+ - signature: "subj_du+mer+tam_ke+ext_ri+o3_ki+o4_ni|dumerkrkni"
+ rules: [ext_ri, o3_ki, o4_ni, subj_du, tam_ke]
+ - signature: "subj_du+mer+tam_ki+ext_ri+o2_ko+o4_ni|dumerkrkni"
+ rules: [ext_ri, o2_ko, o4_ni, subj_du, tam_ki]
+ - signature: "subj_du+mer+tam_ki+ext_ri+o3_ki+o4_ni|dumerkrkni"
+ rules: [ext_ri, o3_ki, o4_ni, subj_du, tam_ki]
+ - signature: "subj_du+mer+tam_ko+ext_ri+o2_ko+o4_ni|dumerkrkni"
+ rules: [ext_ri, o2_ko, o4_ni, subj_du, tam_ko]
+ - signature: "subj_du+mer+tam_ko+ext_ri+o3_ki+o4_ni|dumerkrkni"
+ rules: [ext_ri, o3_ki, o4_ni, subj_du, tam_ko]
+ - signature: "subj_du+mer+tam_ku+ext_ri+o2_ko+o4_ni|dumerkrkni"
+ rules: [ext_ri, o2_ko, o4_ni, subj_du, tam_ku]
+ - signature: "subj_du+mer+tam_ku+ext_ri+o3_ki+o4_ni|dumerkrkni"
+ rules: [ext_ri, o3_ki, o4_ni, subj_du, tam_ku]
+ - word: wotemknlra
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_wo+tem+tam_ka+ext_na+o2_la+o3_ra|wotemknlra"
+ rules: [ext_na, o2_la, o3_ra, subj_wo, tam_ka]
+ - signature: "subj_wo+tem+tam_ke+ext_na+o2_la+o3_ra|wotemknlra"
+ rules: [ext_na, o2_la, o3_ra, subj_wo, tam_ke]
+ - signature: "subj_wo+tem+tam_ki+ext_na+o2_la+o3_ra|wotemknlra"
+ rules: [ext_na, o2_la, o3_ra, subj_wo, tam_ki]
+ - signature: "subj_wo+tem+tam_ko+ext_na+o2_la+o3_ra|wotemknlra"
+ rules: [ext_na, o2_la, o3_ra, subj_wo, tam_ko]
+ - signature: "subj_wo+tem+tam_ku+ext_na+o2_la+o3_ra|wotemknlra"
+ rules: [ext_na, o2_la, o3_ra, subj_wo, tam_ku]
+ - word: lobalkkbma
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_lo+bal+tam_ka+ext_ka+o2_ba+o4_ma|lobalkkbma"
+ rules: [ext_ka, o2_ba, o4_ma, subj_lo, tam_ka]
+ - signature: "subj_lo+bal+tam_ka+ext_ka+o3_bu+o4_ma|lobalkkbma"
+ rules: [ext_ka, o3_bu, o4_ma, subj_lo, tam_ka]
+ - signature: "subj_lo+bal+tam_ke+ext_ka+o2_ba+o4_ma|lobalkkbma"
+ rules: [ext_ka, o2_ba, o4_ma, subj_lo, tam_ke]
+ - signature: "subj_lo+bal+tam_ke+ext_ka+o3_bu+o4_ma|lobalkkbma"
+ rules: [ext_ka, o3_bu, o4_ma, subj_lo, tam_ke]
+ - signature: "subj_lo+bal+tam_ki+ext_ka+o2_ba+o4_ma|lobalkkbma"
+ rules: [ext_ka, o2_ba, o4_ma, subj_lo, tam_ki]
+ - signature: "subj_lo+bal+tam_ki+ext_ka+o3_bu+o4_ma|lobalkkbma"
+ rules: [ext_ka, o3_bu, o4_ma, subj_lo, tam_ki]
+ - signature: "subj_lo+bal+tam_ko+ext_ka+o2_ba+o4_ma|lobalkkbma"
+ rules: [ext_ka, o2_ba, o4_ma, subj_lo, tam_ko]
+ - signature: "subj_lo+bal+tam_ko+ext_ka+o3_bu+o4_ma|lobalkkbma"
+ rules: [ext_ka, o3_bu, o4_ma, subj_lo, tam_ko]
+ - signature: "subj_lo+bal+tam_ku+ext_ka+o2_ba+o4_ma|lobalkkbma"
+ rules: [ext_ka, o2_ba, o4_ma, subj_lo, tam_ku]
+ - signature: "subj_lo+bal+tam_ku+ext_ka+o3_bu+o4_ma|lobalkkbma"
+ rules: [ext_ka, o3_bu, o4_ma, subj_lo, tam_ku]
+ - word: yotulkmkhi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_yo+tul+tam_ka+ext_mo+o2_ko+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o2_ko, o4_hi, subj_yo, tam_ka]
+ - signature: "subj_yo+tul+tam_ka+ext_mo+o3_ki+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o3_ki, o4_hi, subj_yo, tam_ka]
+ - signature: "subj_yo+tul+tam_ke+ext_mo+o2_ko+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o2_ko, o4_hi, subj_yo, tam_ke]
+ - signature: "subj_yo+tul+tam_ke+ext_mo+o3_ki+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o3_ki, o4_hi, subj_yo, tam_ke]
+ - signature: "subj_yo+tul+tam_ki+ext_mo+o2_ko+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o2_ko, o4_hi, subj_yo, tam_ki]
+ - signature: "subj_yo+tul+tam_ki+ext_mo+o3_ki+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o3_ki, o4_hi, subj_yo, tam_ki]
+ - signature: "subj_yo+tul+tam_ko+ext_mo+o2_ko+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o2_ko, o4_hi, subj_yo, tam_ko]
+ - signature: "subj_yo+tul+tam_ko+ext_mo+o3_ki+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o3_ki, o4_hi, subj_yo, tam_ko]
+ - signature: "subj_yo+tul+tam_ku+ext_mo+o2_ko+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o2_ko, o4_hi, subj_yo, tam_ku]
+ - signature: "subj_yo+tul+tam_ku+ext_mo+o3_ki+o4_hi|yotulkmkhi"
+ rules: [ext_mo, o3_ki, o4_hi, subj_yo, tam_ku]
+ - word: horotktta
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ho+rot+tam_ka+ext_ti+o3_ta|horotktta"
+ rules: [ext_ti, o3_ta, subj_ho, tam_ka]
+ - signature: "subj_ho+rot+tam_ke+ext_ti+o3_ta|horotktta"
+ rules: [ext_ti, o3_ta, subj_ho, tam_ke]
+ - signature: "subj_ho+rot+tam_ki+ext_ti+o3_ta|horotktta"
+ rules: [ext_ti, o3_ta, subj_ho, tam_ki]
+ - signature: "subj_ho+rot+tam_ko+ext_ti+o3_ta|horotktta"
+ rules: [ext_ti, o3_ta, subj_ho, tam_ko]
+ - signature: "subj_ho+rot+tam_ku+ext_ti+o3_ta|horotktta"
+ rules: [ext_ti, o3_ta, subj_ho, tam_ku]
+ - word: lolubknlsa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_lo+lub+tam_ka+ext_na+o2_la+o4_sa|lolubknlsa"
+ rules: [ext_na, o2_la, o4_sa, subj_lo, tam_ka]
+ - signature: "subj_lo+lub+tam_ka+ext_na+o3_lo+o4_sa|lolubknlsa"
+ rules: [ext_na, o3_lo, o4_sa, subj_lo, tam_ka]
+ - signature: "subj_lo+lub+tam_ke+ext_na+o2_la+o4_sa|lolubknlsa"
+ rules: [ext_na, o2_la, o4_sa, subj_lo, tam_ke]
+ - signature: "subj_lo+lub+tam_ke+ext_na+o3_lo+o4_sa|lolubknlsa"
+ rules: [ext_na, o3_lo, o4_sa, subj_lo, tam_ke]
+ - signature: "subj_lo+lub+tam_ki+ext_na+o2_la+o4_sa|lolubknlsa"
+ rules: [ext_na, o2_la, o4_sa, subj_lo, tam_ki]
+ - signature: "subj_lo+lub+tam_ki+ext_na+o3_lo+o4_sa|lolubknlsa"
+ rules: [ext_na, o3_lo, o4_sa, subj_lo, tam_ki]
+ - signature: "subj_lo+lub+tam_ko+ext_na+o2_la+o4_sa|lolubknlsa"
+ rules: [ext_na, o2_la, o4_sa, subj_lo, tam_ko]
+ - signature: "subj_lo+lub+tam_ko+ext_na+o3_lo+o4_sa|lolubknlsa"
+ rules: [ext_na, o3_lo, o4_sa, subj_lo, tam_ko]
+ - signature: "subj_lo+lub+tam_ku+ext_na+o2_la+o4_sa|lolubknlsa"
+ rules: [ext_na, o2_la, o4_sa, subj_lo, tam_ku]
+ - signature: "subj_lo+lub+tam_ku+ext_na+o3_lo+o4_sa|lolubknlsa"
+ rules: [ext_na, o3_lo, o4_sa, subj_lo, tam_ku]
+ - word: nogorkkmni
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_no+gor+tam_ka+ext_ka+o2_me+o4_ni|nogorkkmni"
+ rules: [ext_ka, o2_me, o4_ni, subj_no, tam_ka]
+ - signature: "subj_no+gor+tam_ka+ext_ka+o3_mi+o4_ni|nogorkkmni"
+ rules: [ext_ka, o3_mi, o4_ni, subj_no, tam_ka]
+ - signature: "subj_no+gor+tam_ke+ext_ka+o2_me+o4_ni|nogorkkmni"
+ rules: [ext_ka, o2_me, o4_ni, subj_no, tam_ke]
+ - signature: "subj_no+gor+tam_ke+ext_ka+o3_mi+o4_ni|nogorkkmni"
+ rules: [ext_ka, o3_mi, o4_ni, subj_no, tam_ke]
+ - signature: "subj_no+gor+tam_ki+ext_ka+o2_me+o4_ni|nogorkkmni"
+ rules: [ext_ka, o2_me, o4_ni, subj_no, tam_ki]
+ - signature: "subj_no+gor+tam_ki+ext_ka+o3_mi+o4_ni|nogorkkmni"
+ rules: [ext_ka, o3_mi, o4_ni, subj_no, tam_ki]
+ - signature: "subj_no+gor+tam_ko+ext_ka+o2_me+o4_ni|nogorkkmni"
+ rules: [ext_ka, o2_me, o4_ni, subj_no, tam_ko]
+ - signature: "subj_no+gor+tam_ko+ext_ka+o3_mi+o4_ni|nogorkkmni"
+ rules: [ext_ka, o3_mi, o4_ni, subj_no, tam_ko]
+ - signature: "subj_no+gor+tam_ku+ext_ka+o2_me+o4_ni|nogorkkmni"
+ rules: [ext_ka, o2_me, o4_ni, subj_no, tam_ku]
+ - signature: "subj_no+gor+tam_ku+ext_ka+o3_mi+o4_ni|nogorkkmni"
+ rules: [ext_ka, o3_mi, o4_ni, subj_no, tam_ku]
+ - word: dubalkshmlu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_du+bal+tam_ka+ext_su+o2_he+o3_mi+o4_lu|dubalkshmlu"
+ rules: [ext_su, o2_he, o3_mi, o4_lu, subj_du, tam_ka]
+ - signature: "subj_du+bal+tam_ke+ext_su+o2_he+o3_mi+o4_lu|dubalkshmlu"
+ rules: [ext_su, o2_he, o3_mi, o4_lu, subj_du, tam_ke]
+ - signature: "subj_du+bal+tam_ki+ext_su+o2_he+o3_mi+o4_lu|dubalkshmlu"
+ rules: [ext_su, o2_he, o3_mi, o4_lu, subj_du, tam_ki]
+ - signature: "subj_du+bal+tam_ko+ext_su+o2_he+o3_mi+o4_lu|dubalkshmlu"
+ rules: [ext_su, o2_he, o3_mi, o4_lu, subj_du, tam_ko]
+ - signature: "subj_du+bal+tam_ku+ext_su+o2_he+o3_mi+o4_lu|dubalkshmlu"
+ rules: [ext_su, o2_he, o3_mi, o4_lu, subj_du, tam_ku]
+ - word: yomosknbtke
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_yo+mos+tam_ka+ext_na+o2_ba+o3_ta+o4_ke|yomosknbtke"
+ rules: [ext_na, o2_ba, o3_ta, o4_ke, subj_yo, tam_ka]
+ - signature: "subj_yo+mos+tam_ke+ext_na+o2_ba+o3_ta+o4_ke|yomosknbtke"
+ rules: [ext_na, o2_ba, o3_ta, o4_ke, subj_yo, tam_ke]
+ - signature: "subj_yo+mos+tam_ki+ext_na+o2_ba+o3_ta+o4_ke|yomosknbtke"
+ rules: [ext_na, o2_ba, o3_ta, o4_ke, subj_yo, tam_ki]
+ - signature: "subj_yo+mos+tam_ko+ext_na+o2_ba+o3_ta+o4_ke|yomosknbtke"
+ rules: [ext_na, o2_ba, o3_ta, o4_ke, subj_yo, tam_ko]
+ - signature: "subj_yo+mos+tam_ku+ext_na+o2_ba+o3_ta+o4_ke|yomosknbtke"
+ rules: [ext_na, o2_ba, o3_ta, o4_ke, subj_yo, tam_ku]
+ - word: mopatktnga
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_mo+pat+tam_ka+ext_ti+o2_no+o4_ga|mopatktnga"
+ rules: [ext_ti, o2_no, o4_ga, subj_mo, tam_ka]
+ - signature: "subj_mo+pat+tam_ka+ext_ti+o3_ne+o4_ga|mopatktnga"
+ rules: [ext_ti, o3_ne, o4_ga, subj_mo, tam_ka]
+ - signature: "subj_mo+pat+tam_ke+ext_ti+o2_no+o4_ga|mopatktnga"
+ rules: [ext_ti, o2_no, o4_ga, subj_mo, tam_ke]
+ - signature: "subj_mo+pat+tam_ke+ext_ti+o3_ne+o4_ga|mopatktnga"
+ rules: [ext_ti, o3_ne, o4_ga, subj_mo, tam_ke]
+ - signature: "subj_mo+pat+tam_ki+ext_ti+o2_no+o4_ga|mopatktnga"
+ rules: [ext_ti, o2_no, o4_ga, subj_mo, tam_ki]
+ - signature: "subj_mo+pat+tam_ki+ext_ti+o3_ne+o4_ga|mopatktnga"
+ rules: [ext_ti, o3_ne, o4_ga, subj_mo, tam_ki]
+ - signature: "subj_mo+pat+tam_ko+ext_ti+o2_no+o4_ga|mopatktnga"
+ rules: [ext_ti, o2_no, o4_ga, subj_mo, tam_ko]
+ - signature: "subj_mo+pat+tam_ko+ext_ti+o3_ne+o4_ga|mopatktnga"
+ rules: [ext_ti, o3_ne, o4_ga, subj_mo, tam_ko]
+ - signature: "subj_mo+pat+tam_ku+ext_ti+o2_no+o4_ga|mopatktnga"
+ rules: [ext_ti, o2_no, o4_ga, subj_mo, tam_ku]
+ - signature: "subj_mo+pat+tam_ku+ext_ti+o3_ne+o4_ga|mopatktnga"
+ rules: [ext_ti, o3_ne, o4_ga, subj_mo, tam_ku]
+ - word: hodipktpplu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ho+dip+tam_ka+ext_ti+o2_pa+o3_po+o4_lu|hodipktpplu"
+ rules: [ext_ti, o2_pa, o3_po, o4_lu, subj_ho, tam_ka]
+ - signature: "subj_ho+dip+tam_ke+ext_ti+o2_pa+o3_po+o4_lu|hodipktpplu"
+ rules: [ext_ti, o2_pa, o3_po, o4_lu, subj_ho, tam_ke]
+ - signature: "subj_ho+dip+tam_ki+ext_ti+o2_pa+o3_po+o4_lu|hodipktpplu"
+ rules: [ext_ti, o2_pa, o3_po, o4_lu, subj_ho, tam_ki]
+ - signature: "subj_ho+dip+tam_ko+ext_ti+o2_pa+o3_po+o4_lu|hodipktpplu"
+ rules: [ext_ti, o2_pa, o3_po, o4_lu, subj_ho, tam_ko]
+ - signature: "subj_ho+dip+tam_ku+ext_ti+o2_pa+o3_po+o4_lu|hodipktpplu"
+ rules: [ext_ti, o2_pa, o3_po, o4_lu, subj_ho, tam_ku]
+ - word: nuremknltke
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_nu+rem+tam_ka+ext_na+o2_la+o3_ta+o4_ke|nuremknltke"
+ rules: [ext_na, o2_la, o3_ta, o4_ke, subj_nu, tam_ka]
+ - signature: "subj_nu+rem+tam_ke+ext_na+o2_la+o3_ta+o4_ke|nuremknltke"
+ rules: [ext_na, o2_la, o3_ta, o4_ke, subj_nu, tam_ke]
+ - signature: "subj_nu+rem+tam_ki+ext_na+o2_la+o3_ta+o4_ke|nuremknltke"
+ rules: [ext_na, o2_la, o3_ta, o4_ke, subj_nu, tam_ki]
+ - signature: "subj_nu+rem+tam_ko+ext_na+o2_la+o3_ta+o4_ke|nuremknltke"
+ rules: [ext_na, o2_la, o3_ta, o4_ke, subj_nu, tam_ko]
+ - signature: "subj_nu+rem+tam_ku+ext_na+o2_la+o3_ta+o4_ke|nuremknltke"
+ rules: [ext_na, o2_la, o3_ta, o4_ke, subj_nu, tam_ku]
+ - word: gowabkmlke
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_go+wab+tam_ka+ext_mo+o2_la+o4_ke|gowabkmlke"
+ rules: [ext_mo, o2_la, o4_ke, subj_go, tam_ka]
+ - signature: "subj_go+wab+tam_ka+ext_mo+o3_lo+o4_ke|gowabkmlke"
+ rules: [ext_mo, o3_lo, o4_ke, subj_go, tam_ka]
+ - signature: "subj_go+wab+tam_ke+ext_mo+o2_la+o4_ke|gowabkmlke"
+ rules: [ext_mo, o2_la, o4_ke, subj_go, tam_ke]
+ - signature: "subj_go+wab+tam_ke+ext_mo+o3_lo+o4_ke|gowabkmlke"
+ rules: [ext_mo, o3_lo, o4_ke, subj_go, tam_ke]
+ - signature: "subj_go+wab+tam_ki+ext_mo+o2_la+o4_ke|gowabkmlke"
+ rules: [ext_mo, o2_la, o4_ke, subj_go, tam_ki]
+ - signature: "subj_go+wab+tam_ki+ext_mo+o3_lo+o4_ke|gowabkmlke"
+ rules: [ext_mo, o3_lo, o4_ke, subj_go, tam_ki]
+ - signature: "subj_go+wab+tam_ko+ext_mo+o2_la+o4_ke|gowabkmlke"
+ rules: [ext_mo, o2_la, o4_ke, subj_go, tam_ko]
+ - signature: "subj_go+wab+tam_ko+ext_mo+o3_lo+o4_ke|gowabkmlke"
+ rules: [ext_mo, o3_lo, o4_ke, subj_go, tam_ko]
+ - signature: "subj_go+wab+tam_ku+ext_mo+o2_la+o4_ke|gowabkmlke"
+ rules: [ext_mo, o2_la, o4_ke, subj_go, tam_ku]
+ - signature: "subj_go+wab+tam_ku+ext_mo+o3_lo+o4_ke|gowabkmlke"
+ rules: [ext_mo, o3_lo, o4_ke, subj_go, tam_ku]
+ - word: bunemksdpi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_bu+nem+tam_ka+ext_su+o2_di+o4_pi|bunemksdpi"
+ rules: [ext_su, o2_di, o4_pi, subj_bu, tam_ka]
+ - signature: "subj_bu+nem+tam_ka+ext_su+o3_da+o4_pi|bunemksdpi"
+ rules: [ext_su, o3_da, o4_pi, subj_bu, tam_ka]
+ - signature: "subj_bu+nem+tam_ke+ext_su+o2_di+o4_pi|bunemksdpi"
+ rules: [ext_su, o2_di, o4_pi, subj_bu, tam_ke]
+ - signature: "subj_bu+nem+tam_ke+ext_su+o3_da+o4_pi|bunemksdpi"
+ rules: [ext_su, o3_da, o4_pi, subj_bu, tam_ke]
+ - signature: "subj_bu+nem+tam_ki+ext_su+o2_di+o4_pi|bunemksdpi"
+ rules: [ext_su, o2_di, o4_pi, subj_bu, tam_ki]
+ - signature: "subj_bu+nem+tam_ki+ext_su+o3_da+o4_pi|bunemksdpi"
+ rules: [ext_su, o3_da, o4_pi, subj_bu, tam_ki]
+ - signature: "subj_bu+nem+tam_ko+ext_su+o2_di+o4_pi|bunemksdpi"
+ rules: [ext_su, o2_di, o4_pi, subj_bu, tam_ko]
+ - signature: "subj_bu+nem+tam_ko+ext_su+o3_da+o4_pi|bunemksdpi"
+ rules: [ext_su, o3_da, o4_pi, subj_bu, tam_ko]
+ - signature: "subj_bu+nem+tam_ku+ext_su+o2_di+o4_pi|bunemksdpi"
+ rules: [ext_su, o2_di, o4_pi, subj_bu, tam_ku]
+ - signature: "subj_bu+nem+tam_ku+ext_su+o3_da+o4_pi|bunemksdpi"
+ rules: [ext_su, o3_da, o4_pi, subj_bu, tam_ku]
+ - word: honemkske
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ho+nem+tam_ka+ext_su+o4_ke|honemkske"
+ rules: [ext_su, o4_ke, subj_ho, tam_ka]
+ - signature: "subj_ho+nem+tam_ke+ext_su+o4_ke|honemkske"
+ rules: [ext_su, o4_ke, subj_ho, tam_ke]
+ - signature: "subj_ho+nem+tam_ki+ext_su+o4_ke|honemkske"
+ rules: [ext_su, o4_ke, subj_ho, tam_ki]
+ - signature: "subj_ho+nem+tam_ko+ext_su+o4_ke|honemkske"
+ rules: [ext_su, o4_ke, subj_ho, tam_ko]
+ - signature: "subj_ho+nem+tam_ku+ext_su+o4_ke|honemkske"
+ rules: [ext_su, o4_ke, subj_ho, tam_ku]
+ - word: wobiskrhblu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_wo+bis+tam_ka+ext_ri+o2_he+o3_bu+o4_lu|wobiskrhblu"
+ rules: [ext_ri, o2_he, o3_bu, o4_lu, subj_wo, tam_ka]
+ - signature: "subj_wo+bis+tam_ke+ext_ri+o2_he+o3_bu+o4_lu|wobiskrhblu"
+ rules: [ext_ri, o2_he, o3_bu, o4_lu, subj_wo, tam_ke]
+ - signature: "subj_wo+bis+tam_ki+ext_ri+o2_he+o3_bu+o4_lu|wobiskrhblu"
+ rules: [ext_ri, o2_he, o3_bu, o4_lu, subj_wo, tam_ki]
+ - signature: "subj_wo+bis+tam_ko+ext_ri+o2_he+o3_bu+o4_lu|wobiskrhblu"
+ rules: [ext_ri, o2_he, o3_bu, o4_lu, subj_wo, tam_ko]
+ - signature: "subj_wo+bis+tam_ku+ext_ri+o2_he+o3_bu+o4_lu|wobiskrhblu"
+ rules: [ext_ri, o2_he, o3_bu, o4_lu, subj_wo, tam_ku]
+ - word: nunemkpu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_nu+nem+tam_ka+ext_pu|nunemkpu"
+ rules: [ext_pu, subj_nu, tam_ka]
+ - signature: "subj_nu+nem+tam_ke+ext_pu|nunemkpu"
+ rules: [ext_pu, subj_nu, tam_ke]
+ - signature: "subj_nu+nem+tam_ki+ext_pu|nunemkpu"
+ rules: [ext_pu, subj_nu, tam_ki]
+ - signature: "subj_nu+nem+tam_ko+ext_pu|nunemkpu"
+ rules: [ext_pu, subj_nu, tam_ko]
+ - signature: "subj_nu+nem+tam_ku+ext_pu|nunemkpu"
+ rules: [ext_pu, subj_nu, tam_ku]
+ - word: nuremkpsa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_nu+rem+tam_ka+ext_pu+o4_sa|nuremkpsa"
+ rules: [ext_pu, o4_sa, subj_nu, tam_ka]
+ - signature: "subj_nu+rem+tam_ke+ext_pu+o4_sa|nuremkpsa"
+ rules: [ext_pu, o4_sa, subj_nu, tam_ke]
+ - signature: "subj_nu+rem+tam_ki+ext_pu+o4_sa|nuremkpsa"
+ rules: [ext_pu, o4_sa, subj_nu, tam_ki]
+ - signature: "subj_nu+rem+tam_ko+ext_pu+o4_sa|nuremkpsa"
+ rules: [ext_pu, o4_sa, subj_nu, tam_ko]
+ - signature: "subj_nu+rem+tam_ku+ext_pu+o4_sa|nuremkpsa"
+ rules: [ext_pu, o4_sa, subj_nu, tam_ku]
+ - word: gopirkmkksa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_go+pir+tam_ka+ext_mo+o2_ko+o3_ki+o4_sa|gopirkmkksa"
+ rules: [ext_mo, o2_ko, o3_ki, o4_sa, subj_go, tam_ka]
+ - signature: "subj_go+pir+tam_ke+ext_mo+o2_ko+o3_ki+o4_sa|gopirkmkksa"
+ rules: [ext_mo, o2_ko, o3_ki, o4_sa, subj_go, tam_ke]
+ - signature: "subj_go+pir+tam_ki+ext_mo+o2_ko+o3_ki+o4_sa|gopirkmkksa"
+ rules: [ext_mo, o2_ko, o3_ki, o4_sa, subj_go, tam_ki]
+ - signature: "subj_go+pir+tam_ko+ext_mo+o2_ko+o3_ki+o4_sa|gopirkmkksa"
+ rules: [ext_mo, o2_ko, o3_ki, o4_sa, subj_go, tam_ko]
+ - signature: "subj_go+pir+tam_ku+ext_mo+o2_ko+o3_ki+o4_sa|gopirkmkksa"
+ rules: [ext_mo, o2_ko, o3_ki, o4_sa, subj_go, tam_ku]
+ - word: nomerkthksa
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_no+mer+tam_ka+ext_ti+o2_he+o3_ki+o4_sa|nomerkthksa"
+ rules: [ext_ti, o2_he, o3_ki, o4_sa, subj_no, tam_ka]
+ - signature: "subj_no+mer+tam_ke+ext_ti+o2_he+o3_ki+o4_sa|nomerkthksa"
+ rules: [ext_ti, o2_he, o3_ki, o4_sa, subj_no, tam_ke]
+ - signature: "subj_no+mer+tam_ki+ext_ti+o2_he+o3_ki+o4_sa|nomerkthksa"
+ rules: [ext_ti, o2_he, o3_ki, o4_sa, subj_no, tam_ki]
+ - signature: "subj_no+mer+tam_ko+ext_ti+o2_he+o3_ki+o4_sa|nomerkthksa"
+ rules: [ext_ti, o2_he, o3_ki, o4_sa, subj_no, tam_ko]
+ - signature: "subj_no+mer+tam_ku+ext_ti+o2_he+o3_ki+o4_sa|nomerkthksa"
+ rules: [ext_ti, o2_he, o3_ki, o4_sa, subj_no, tam_ku]
+ - word: sokesksnke
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_so+kes+tam_ka+ext_su+o2_no+o4_ke|sokesksnke"
+ rules: [ext_su, o2_no, o4_ke, subj_so, tam_ka]
+ - signature: "subj_so+kes+tam_ka+ext_su+o3_ne+o4_ke|sokesksnke"
+ rules: [ext_su, o3_ne, o4_ke, subj_so, tam_ka]
+ - signature: "subj_so+kes+tam_ke+ext_su+o2_no+o4_ke|sokesksnke"
+ rules: [ext_su, o2_no, o4_ke, subj_so, tam_ke]
+ - signature: "subj_so+kes+tam_ke+ext_su+o3_ne+o4_ke|sokesksnke"
+ rules: [ext_su, o3_ne, o4_ke, subj_so, tam_ke]
+ - signature: "subj_so+kes+tam_ki+ext_su+o2_no+o4_ke|sokesksnke"
+ rules: [ext_su, o2_no, o4_ke, subj_so, tam_ki]
+ - signature: "subj_so+kes+tam_ki+ext_su+o3_ne+o4_ke|sokesksnke"
+ rules: [ext_su, o3_ne, o4_ke, subj_so, tam_ki]
+ - signature: "subj_so+kes+tam_ko+ext_su+o2_no+o4_ke|sokesksnke"
+ rules: [ext_su, o2_no, o4_ke, subj_so, tam_ko]
+ - signature: "subj_so+kes+tam_ko+ext_su+o3_ne+o4_ke|sokesksnke"
+ rules: [ext_su, o3_ne, o4_ke, subj_so, tam_ko]
+ - signature: "subj_so+kes+tam_ku+ext_su+o2_no+o4_ke|sokesksnke"
+ rules: [ext_su, o2_no, o4_ke, subj_so, tam_ku]
+ - signature: "subj_so+kes+tam_ku+ext_su+o3_ne+o4_ke|sokesksnke"
+ rules: [ext_su, o3_ne, o4_ke, subj_so, tam_ku]
+ - word: kolenktpma
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ko+len+tam_ka+ext_ti+o2_pa+o4_ma|kolenktpma"
+ rules: [ext_ti, o2_pa, o4_ma, subj_ko, tam_ka]
+ - signature: "subj_ko+len+tam_ka+ext_ti+o3_po+o4_ma|kolenktpma"
+ rules: [ext_ti, o3_po, o4_ma, subj_ko, tam_ka]
+ - signature: "subj_ko+len+tam_ke+ext_ti+o2_pa+o4_ma|kolenktpma"
+ rules: [ext_ti, o2_pa, o4_ma, subj_ko, tam_ke]
+ - signature: "subj_ko+len+tam_ke+ext_ti+o3_po+o4_ma|kolenktpma"
+ rules: [ext_ti, o3_po, o4_ma, subj_ko, tam_ke]
+ - signature: "subj_ko+len+tam_ki+ext_ti+o2_pa+o4_ma|kolenktpma"
+ rules: [ext_ti, o2_pa, o4_ma, subj_ko, tam_ki]
+ - signature: "subj_ko+len+tam_ki+ext_ti+o3_po+o4_ma|kolenktpma"
+ rules: [ext_ti, o3_po, o4_ma, subj_ko, tam_ki]
+ - signature: "subj_ko+len+tam_ko+ext_ti+o2_pa+o4_ma|kolenktpma"
+ rules: [ext_ti, o2_pa, o4_ma, subj_ko, tam_ko]
+ - signature: "subj_ko+len+tam_ko+ext_ti+o3_po+o4_ma|kolenktpma"
+ rules: [ext_ti, o3_po, o4_ma, subj_ko, tam_ko]
+ - signature: "subj_ko+len+tam_ku+ext_ti+o2_pa+o4_ma|kolenktpma"
+ rules: [ext_ti, o2_pa, o4_ma, subj_ko, tam_ku]
+ - signature: "subj_ko+len+tam_ku+ext_ti+o3_po+o4_ma|kolenktpma"
+ rules: [ext_ti, o3_po, o4_ma, subj_ko, tam_ku]
+ - word: bumerklbkbo
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_bu+mer+tam_ka+ext_le+o2_ba+o3_ki+o4_bo|bumerklbkbo"
+ rules: [ext_le, o2_ba, o3_ki, o4_bo, subj_bu, tam_ka]
+ - signature: "subj_bu+mer+tam_ke+ext_le+o2_ba+o3_ki+o4_bo|bumerklbkbo"
+ rules: [ext_le, o2_ba, o3_ki, o4_bo, subj_bu, tam_ke]
+ - signature: "subj_bu+mer+tam_ki+ext_le+o2_ba+o3_ki+o4_bo|bumerklbkbo"
+ rules: [ext_le, o2_ba, o3_ki, o4_bo, subj_bu, tam_ki]
+ - signature: "subj_bu+mer+tam_ko+ext_le+o2_ba+o3_ki+o4_bo|bumerklbkbo"
+ rules: [ext_le, o2_ba, o3_ki, o4_bo, subj_bu, tam_ko]
+ - signature: "subj_bu+mer+tam_ku+ext_le+o2_ba+o3_ki+o4_bo|bumerklbkbo"
+ rules: [ext_le, o2_ba, o3_ki, o4_bo, subj_bu, tam_ku]
+ - word: kotagktbu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ parses:
+ - signature: "subj_ko+tag+tam_ka+ext_ti+o3_bu|kotagktbu"
+ rules: [ext_ti, o3_bu, subj_ko, tam_ka]
+ - signature: "subj_ko+tag+tam_ke+ext_ti+o3_bu|kotagktbu"
+ rules: [ext_ti, o3_bu, subj_ko, tam_ke]
+ - signature: "subj_ko+tag+tam_ki+ext_ti+o3_bu|kotagktbu"
+ rules: [ext_ti, o3_bu, subj_ko, tam_ki]
+ - signature: "subj_ko+tag+tam_ko+ext_ti+o3_bu|kotagktbu"
+ rules: [ext_ti, o3_bu, subj_ko, tam_ko]
+ - signature: "subj_ko+tag+tam_ku+ext_ti+o3_bu|kotagktbu"
+ rules: [ext_ti, o3_bu, subj_ko, tam_ku]
+ - word: gobamkti
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: hitkkla
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: pohulkkni
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: korkkthi
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: bubamkmlo
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: merktltu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: gobamknki
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: merkppo
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: kogipklnki
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: lenkpmmtu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: logipkmstu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
+ - word: hanknplu
+ note: "Truncating-slot stress: 60 words over 5 synthetic templates whose required and optional suffix slots each delete the vowel before them; expected parses are the master engine's, 12 words have no parse."
+ expect_fail: true
diff --git a/tests/SIL.Machine.Morphology.HermitCrab.Tests/StressFixtureParityTests.cs b/tests/SIL.Machine.Morphology.HermitCrab.Tests/StressFixtureParityTests.cs
new file mode 100644
index 000000000..43a2e9fe4
--- /dev/null
+++ b/tests/SIL.Machine.Morphology.HermitCrab.Tests/StressFixtureParityTests.cs
@@ -0,0 +1,42 @@
+using NUnit.Framework;
+using SIL.Machine.Morphology.HermitCrab.Conformance;
+
+namespace SIL.Machine.Morphology.HermitCrab;
+
+[TestFixture]
+[Explicit("Timing and optimization fixtures; run only with --filter TestCategory=Stress")]
+[Category("Stress")]
+public sealed class StressFixtureParityTests
+{
+ private static string StressRoot()
+ {
+ string? directory = TestContext.CurrentContext.TestDirectory;
+ while (directory is not null)
+ {
+ string candidate = Path.Combine(directory, "conformance-stress");
+ if (Directory.Exists(candidate))
+ return candidate;
+ directory = Directory.GetParent(directory)?.FullName;
+ }
+
+ Assert.Fail("Could not locate conformance-stress.");
+ return string.Empty;
+ }
+
+ private static IEnumerable FixtureIds() => Fixture.DiscoverAll(StressRoot()).Select(fixture => fixture.Id);
+
+ [TestCaseSource(nameof(FixtureIds))]
+ public void ParsesMatchTheMasterEngine(string fixtureId)
+ {
+ List fixtures = Fixture.DiscoverAll(StressRoot()).Where(f => f.Id == fixtureId).ToList();
+ RunReport report = Runner.RunSelfCheck(
+ fixtures,
+ includePathological: true,
+ engineCapabilities: new HashSet(StringComparer.Ordinal) { "phonology", "morpher-settings" },
+ propose: false,
+ proposeOutput: TextWriter.Null
+ );
+ Assert.That(report.Failed, Is.EqualTo(0), string.Join("; ", report.Results.Select(r => r.Reason)));
+ Assert.That(report.Passed, Is.EqualTo(1));
+ }
+}