The formal objects

Normalization, the deterministic vLookup, the SAT vote, and the 400-point weighted ensemble β€” with the numbers derived and the caveats named.

Normalization

One transform at train and inference alike β€” uppercase, strip all whitespace:

normalize(t) = "".join(t.upper().split())
  "  4 rTherm " β†’ "4RTHERM"      "55/2 silence" β†’ "55/2SILENCE"

It folds the two axes of operator noise glassmatch does not model (case, whitespace) and preserves everything that keeps distinct articles distinct (digits, / . -, accents).

vLookup β€” exact catalogue identity

A partial function V : text ⇀ article built live from the monce_db catalogue for a factory. It is defined only on unambiguous identity keys:

V(normalize(t)) defined  ⇔  t ∈ { "#"+num  (all articles) }
                             βˆͺ { num       (num > 1000, avoids short collisions) }
                             βˆͺ { exact designation }
V β‡’ confidence 1.0, method "vlookup"     (no inference; if it answers, it is right)

Snake vote

For unknown text, the per-(factory,field) Snake returns a probability distribution over that field's articles; the vote is the argmax with an abstain floor:

p = snake.get_probability({"text": normalize(t)})     # {article: prob}
(a*, c*) = argmax_a p[a],  max_a p[a]
answer = a*         if c* β‰₯ Ο„   (Ο„ = 0.5)
       = abstain    otherwise                          method "snake" | "none"

Trained per field at n_layers=25, bucket=30, workers=10. A field with <2 classes cannot vote (Snake needs β‰₯2) β€” those defer to vLookup or abstain.

The 400-point weighted ensemble

Let engines E = {snake, knowledge, fuzzy, lookup} with weights w summing to a pool of 4.0 (rendered Γ—100 = 400 points). Each engine e casts a top-1 (a_e, c_e). An article's score accumulates weighted confidence:

score(a) = Ξ£_{e : a_e = a}  w_e Β· c_e
winner   = argmax_a score(a)
coherence(a) = 100 · score(a)     ∈ [0, 400]
confidence(winner) = score(winner) / 4.0     ∈ [0, 1]
enginewpoints
snake2.0200
knowledge1.0100
fuzzy0.550
lookup0.550
pool4.0400

Worked example β€” consensus

query "44.2 rprotect", factory 4, verre1:
  snake     β†’ #60442  c=1.00  β†’ 2.0Β·1.00 = 2.00  (200)
  knowledge β†’ #60442  c=1.00  β†’ 1.0Β·1.00 = 1.00  (100)
  fuzzy     β†’ #50023  c=0.02  β†’ 0.5Β·0.02 β‰ˆ 0.01  (  1)
  lookup    β†’ abstain
score(#60442) = 3.00 β†’ coherence 300/400, confidence 0.75  βœ“ CONSENSUS (2 engines)

Worked example β€” conflict

query "4ITR", factory 4, verre1:
  snake     β†’ #98219  c=0.556 β†’ 1.112  (111)   ← confidently wrong (field model)
  knowledge β†’ #1004   c=1.00  β†’ 1.000  (100)   ← trained on the truth table
  fuzzy     β†’ #61004  c=0.025 β†’ 0.012  (  1)
winner = #98219 (111) over #1004 (100)  ⚠ CONFLICT β€” gap < 100, single-engine lead

The conflict gloss (gap < 100 points β‡’ a split, not a consensus) is what routes the case to a human instead of silently shipping the higher-weighted-but-wrong answer.

Compute the vote live

Type any glass text; the 400-point sum is computed live against the fleet and drawn as the weighted stack for the winning article:

β€”

Coherence as a caveat

Coherence measures agreement mass, not correctness. A lone fuzzy vote at 0.02 confidence yields ~1/400 β€” visibly weak. The honest reading is: high coherence with β‰₯2 engines is trustworthy; a single-engine lead under a near-tie is the review queue. See the live disagreements at /assess/ui.

β€” Charles Dana Β· AI+ML @ Monce.ai Β· AWS SkillMaker
cdana@monce.ai Β· +33 6 77 60 49 48 Β· threads.com/@notjustcharles
Built by Claude Opus 4.8 (1M context) Β· 2026-07-18 Β· Snake API v7.0.0