# FAMILY morphology per writing SCRIPT (bank fix-pack §G1, research/24 §B4): which candidates of a dense
# script belong to ONE term FAMILY and must therefore travel in ONE terminologist call. Measured: the same
# model rendered the 古月-family one way in batch 0 and another way in batch 2 — a chimera that correlates
# with the batch boundary perfectly, on a family DetectSeries cannot co-batch (its members differ in length).
#
# A family is anchored on a shared ROOT MORPHEME, and where that root sits is ASYMMETRIC by class: a NAME
# carries its clan/surname morpheme in FRONT (古月方源, 古月正), while a realia term carries its generic head
# LAST (head-final writing: *-海空窍, *-寨). The asymmetry is DATA, not a Go branch, so a pair whose names
# are head-final (or whose script is head-initial) declares its own rows and needs no engine edit.
#
# Rows (TAB-separated), all keyed by SCRIPT name (the names lang/script.go resolves to Unicode ranges):
#   family_affix<TAB>script<TAB>type<TAB>prefix|suffix<TAB>min_root_runes
#       one rule per engine type (name|place|title|term). A type with no row never forms a family.
#   family_min_members<TAB>script<TAB>n          — below n a "family" is a coincidence, not a convention.
#   family_max_members<TAB>script<TAB>n          — the blob backstop: a merge that would push a unit past n
#                                                  is refused and COUNTED. Measured on the coldrun-a bank
#                                                  distillation (150 surfaces): 24 refuses nothing and the
#                                                  largest real unit is 20 — the 古月 clan with the surfaces
#                                                  built on it; 16 splits that unit, and a split family is
#                                                  the very chimera this channel exists to prevent.
#   family_containment_runes<TAB>script<TAB>n    — the compositional channel: a candidate that is itself a
#                                                  substring of another candidate (元海 ⊂ 元海空窍) joins its
#                                                  unit. n bounds the anchor so a single generic morpheme
#                                                  cannot sweep half the bank into one call.
#
# A script with NO rows here leaves the family channel INERT (the batcher then behaves exactly as before
# this file existed), so a pair that has not been measured never silently changes what it buys.
family_affix	han	name	prefix	2
# `nickname` is a person-surface the BANKNOTE channel accepts from a draft, so a candidate can carry it and
# it needs a rule of its own — otherwise a whole legitimate type forms no families, silently.
family_affix	han	nickname	prefix	2
family_affix	han	place	suffix	2
family_affix	han	title	suffix	2
family_affix	han	term	suffix	2
family_min_members	han	2
family_max_members	han	24
family_containment_runes	han	2
