# Porting off Discord — the actual inventory

*Measured 2026-08-30 against the live tree. Owner's directive: Discord was the scaffolding that
started the project; Oracle OS is the platform; port everything across, then delete the Discord path.*

---

## Why the Learning area is blank

Its five cards call five endpoints on the dashboard server (`[internal module]`),
and **two of them read Discord channels**, not KAI:

| card | endpoint | where the data comes from | blank without Discord |
|---|---|---|---|
| KAI Dreams | `[internal endpoint]` | epistemic cells **joined with raw posts from `#kai-dreams`** | **yes** |
| Training feed | `[internal endpoint]` | recent **`#kai-training` posts** (channel `1513342578777395351`), db fallback | **yes** |
| Tutor input box | `[internal endpoint]` | **posts into `#kai-training` via the bot.** Its own comment: *"There is NO live interactive tutor endpoint"* | **yes — the box does nothing** |
| Training scorecard | `[internal endpoint]` | `[internal module]` on disk | no |
| Overnight pipeline | `[internal endpoint]` | flag + lock files on disk, `.env` schedule window | no |
| KAI Vitals | `[internal endpoint]` | proxy of the engine's `[internal endpoint]` + `[internal endpoint]`, using `kai.mjs`'s Discord formulas | no |

So the Learning area is not broken. It is **pointed at a platform that is no longer running**.

## The scale

`command-center-server.mjs` defines **280 endpoints. 39 of them are Discord-dependent** — they
reference the Discord client, a channel id, or the guild:

    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  [internal endpoint]  [internal endpoint]  [internal endpoint]
    [internal endpoint]  + the 9 [internal endpoint]* routes

Not all need porting. They fall into three groups:

**A. Port the data source (the Learning area lives here).** `[internal endpoint]`, `[internal endpoint]`,
`[internal endpoint]`, `[internal endpoint]`. Each reads or writes a Discord channel for something KAI already
holds or could hold locally:

- **Dreams** — the engine already has the consolidation feed. `[internal endpoint]` and
  `[internal endpoint]` exist on the Rust side, and `dream_count` is persisted. Read the
  lattice, drop the channel join.
- **Training feed** — `[internal module]` already records turns, and the tutoring pipeline
  writes `pipeline_curriculum.json`. Both are on disk. Read those.
- **Tutor send** — this is the one that needs building rather than rewiring: there is no live tutor
  endpoint at all, which is why the box only ever posted to a channel. The Oracle path now has a
  real reply pipeline (v9.10.846), so the tutor box can finally talk to KAI directly.

**B. Delete outright.** The 9 `[internal endpoint]*` routes, `[internal endpoint]`,
`[internal endpoint]`, `[internal endpoint]`, `[internal endpoint]*`, `[internal endpoint]`,
`[internal endpoint]`. These describe Discord itself; nothing in Oracle OS needs them.

**C. Check before touching.** `[internal endpoint]`, `[internal endpoint]`, `[internal endpoint]`, `[internal endpoint]`,
`[internal endpoint]`, `[internal endpoint]`, `[internal endpoint]*`, `[internal endpoint]*`, `[internal endpoint]`,
`[internal endpoint]*`, `[internal endpoint]*`. These are Oracle OS features that happen to *also* consult
Discord — usually to resolve a user or post a notification. Each needs its Discord branch removed
without removing the feature.

## The engine side

Already handled in v9.10.846: the reply pipeline that reaches KAI's own voice existed only in
`handle_discord_turn`, so the Oracle path could not speak at all in RSHL-native mode. It now calls
`rshl_lattice_reply()`, which runs the same stages in the same order.

Still Discord-only in `[internal module]`, from `KAI-GOAL-generative-mind.md` §7:
the turn router, the tutoring direct-recall branch, `native_stack_reply`, training mode, attachment
and vision handling, and `store_or_reinforce` of the human's own message — which is how KAI learns
from a conversation at all. **Verify that last one first.** If the Oracle path does not store the
turn, KAI has not been learning from anything the owner has said to him in Oracle OS.

## Order

1. Build and verify v9.10.845 / v9.10.846. Two Rust changes are outstanding and unbuilt; nothing
   else should be stacked on them until a real conversation confirms they work.
2. Verify `store_or_reinforce` on the Oracle path. This is the highest-stakes unknown on the list.
3. Group A, one endpoint at a time, each verified in the Learning area before the next.
4. Group C, removing Discord branches without removing features.
5. Group B deleted, plus `[internal endpoint]`, `handle_discord_turn`, and `tools/oracle-discord/bots/`,
   in one commit that names everything removed.

**Do not delete first and port after.** The Discord path is still the only working reference for
what a complete KAI turn looks like.
