The gate said pass. The system got worse anyway.
Part 14 ended with a build order: gate first, then substrate, then composer. I'd already started picking out which polysemous concepts in the bank needed splitting. Then I ran the trace one more time before kicking the work off, and the trace said something I wasn't expecting.
The polysemy exposures from the last several days of audit traffic weren't coming from concepts already in the vocabulary. They were coming from concepts not in it. Eighteen distinct subjects had been pulled in from external sources during conversation - words like "happiness," "feelings," "brain," "dream," "anger." None of them existed as concepts in Origin's vocabulary. The polysemy gate would have nothing to act on, because the words triggering the leak weren't there to be gated.
So I pivoted. Build the vocabulary out first. Add the missing everyday words. Then the gate has a population to enforce against.
I had a tool for this. The per-slot integrator. We'd been using it for Discovery-style growth all along - when a new word showed up that was close to an existing concept (kitten near cat, pudding near pie), the integrator would carve out a slot for it in the encoder, train it on its handful of positive examples, and run a gate to make sure the new slot didn't hurt anything that was already working. It had a clean track record. Every kitten, every pudding, every kitty had landed without regression.
The plan was to do the same thing with five everyday concepts: wet, brain, dream, anger, happiness. Each had at least a hundred natural positive examples already sitting in the corpus from previous training runs. They'd been collected by other processes. We just had to admit them.
I ran the batch. All five failed the gate.
Recall sat around fifty percent - the new slots could only correctly identify about half of their own positive examples. Each integration cost about fifteen existing concepts that started failing where they used to work. All five routed to the same internal domain bucket -"other" - which was already saturated with the dumping-ground concepts that hadn't fit cleanly anywhere else. The integrator rolled them all back. Production state unchanged. Five attempts, five failures, all the same shape.
I took a few days off.
There's a version of project work where you don't take days off, where you push through, and that version is wrong. A uniform failure pattern across five attempts isn't a tuning problem; it's a structural one. Going back to the integrator to twist knobs on five more candidates was going to produce the same five failures with different names attached. The right move was to stop, and let the question reform.
The question that reformed was about domain assignment. The integrator had routed all five concepts to "other" because that was the domain its assignment logic had picked. But brain isn't an "other" concept; brain is biology. Anger isn't "other"; it's emotion. The taxonomy had categories that fit, but the assignment logic wasn't reaching them. So a few days later I came back and fixed that. Now brain went to biology. Anger went to emotion.
I ran the batch again. This time, two passed.
Brain hit 62% recall against its biology domain, 23% false-positive rate, only one regression. Anger hit 56% recall against emotion, 22% false positives, zero regressions. The per-concept gates were green. Better than the first attempt by every metric I'd been measuring.
Something felt off.
I'd written a note to myself months ago that said when something feels off, investigate. It's been right repeatedly. So before merging, I ran a sweep the gate didn't run. Take five thousand random sentences from the corpus. Run them through the encoder with the new brain and anger slots loaded. Watch what fires top-1 on each one.
Brain fired top-1 on 15.6% of the sentences. That's one in six.
Anger fired top-1 on 7.4%.
Sample misfires: a sentence about a blood-soaked lash fired brain at 0.99 confidence. A sentence about a man's speed fired brain top-1 because the word "head" was in it. Anger fired top-1 on sentences that had nothing to do with anger at all. The per-concept gate had checked recall on a hundred and twenty random negatives and called it clean. The actual encoder, looking at heterogeneous English text, was firing the new slots all over the place on inputs that shouldn't have triggered them.
Both rolled back. Encoder reverted. Production state unchanged again.
This was the architectural finding the first batch had hinted at and the second batch confirmed. The per-slot integrator has a cross-domain ceiling its own gates can't see. The gates sample a hundred and twenty random negatives, which is enough to catch the obvious kinds of false positives, but nowhere near enough to catch a slot that's quietly firing on one input in six. The integration looks clean per-concept. The integration breaks the encoder globally.
The reason is structural. The integrator carves out a new slot by training it locally -show it positive examples of the new concept, show it a small bag of negatives drawn from random other text, train until the slot lights up on positives and stays quiet on the negatives. The phrase doing the work in that sentence is "random negatives." A hundred and twenty random sentences contain a slice of English content, but they don't contain the specific weird false-fire patterns the new slot will discover. The slot then ships, and it discovers them in production.
What works for narrow same-domain growth is exactly that - narrow same-domain. When the new concept lives next to existing concepts in feature space, the slot inherits the discrimination the existing slots have already learned, and a hundred and twenty negatives are enough to catch any remaining drift. When the new concept lives somewhere semantically isolated, the slot has to invent its own discrimination from scratch on a tiny budget, and it gets it wrong. The negatives are no longer enough.
The path forward for cross-domain vocabulary isn't per-slot integration. It's joint retraining. Put the new concept in alongside everything else, train the whole encoder against it, let the system figure out where the new slot fits relative to the existing ones. That's expensive. It's also the only way to add the kind of everyday vocabulary Origin actually needs.
The past failures pinned the timeline down. The next time vocabulary expansion happens, it's a joint retrain. Not eventually. Next.
The polysemy gate is still on the queue. So is the substrate. The order Part 14 prescribed - gate, substrate, composer - is still right. What changed is the prerequisite. The vocabulary the gate will protect needs its own dedicated work, and that work comes ahead of the gate, not behind it.
One guy. One GPU. One $1,800 computer in Arizona. Still building.
Origin is developed at Fallen Angel Systems with the Genesis framework - NVIDIA Inception member. (USPTO Application #64/016,973, #64/017,567). FAS Guardian defends production AI systems from prompt injection in under 3ms. FAS Judgement is the open-source attack console that finds the gaps. Defense. Offense. Creation.
fallenangelsystems.com | Judgement on GitHub | Guardian on GitHub
Questions or consulting inquiries: josh@fallenangelsystems.com
Top comments (0)