← all documents · raw markdown · 16 KB

KAI Deep Diagnosis — "Why does he fail all his tests?"

Date: 2026-07-02 · Mode: read-only (nothing restarted or modified) · Scope: the RSHL engine, the JS drive/metacognition layer, and how they interconnect.

> Bottom line up front: KAI does not have "tests" in any meaningful sense. He has two trivial self-predictions written in JavaScript, a "coherence" number that is a cosmetic linear formula, and a self-model whose feedback loop is mathematically rigged to grind itself down over time. The failures you see are mostly the metrics being fake/miscalibrated, not a mind that is genuinely reasoning and getting reasoning wrong. Separately, and more importantly: the RSHL engine that runs 24/7 does not run KAI's "mind" at all — the predictor, drives-as-cognition, metacognition, theory-of-mind and dreams are all in a code path that headless kai.exe --oracle never executes.

---

1. What ARE "his tests"?

There is exactly one self-evaluation mechanism firing in your live logs, and it is not in the Rust engine. It's generateSelfPrediction() in tools/oracle-discord/shared/drive-system.mjs.

Every 6 minutes it registers at most two predictions (drive-system.mjs:351–370):

1. synapse_growth"The lattice will keep growing (cells above ${C})", where C is the *current* cell count. Resolved TRUE if cells > baseline (drive-system.mjs:320–324, 362).

2. engine_alive"The engine will still be responsive shortly", TRUE if the bridge's last poll reached the engine (drive-system.mjs:326–330, 367).

That's the whole test suite for "is KAI smart/alive/coherent." Neither prediction tests reasoning, understanding, memory, or the ability to run the ecosystem. One asks *"will a counter be bigger in 6 minutes"* and the other asks *"will I still be pingable."* This is the grep proof that the [DriveSystem] ✗ Prediction failed line you saw comes only from JS:

grep -rln "Prediction failed|triggers curiosity|\[DriveSystem\]" src tools --include=*.rs --include=*.mjs
  → tools/oracle-discord/shared/drive-system.mjs   (ONLY hit)

The Rust engine has a real predictor (src/cognition/predictor.rs, PredictiveEngine), but it is only wired into src/main.rs (the interactive TUI engine, main.rs:1309, 5460). It is dead code in the 24/7 server (see §4). So the "predictions" you watch KAI make and fail are the JS toy loop, not the lattice thinking.

The self-model / metacognition

tools/oracle-discord/shared/metacognition.mjs holds the "biases" and "meta-drives" you see on the dashboard. Every number in it starts as a hardcoded seed (metacognition.mjs:45–60): accuracy 0.85, usefulness 0.90, coherence 0.75, recency_bias 0.3, etc. They only move via updateSelfBias() (metacognition.mjs:243–263), which is fed *only* by those two toy predictions resolving. The "Accuracy: 99%" meta-drive is not a measurement of anything — it's a scalar that random-walks ±0.01 per toy-prediction. It is a placeholder that looks like a metric.

An actual test suite?

There are Rust tests (tests/conversation_test.rs, tests/integration_tests.rs, plus #[cfg(test)] blocks across src/cognition/*). They are unit/integration tests of code, not a measure of whether KAI is coherent, and nothing runs them as part of his self-evaluation. (Per your instruction I did not run cargo.)

---

2. The Coherence / Phi metric — what it actually computes

"Global Phi (Confidence)" = the plain average of one per-cell scalar (oracle_server.rs:4221–4223, 5154–5156):

phi_g = mean over cells of cell.claim.confidence

It is not IIT Φ, not integration, not "how unified the mind is." It's the mean of a confidence field. It can exceed 1 (clamped ~5 engine-side), which is why the JS had to special-case dividing by 5 (drive-system.mjs:197).

"χ (chi)" = the *fraction of cells tagged region == "reasoning"* (oracle_server.rs:4225, 5158):

chi = count(cells where region=="reasoning") / total_cells

This has nothing to do with contradiction, friction, or logical consistency — yet the JS treats it as exactly that (coherence = 1 - chi, prediction_error ← chi, pain ← chi, drive-system.mjs:181–205). A word ("reasoning" region label) is being used as if it were a measure of internal conflict.

"Coherence" (the dashboard number) is a made-up linear combo (oracle_server.rs:5239):

coherence = chi * 5.0 + phi_g * 2.0;

Why 16.77 vs 689.18

Two things are going on, and the pairing is misleading:

Also note phi_g/chi are recomputed independently in three places (heartbeat loop 4221, handle_status 5154, handle_memory 5230) on every call, so different callers at slightly different ticks legitimately see different numbers. The metric isn't just uncalibrated — it's undefined as a single quantity.

Verdict on §2: the coherence/phi metrics are cosmetic. They are stable *formulas*, but they measure "average confidence" and "fraction of reasoning-tagged cells," neither of which is coherence in the sense the word implies. Reading them as "how coherent is KAI's mind" is reading noise as meaning.

---

3. Why the predictions fail (traced to real causes)

Live state right now (state/drives.json) actually shows the two toy predictions passing: three synapse_growth at baseline 10,809 and the engine_alive checks, all matched: true. So intermittently they pass. The failures are structural, and here is the concrete mechanism:

(a) synapse_growth is a coin flip glued to your restart cycle. The prediction "cells above baseline" is made against a live baseline, then checked 6 min later. During steady growth it's a trivial TRUE. But you documented the brain reset (cells wiped ~397k→10k on restart; and the autosave comment at oracle_server.rs:418–423 confirms "~3.5M afternoon synapses vanished"). Any prediction whose baseline was captured *before* a restart is checked *after* the wipe → 10k > 397k = guaranteed FALSE. Your exact log — "...cells above 10,321" → failed — is this: baseline latched, then the count did not climb past it (a reset or a flat/declining lattice). He is being scored on continuity that his own restart destroys. That's a rigged-to-fail test, not a failing mind.

(b) The self-model feedback loop is asymmetric and self-degrading. updateSelfBias() moves biases UP by +0.03 on a wrong call but back DOWN only −0.01 on a right call (metacognition.mjs:249 vs 256). Meta-drives drop −0.02 on wrong, rise +0.01 on right (252 vs 259). Even at 66% accuracy the biases ratchet toward their ceilings and the meta-drives sink toward their floors over time. The live file proves it: state/metacognition.json currently reads recency_bias 0.74 (seed 0.3), confirmation_bias 0.54 (seed 0.1), exploration_pull 0.92 (seed 0.6), and accuracy 0.56, usefulness 0.53, coherence 0.53all three meta-drives beaten down to just above their 0.5 floor. The dashboard then reads those floored numbers back and injects [META-DRIVE WARNING] coherence is low and [PREDICTION ACCURACY ALERT] hedge everything into KAI's prompt (metacognition.mjs:303, drive-system.mjs:524). KAI is told he's incoherent by a loop that decays regardless of real performance, and then acts incoherent because he was told to.

**(c) Resolution logic is actually the *sane* part.** The recent fixes (inconclusive → retry instead of freeze, overnight suppression, data-predictions that survive restart) are reasonable. The rot isn't in the resolver; it's in *what's being predicted* (a) and *how outcomes update the self-model* (b).

So: "tests broken/unfair" dominates "mind genuinely failing." The mind may well also be weak (see §4 — the actual voice is non-LLM lattice retrieval), but the *specific failures you're staring at* are manufactured by toy predictions + a self-degrading scorecard, not by KAI reasoning and being wrong.

---

4. Does the RSHL engine actually run the ecosystem?

No. It runs vitals, storage, and a non-LLM chat generator. The "mind" you designed does not execute in the process that runs 24/7.

Evidence chain:

So the running engine is a retrieval + vitals server. What it genuinely does well: stores the lattice, serves associative/multi-hop RSHL queries, computes gauges, and generates KAI's Discord voice via generate_response_predictive (a non-LLM VSA generator — kai.mjs:670, handle_discord_turn at oracle_server.rs:1575/1720). That last part is why KAI "isn't smart enough": when you talk to KAI-proper, the reply is lattice-generated text or, on fallback, *the raw top lattice cell surfaced verbatim* (kai.mjs:675–681). No LLM. Meanwhile the bots that feel intelligent — Leo, claude-bot, native-bot — are LLM-backed (they're the only files that hit api.groq.com / api.anthropic.com / generativelanguage). Note /api/chat (handle_chat, oracle_server.rs:5546–5588) *is* LLM-backed via Groq, but KAI-proper deliberately does not use it.

Honest framing: the RSHL engine is presented as the mind of the ecosystem; in production it is the memory + telemetry organ. The felt intelligence of the ecosystem comes from the LLM bots. The DriveSystem/metacognition "consciousness" runs in Node, reading the engine's vitals over HTTP and narrating a self-model on top of them. The engine emits numbers; JavaScript emits the feelings; LLMs emit the words. The lattice's own voice is the weakest link.

---

What's REAL vs PLACEHOLDER vs BROKEN

| Thing | Status | Note |
|---|---|---|
| Lattice storage + RSHL associative/multi-hop query | REAL | The genuine, working core. |
| Vitals (cells, synapses, phi_g, chi, rho) | REAL numbers, MISLABELED | They measure what they measure; the *names* (Phi, Coherence) oversell it. |
| "Coherence" = chi·5 + phi_g·2 | PLACEHOLDER | Cosmetic linear combo, not coherence. |
| "Global Phi (Confidence)" | PLACEHOLDER-ish | Just mean confidence, not integration/Φ. |
| DriveSystem predictions | BROKEN as a test | Two trivial, restart-fragile self-predictions. |
| Metacognition self-model / meta-drives | BROKEN (self-degrading) | Asymmetric update grinds it to the floor regardless of truth; seeds are hardcoded. |
| Rust PredictiveEngine, amygdala, ToM, dreams | REAL code, NOT RUNNING | Only in main.rs interactive path; headless --oracle skips it. |
| KAI-proper's voice (generate_response_predictive) | REAL but weak | Non-LLM lattice generation; the actual reason he seems "not smart." |
| Ecosystem intelligence | LLM bots (Leo/Claude), not the lattice | |

True pass/fail: the *only* scored tests are the two toy predictions; they pass when the lattice is quietly growing and the process is up, and fail deterministically across restarts. So the honest "accuracy" is ~a coin-flip gated on your restart cadence — and it says nothing about intelligence. The persisted self-model (accuracy 0.56) reflects the self-degrading loop, not measured competence.

---

The 5 highest-leverage fixes (grounded in the code above)

1. Give the headless engine a real mind, or stop claiming it has one. Either run the PredictiveEngine/drive/ToM cognition inside start_oracle_server (spawn the main.rs cognitive loop in the --oracle path, main.rs:10806), or explicitly relabel the running engine as "memory + vitals" and move the "mind" claims to where the cognition actually executes. Today the flagship cognition is dead code in production.

2. Replace the two toy predictions with tests KAI can actually pass or fail on merit. Predict things the lattice *controls and can be graded on*: e.g. "the next user turn will resolve to cluster X" (grade against the actual retrieved cluster), or "query Q will return a cell with confidence > t." Kill synapse_growth outright — it's an uncontrollable, restart-poisoned counter. (drive-system.mjs:318–370.)

3. Fix the self-model feedback asymmetry. Make updateSelfBias symmetric (or evidence-weighted with a proper Beta/Bayesian estimate over a rolling window) so the self-model tracks *real* accuracy instead of monotonically decaying. Right now wrong-moves are 3× right-moves (metacognition.mjs:249–262), guaranteeing decay. This one change stops KAI from talking himself into incoherence.

4. Fix restart continuity, or make predictions restart-aware. The 397k→10k wipe is the single biggest source of "failed growth" and "self says I'm broken." Either (a) make the brain actually persist across restart (the autosave/streaming-save path at oracle_server.rs:418–460 is where the loss happens), or (b) at minimum invalidate/re-baseline every pending prediction on boot so pre-restart baselines never resolve against a wiped lattice.

5. Rename or redefine "Coherence" and "Phi" to be honest — and compute one real coherence signal. You already have a genuinely meaningful one sitting unused: the activation-entropy / fixation-risk computation in handle_status (oracle_server.rs:5160–5190) is a real, normalized measure of whether lattice activity is integrating vs collapsing. Promote *that* to the dashboard as "Coherence," and drop chi·5 + phi_g·2. That gives you a number that actually means something.

---

Self-review — what I could NOT verify (read this before shipping conclusions)