dsh-ingest

Rebuild the DSH node's persistent knowledge state. Runs register-claude.py to (re)create the dome.db schema and upsert agents/skills/tools/stack rows, then runs ingest.py to re-index kb/, logs/, docs,

SKILL.md

GitHub

You are restoring or refreshing the DSH node's knowledge graph and agent registry. This skill is the recovery path when db/dome.db gets corrupted, when new KB content is added, or after an ingest-breaking dependency upgrade.

1. Preflight

cd "$DOME_ROOT"
test -f .venv/bin/activate || { echo "no venv — run dsh-setup first"; exit 1; }
source .venv/bin/activate
python3 -c "import sqlite3, chromadb, sentence_transformers, hashlib" || { echo "deps missing — pip install -r compute/requirements.txt"; exit 1; }

If the venv doesn't exist or deps are missing, stop and point the user at the dsh-setup skill first.

2. Register Claude + skills + tools in dome.db

python3 scripts/register-claude.py

What it does:

  • Creates (if missing) tables: sessions, stack, agents, skills, tools
  • UPSERTs the Claude agent row into agents
  • UPSERTs 8 skill rows into skills (docx, pdf, pptx, xlsx, schedule, setup-cowork, skill-creator, consolidate-memory)
  • UPSERTs 26 tool rows into tools
  • Mirrors everything into stack as category-tagged entries

Keyed on (category, name) so it's safe to re-run; only the updated_at and descriptions change.

Verify:

sqlite3 db/dome.db "SELECT name FROM sqlite_master WHERE type='table'"    # 5+ tables
sqlite3 db/dome.db "SELECT COUNT(*) FROM agents"                          # 1
sqlite3 db/dome.db "SELECT COUNT(*) FROM skills"                          # ≥ 8
sqlite3 db/dome.db "SELECT COUNT(*) FROM tools"                           # ≥ 26
sqlite3 db/dome.db "SELECT COUNT(*) FROM stack"                           # ≥ 35

If the skill count is higher than 8, new skills were registered elsewhere — that's fine, the upsert doesn't delete anything.

3. Re-index the knowledge base

python3 scripts/ingest.py

What it does:

  • Walks kb/, logs/, README.md, INDEX.md, MANUAL.md, agents/core/
  • Accepted extensions: .md, .txt, .py, .ts, .json
  • Skips .venv/ and __pycache__/
  • Chunks each file and embeds via sentence-transformers (all-MiniLM-L6-v2)
  • Writes to ChromaDB namespace dome-kb at db/chroma/

The script prints a per-file chunk count and a final total. Typical fresh-install expectation: 1,800–3,700 chunks depending on how many session logs are present.

Verify:

python3 -c "
import chromadb
c = chromadb.PersistentClient('db/chroma')
print(f'dome-kb: {c.get_collection(\"dome-kb\").count()} chunks')
"

4. Akashic collection hygiene

The akashic namespace uses a specific sentence-transformer embedding function. If it was previously created with a different embedder, the akashic:write+query roundtrip in pre-spore-verify will fail with Embedding function conflict.

Check:

python3 -c "
import chromadb
c = chromadb.PersistentClient('db/chroma')
names = [col.name for col in c.list_collections()]
print('collections:', names)
"

If akashic is in the list but empty (0 chunks) AND pre-spore-verify fails on it, drop and recreate:

python3 -c "
import chromadb
c = chromadb.PersistentClient('db/chroma')
if 'akashic' in [col.name for col in c.list_collections()]:
    c.delete_collection('akashic')
    print('dropped stale akashic collection — will recreate on first write')
"

The next pre-spore-verify.py run will seed the first akashic record (test write) cleanly.

5. Verify everything loads

python3 scripts/pre-spore-verify.py

Expected output ends with:

═══════════════════════════════════════
  27/27 checks passed

  ✅ ALL SYSTEMS GO — READY FOR SPORE.SH
═══════════════════════════════════════

The 27 checks:

  • 12 dependency imports (numpy, scipy, sympy, numba, torch, qiskit, pennylane, cirq, matplotlib, networkx, mpmath, pandas)
  • 7 skill-module verify() roundtrips
  • 1 akashic write+query roundtrip

6. Report

✅ dome.db: <agents>/<skills>/<tools> rows
✅ chroma/dome-kb: <N> chunks
✅ chroma/akashic: <M> chunks
✅ pre-spore-verify: 27/27

Non-negotiables

  • Never run ingest.py from outside $DOME_ROOT. It uses repo-relative paths; wrong cwd = wrong source set.
  • Never drop dome.db. The schema migrations are forward-only; there's no rollback. If the file is suspected corrupt, back it up (cp db/dome.db db/dome.db.bak.$(date +%s)) before deleting.
  • Never drop dome-kb blindly. Re-ingest takes 30+ seconds and you lose any manual records. Only delete when a schema or embedder change forces it.
  • Never commit db/chroma/ or db/*.db. Both are in .gitignore; they are per-node state, not code.