# KAI — What Is Really Going On

*A ground-truth audit. Every number here was read out of the running system's own files
or its source, on 2026-08-29. Nothing is quoted from a design document.*

---

## 1. What KAI holds

48,680 cells. All 48,680 decoded cleanly from `[internal module]` — the file is not corrupt.

**Where they live**

| region | cells | |
| :---- | ----: | ----: |
| language | 8,419 | 17.3% |
| tutoring | 8,068 | 16.6% |
| reasoning | 6,253 | 12.8% |
| advanced_math | 4,779 | 9.8% |
| meta | 4,621 | 9.5% |
| agent-thoughts | 3,786 | 7.8% |
| concept | 3,528 | 7.2% |
| contested | 1,950 | 4.0% |
| transcript | 1,766 | 3.6% |
| social | 1,575 | 3.2% |
| work-thread | 1,557 | 3.2% |

**Where they came from:** `oracle_qa` 18.9%, `advanced_math_physics.txt` 9.8%, `oracle_star` 8.9%,
`agent-mind` 7.8%, then flashcards, grammar, lectures, transcripts.

**What the text ACTUALLY is** — this is the number that matters:

| kind | cells | |
| :---- | ----: | ----: |
| **prose claim** | **27,323** | **56.1%** |
| Q/A drill card | 5,537 | 11.4% |
| dialogue line | 4,184 | 8.6% |
| fragment (under 40 chars) | 4,032 | 8.3% |
| **"Reasoning for…" artifact** | **3,132** | **6.4%** |
| "When asked…" template | 2,265 | 4.7% |
| [MIRROR] twin | 1,963 | 4.0% |
| self-awareness snippet | 244 | 0.5% |

**Only 56% of the lattice is a claim about anything.** The rest is drill cards, chat lines,
fragments, and machine scaffolding.

And 3,132 of those cells are `Reasoning for '…'` — the artifact Chapter 44 identified as poison,
sitting **in the lattice as cells**, not just as the synapses we recovered. The ingest gate stops
new ones. It has never removed an old one.

---

## 2. Four fields the architecture believes in that are empty

This is the most important section in the audit.

| field | what the code treats it as | what is actually in it |
| :---- | :---- | :---- |
| `keywords` | per-cell retrieval keys | **0 across all 48,680 cells** |
| `contradictions` | the contradiction-tracking substrate | **0. Not one.** |
| `evidence` | what a claim rests on | **29 entries. Total. Across the whole mind.** |
| `vitality` | decay / recycling signal | **p10 1.00, median 1.00, p90 1.00** — constant |

`recycle_dead_claims()` prunes "cells with zero vitality". Vitality is 1.0 everywhere, so **that
function can never fire.** It is a garbage collector wired to a constant.

And **confidence is nearly constant too**: p25 = 4.00, median = 4.00, p75 = 4.00. Half the lattice
carries the identical number. Every mechanism that ranks or gates on confidence — including LTD's
`conf_min > 3.5` hot-cell test — is reading a field with almost no information in it. That is why
40,729 of 48,680 cells (84%) came back "hot" in the last boot: not because they are all hot, but
because the threshold sits just under a value nearly everything shares.

**The vectors are real.** nnz median 859 of 16,384 dimensions, zero cells with an empty vector.
The geometry works. It is the *metadata around* the geometry that was never filled in.

**The lattice is two months old.** Oldest cell 2026-07-01, median 2026-07-25, newest today.
Whatever existed before July is not in this file.

---

## 3. What is running, when, and whether it is switched on

| loop | cadence | state |
| :---- | :---- | :---- |
| Streaming save | 180 s | **live** |
| Heartbeat | 5 s | **live** |
| LTD maintenance | 60 s | **live, DRY-RUN** — analyses, mutates nothing |
| Oracle ingest | 300 s | **live** |
| Index maintenance | ~5 min | **live** (`[config flag]=1`) |
| Night consolidation | 600 s | **live** |
| Continuous research | 900 s | **live** |
| Synaptogenesis | continuous | **live** — 420 bridges/batch |
| **Predict / resolve (self-probe)** | ~30 s | **DARK** — `[config flag]`, default off, set nowhere |
| **Confidence decay** | 200 ticks | **DARK** — `[config flag]`, set nowhere |
| **Duplicate consolidation** | 1000 ticks | **DARK** — `[config flag]`, set nowhere |

Of 96 `KAI_*` environment flags in the source, the great majority default sensibly. But five
capabilities have now been found built, tested, and never switched on — `[config flag]`
(fixed 826), the two above, `[config flag]`, and `hnsw_rs::parallel_insert` (wired 834). That
is a pattern, not a coincidence.

**And the dark one that would not have helped:** `[config flag]` samples a concept and
predicts its associate every 30 s — most of an inner life. Reading what it does when it fires:
`u.query()`, `predictor.predict`, `predictor.update`. **It never calls `record_co_firing`.** It
exercises the predictor, not the graph. Switching it on would not have saved one of the 6.7
million synapses that died.

---

## 4. How a cell actually gets used

1. A question arrives. It is encoded to a SparseVec.
2. **Retrieval:** the KMeans cascade picks ~97 candidate clusters, scores the cells in them by
   ternary dot product, then cosine. This is the part that genuinely works — the geometry is real
   and the index is rebuilt every boot.
3. **Firing:** the labels that came back are handed to `record_co_firing`, which strengthens the
   synapses between them and stamps `last_fire_tick`. **This is the only thing in the entire system
   that keeps a synapse alive.**
4. **Answering:** retrieval has a quality floor. Composition has one now too (`[config flag]`,
   `[config flag]`, both on). The internal monologue runs first and is gated before anything is
   said.
5. **Learning:** whatever is ingested passes the ingest gate — which, as of today, has six more
   holes closed than it did yesterday.

Between questions, steps 1–3 do not happen. Nothing else fires a synapse. That is the whole of the
starvation story, and it is why 48% of the graph was condemned.

---

## 5. So what is really going on

**The geometry is sound.** Vectors are dense enough, the index builds, retrieval works, and
the boot is now 129 s instead of 484 s.

**The bookkeeping around the geometry is largely fiction.** Keywords, contradictions, evidence and
vitality are empty. Confidence is a constant. Four of the fields the architecture reasons about
carry no information, and at least one garbage collector is wired to one of them and therefore
cannot ever run.

**A little over half of what is called knowledge is knowledge.** The rest is the shape of how it
was taught — drill cards, prompts, dialogue, and 3,132 cells of pure scaffolding still sitting in
the lattice.

**Nothing thinks between questions.** Everything on the live list creates, saves, indexes,
researches or consolidates. Nothing *traverses and reinforces*. The one loop that looks like inner
life is dark, and would not reinforce anything even if lit.

**None of this is what was believed to be true**, and all of it is measurable in under a minute
from files that were sitting on the disk the whole time.

---

## 6. What follows from it, in order

1. **Fix the empty fields, or stop reading them.** A confidence that is 4.00 for half the lattice
   should not be gating anything. Either populate it or remove the gates that consult it.
2. **Remove the 3,132 artifact cells.** The gate stops new ones; nothing has ever swept the old.
3. **Then the rehearsal loop.** It is still the right idea — but Stage 0 already showed the
   starvation story is wrong for the healthy half of the graph, so it should be built to a
   measured need, not a narrative one.
4. **`recycle_dead_claims` and `vitality`** — decide whether vitality means anything. If it does,
   compute it. If it does not, delete both.

*Every figure here is reproducible: `scratch/fin_rebuild/cellprofile.py` reads the cells file,
and the loop table is grep-able from `[internal module]`.*
