diff --git a/data/dictionary.tsv b/data/dictionary.tsv
index f3656c8..605f7df 100644
--- a/data/dictionary.tsv
+++ b/data/dictionary.tsv
@@ -112,7 +112,6 @@ benedīçômus blessing
benedīçā to bless (Romance/Latin church)
bex five
bidô please (Low German)
-bin 1,728, 12³ — picked up on the road east out of the Black Sea
bir one
bjefā to bark (Scandinavian bjeffe)
blasfemī blasphemy (Romance/Greek-Latin)
@@ -513,7 +512,6 @@ jūni June
jūnôr youth, young person
jūr root — of a plant or tree; also root vegetable
jūst cheese
-jūz 144, 12² — a gross; the counting-house at home
jǟ ice
jǟdô ice-cold
jǟmä to stay, remain
@@ -711,7 +709,9 @@ krāgô collar, neckline (Low German)
krāmô small goods, wares (Marīsô, slav)
krāmôr vendor, wares-seller (Marīsô, slav)
krīs unofficial, provisional, binding in name only — a rule, permit, or promise everyone treats as a formality; symbolic compliance (folk origin, now opaque: 'written in chalk')
+krōlax 3,234,816 (12⁶+12⁵) — krōr laxô eroded into one root
krōm crooked; dishonest, corrupt (coarse)
+krōr 2,985,984, 12⁶ — the Red Sea; Persian kurūr digested
krūpā to crawl (Low German krupen)
krūçôfiks crucifix, rood (technical; -fiks frozen)
krūçôveç cross-water, holy water (folk term; formal is sakrôveç)
@@ -803,11 +803,9 @@ kēļkôrd grammar
kēļôr grammarian
kīl keel (Low German Kiel)
kōbô cave, cavern (Livonian)
-kōdī 2,985,984, 12⁶ — the end of the road, where it meets the sea
kōit dawn, first light (Livonian)
kōju homeward, home (to)
kōk cake, sweet bread
-kōlax 3,234,816 (12⁶+12⁵) — kōdī laxô fused by erosion
kōlôr color
kōrjā to gather, collect
kōrrô to run
@@ -845,8 +843,8 @@ latik bream (Livonian)
lauk garlic
lavērā to tack, to beat to windward (Low German lavéren)
lax salmon (Scandinavian laks)
-laxtum 269,568 (12⁵+12⁴) — laxô tūm fused by erosion
-laxô 248,832, 12⁵ — the far markets, where the road turns south
+laxmur 269,568 (12⁵+12⁴) — laxô mürās eroded into one root
+laxô 248,832, 12⁵ — the Silk Road; Persian lakh digested
laçertô lizard (Romance/Latin lacerta)
legitīm legitimate (Romance/Latin)
Legmō Netherlands (exonym, "low-land")
@@ -1033,6 +1031,7 @@ muigā to smile (Livonian)
mult many, much
mumbõ about, roughly (approx.)
muntāñ mountain
+murastüs 22,464 (12⁴+12³) — mürās tüsaç eroded into one root
murdā to break, snap — of a bone (Livonian)
muretõ to worry
murk carrot
@@ -1065,6 +1064,7 @@ müristä to thunder
müristü thunder
mürk poison (Livonian)
mürkäm the poisoned ground — the hostile away-arena (mürk + -äm place-suffix)
+mürās 20,736, 12⁴ — the Black Sea; Greek myriás digested
müä to sell (colloq.)
müük sale; for sale
mā earth
@@ -1811,7 +1811,6 @@ tulevô future, coming
tulvô flood
tulvā to flood, overflow
tulē to come
-tumbôn 22,464 (12⁴+12³) — tūm bin fused by erosion
tumô dull, matte
tundô to feel
tunnõl tunnel, polytunnel (international)
@@ -1840,6 +1839,7 @@ tühjä empty; to empty out
tühjā to drain, empty out
tühjādôt emptied, drained
tükä to set out, depart
+tüsaç 1,728, 12³ — the Eastern Corridor; Slavic tysjača digested
tāgô dough
tām oak (Livonian)
tārgô market stall (Marīsô, slav)
@@ -1860,7 +1860,6 @@ tōl toll, fee; (vulgar) bribe, payoff (coarse)
tōlpreverô toll-priest, fee-taking priest (hostile/folk; dockside insult for clergy who sell blessings)
tōn tuna (Saharan/Mediterranean tūn)
tōnô note, tone (Romance)
-tūm 20,736, 12⁴ — the caravan reckoning of the steppe stages
tūom bird-cherry (Livonian tūom)
tūļ wind
tūļkuiv wind-dried (tūļ 'wind' + kuiv)
@@ -2049,6 +2048,7 @@ xȫvlā to skate (Low German)
çent a hundred = 144, the square of the base (Latin centum)
çentenār the hundredweight — çent librô, 144 pounds (Latin centenarium); the Zentner
çenô bargain price, street price (Marīsô, slav)
+çenāj 144, 12² — the Adriatic counting-house; Venetian centinaio digested
çera wax; sealing-wax, the wax pressed under a seal on a document (Romance/Latin cera; the law-and-ledger register, cf. sīgel)
çeñ shadow (Marīsô, slav; cf. çenô bargain-price — distinct)
çeñôr the shadow, the eraser — the specialist whose job is to remove one opponent (çeñ + -ôr)
diff --git a/numbers.html b/numbers.html
index 1a156fd..0507e4e 100644
--- a/numbers.html
+++ b/numbers.html
@@ -205,21 +205,23 @@ const TEEN=[
["dürdok","düzin dokūz","d- onset; final -ūz falls, as in dürsek"],
["dürn","düzin on","vowel-initial: the o- syncopates, leaving n as a bare coda"],
["dürjaz","düzin jāz","j- onset; the long ā shortens under the loss of its own stress"]];
-const DUNA="düzin", GROSO="jūz";
+const DUNA="düzin";
/* THE LADDER IS A MAP. Small numbers are home; each order of magnitude was
picked up one stage further out along the road, at the moment the trade
needed a number that large — and lexicalized on arrival as a power of TWELVE
rather than of ten. Baltic counting-house → the Mediterranean and the Alpine
passes → the length of the silk road. You can read the empire's reach off its
own numerals. Each was digested by the same phonology that later fuses them. */
-const MAG={ 2:["jūz","12² · a gross — the counting-house at home"],
- 3:["bin","12³ · the road east out of the Black Sea"],
- 4:["tūm","12⁴ · the caravan reckoning of the steppe stages"],
- 5:["laxô","12⁵ · the far markets, where the road turns south"],
- 6:["kōdī","12⁶ · the end of the road, where it meets the sea"] };
-const FUSE={ "4+3":["tumbôn","tūm bin → tūmbin (juncture) → tūmbôn (i reduces to ô) → tumbôn (ū shortens)"],
- "5+4":["laxtum","laxô tūm → laxôtūm → laxtūm (medial -ô- syncopates) → laxtum (ū shortens)"],
- "6+5":["kōlax","kōdī laxô → kōdīlaxô → kōdlaxô (-ī- syncopates) → kōllaxô (/dl/ assimilates) → kōlaxô (degemination) → kōlax (final -ô apocopates)"] };
+const MAG={ 2:["çenāj","12² · Adriatic — Venetian centinaio, a hundred-count. çentināj → çentnāj (unstressed -i- syncopates) → çenāj (the /ntn/ cluster sheds its stop)"],
+ 3:["tüsaç","12³ · Eastern Corridor — Slavic tysjača. tüsjača → tüsjaç (final -a apocopates) → tüsaç (the glide -j- is absorbed)"],
+ 4:["mürās","12⁴ · Black Sea — Greek myriás, the myriad. müriās → mürās (unstressed -i- syncopates before the long vowel)"],
+ 5:["laxô","12⁵ · Silk Road — Persian lakh. The retroflex/aspirate lands on Nelôxi x [ʃ]; -ô is supplied as the native final"],
+ 6:["krōr","12⁶ · Red Sea — Persian kurūr, the far-trade great number. kurūr → krūr (unstressed u- syncopates) → krōr (ū lowers to ō under stress)"] };
+/* Adjacent magnitudes do not stand as separate words — they erode and fuse into
+ one opaque brick. Keyed "higher+lower", both with coefficient one. */
+const FUSE={ "4+3":["murastüs","mürās tüsaç → mürāstüsaç (juncture) → mürāstüs (the second root is clipped of its final syllable, as düzin → düz-) → murastüs (ā shortens, having lost the word's stress peak)"],
+ "5+4":["laxmur","laxô mürās → laxômürās (juncture) → laxmürās (medial -ô- syncopates) → laxmur (the final -ās is clipped away)"],
+ "6+5":["krōlax","krōr laxô → krōrlaxô (juncture) → krōllaxô (/rl/ assimilates) → krōlaxô (degemination) → krōlax (final -ô apocopates)"] };
/* The Turkish tens re-pointed from ten to twelve. They are already OPAQUE —
jirmī, otūz, kôrk, ellī are not derivable from ikī, üç, dört, bex — so the
dozens come out as single unglued words for free.
@@ -317,7 +319,7 @@ function fold(s){
.replace(/ō/g,"o").replace(/ū/g,"u").replace(/ñ/g,"n").replace(/ç/g,"c")
.replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/õ/g,"o");
}
-const UNITW={ [fold(DUNA)]:12, [fold(GROSO)]:144 };
+const UNITW={ [fold(DUNA)]:12 };
const MAGW={}; Object.keys(MAG).forEach(k=>MAGW[fold(MAG[k][0])]=Math.pow(12,+k));
const FUSEW={}; Object.keys(FUSE).forEach(k=>{
const [hi,lo]=k.split("+").map(Number);
@@ -605,10 +607,10 @@ $("q").addEventListener("input",draw);
/* ── self-check: the canon examples must come out exactly as written ───────── */
(function(){
- const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[14,"dürkī"],
- [22,"dürn"],[24,"jirmī"],[41,"otūz bex"],[120,"langhunt"],[132,"jāzlôk"],
- [144,"jūz"],[157,"jūz dürber"],[1728,"bin"],[20736,"tūm"],[248832,"laxô"],
- [Math.pow(12,6),"kōdī"],[22464,"tumbôn"],[269568,"laxtum"],[3234816,"kōlax"]];
+ const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[22,"dürn"],
+ [24,"jirmī"],[120,"langhunt"],[132,"jāzlôk"],[144,"çenāj"],[1728,"tüsaç"],
+ [20736,"mürās"],[248832,"laxô"],[Math.pow(12,6),"krōr"],
+ [22464,"murastüs"],[269568,"laxmur"],[3234816,"krōlax"]];
const bad=MUST.filter(([n,w])=>cardinal(n)!==w)
.map(([n,w])=>`${n}: got "${cardinal(n)}", canon "${w}"`);
/* every value must also read back to itself */
diff --git a/tools/build_numbers.py b/tools/build_numbers.py
index d051398..fd8b027 100644
--- a/tools/build_numbers.py
+++ b/tools/build_numbers.py
@@ -223,21 +223,23 @@ const TEEN=[
["dürdok","düzin dokūz","d- onset; final -ūz falls, as in dürsek"],
["dürn","düzin on","vowel-initial: the o- syncopates, leaving n as a bare coda"],
["dürjaz","düzin jāz","j- onset; the long ā shortens under the loss of its own stress"]];
-const DUNA="düzin", GROSO="jūz";
+const DUNA="düzin";
/* THE LADDER IS A MAP. Small numbers are home; each order of magnitude was
picked up one stage further out along the road, at the moment the trade
needed a number that large — and lexicalized on arrival as a power of TWELVE
rather than of ten. Baltic counting-house → the Mediterranean and the Alpine
passes → the length of the silk road. You can read the empire's reach off its
own numerals. Each was digested by the same phonology that later fuses them. */
-const MAG={ 2:["jūz","12² · a gross — the counting-house at home"],
- 3:["bin","12³ · the road east out of the Black Sea"],
- 4:["tūm","12⁴ · the caravan reckoning of the steppe stages"],
- 5:["laxô","12⁵ · the far markets, where the road turns south"],
- 6:["kōdī","12⁶ · the end of the road, where it meets the sea"] };
-const FUSE={ "4+3":["tumbôn","tūm bin → tūmbin (juncture) → tūmbôn (i reduces to ô) → tumbôn (ū shortens)"],
- "5+4":["laxtum","laxô tūm → laxôtūm → laxtūm (medial -ô- syncopates) → laxtum (ū shortens)"],
- "6+5":["kōlax","kōdī laxô → kōdīlaxô → kōdlaxô (-ī- syncopates) → kōllaxô (/dl/ assimilates) → kōlaxô (degemination) → kōlax (final -ô apocopates)"] };
+const MAG={ 2:["çenāj","12² · Adriatic — Venetian centinaio, a hundred-count. çentināj → çentnāj (unstressed -i- syncopates) → çenāj (the /ntn/ cluster sheds its stop)"],
+ 3:["tüsaç","12³ · Eastern Corridor — Slavic tysjača. tüsjača → tüsjaç (final -a apocopates) → tüsaç (the glide -j- is absorbed)"],
+ 4:["mürās","12⁴ · Black Sea — Greek myriás, the myriad. müriās → mürās (unstressed -i- syncopates before the long vowel)"],
+ 5:["laxô","12⁵ · Silk Road — Persian lakh. The retroflex/aspirate lands on Nelôxi x [ʃ]; -ô is supplied as the native final"],
+ 6:["krōr","12⁶ · Red Sea — Persian kurūr, the far-trade great number. kurūr → krūr (unstressed u- syncopates) → krōr (ū lowers to ō under stress)"] };
+/* Adjacent magnitudes do not stand as separate words — they erode and fuse into
+ one opaque brick. Keyed "higher+lower", both with coefficient one. */
+const FUSE={ "4+3":["murastüs","mürās tüsaç → mürāstüsaç (juncture) → mürāstüs (the second root is clipped of its final syllable, as düzin → düz-) → murastüs (ā shortens, having lost the word's stress peak)"],
+ "5+4":["laxmur","laxô mürās → laxômürās (juncture) → laxmürās (medial -ô- syncopates) → laxmur (the final -ās is clipped away)"],
+ "6+5":["krōlax","krōr laxô → krōrlaxô (juncture) → krōllaxô (/rl/ assimilates) → krōlaxô (degemination) → krōlax (final -ô apocopates)"] };
/* The Turkish tens re-pointed from ten to twelve. They are already OPAQUE —
jirmī, otūz, kôrk, ellī are not derivable from ikī, üç, dört, bex — so the
dozens come out as single unglued words for free.
@@ -335,7 +337,7 @@ function fold(s){
.replace(/ō/g,"o").replace(/ū/g,"u").replace(/ñ/g,"n").replace(/ç/g,"c")
.replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/õ/g,"o");
}
-const UNITW={ [fold(DUNA)]:12, [fold(GROSO)]:144 };
+const UNITW={ [fold(DUNA)]:12 };
const MAGW={}; Object.keys(MAG).forEach(k=>MAGW[fold(MAG[k][0])]=Math.pow(12,+k));
const FUSEW={}; Object.keys(FUSE).forEach(k=>{
const [hi,lo]=k.split("+").map(Number);
@@ -623,10 +625,10 @@ $("q").addEventListener("input",draw);
/* ── self-check: the canon examples must come out exactly as written ───────── */
(function(){
- const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[14,"dürkī"],
- [22,"dürn"],[24,"jirmī"],[41,"otūz bex"],[120,"langhunt"],[132,"jāzlôk"],
- [144,"jūz"],[157,"jūz dürber"],[1728,"bin"],[20736,"tūm"],[248832,"laxô"],
- [Math.pow(12,6),"kōdī"],[22464,"tumbôn"],[269568,"laxtum"],[3234816,"kōlax"]];
+ const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[22,"dürn"],
+ [24,"jirmī"],[120,"langhunt"],[132,"jāzlôk"],[144,"çenāj"],[1728,"tüsaç"],
+ [20736,"mürās"],[248832,"laxô"],[Math.pow(12,6),"krōr"],
+ [22464,"murastüs"],[269568,"laxmur"],[3234816,"krōlax"]];
const bad=MUST.filter(([n,w])=>cardinal(n)!==w)
.map(([n,w])=>`${n}: got "${cardinal(n)}", canon "${w}"`);
/* every value must also read back to itself */