CrumbCore / Crumbforest â Bestandsaufnahme & nĂ€chste Pipeline
Status: Arbeitsdokument fĂŒr die Crew
Stand: 2026-08-07
Provenienz: Workspace-Kopie unter /home/sysop/workspace/Crumbcore-V0.0
0. Leitplanke: CKL ist nicht verhandelbar
Crumbforest ist ein System fĂŒr Kinder. Die Childrenâs Knowledge License (CKL) und ihre Schutzprinzipien sind daher kein nachtrĂ€glicher Compliance-Check, sondern ein Architektur-Gate.
Keine technische Entscheidung gilt als akzeptiert, wenn sie eines dieser Prinzipien verletzt:
- kein Ăberwachen, Bewerten, Ranking oder Profiling von Kindern
- keine Manipulation oder Ausbeutung
- Datenhoheit und verstÀndliche Nutzung
- sichere Trennung zwischen Kinder-/TagebuchrÀumen
- nachvollziehbare Löschung und Exportierbarkeit
- Offline-first, lokale Kontrolle und transparente Grenzen
- keine heimliche Ausleitung von Inhalten an externe Modelle oder Dienste
- kindgerechte, erklĂ€rbare und nicht ĂŒberfordernde Interaktion
- CKL bleibt bei Forks, Migrationen, Rewrites und Deployments sichtbar
Referenzen:
LICENSE-CKL.mdETHICS.mdDATA_PRIVACY_LOCATION.mdHANDBUCH_KRUEMEL.mdHUMAN_CRUMB.mdMACHINE_CRUMB.md
1. Provenienz und Gegenstand der Analyse
Nicht vermischen:
Crumbcore-V0.0
historischer/ĂŒbergeordneter Anwendungskontext
Crumbcore-V0.0/native_crumbcore_v1
native Debian-Betriebs- und Deploymentbasis
crumbcrm_crumbcore_v1
separater Rewrite-/Weiterentwicklungsstand
Workspace
Arbeitskopie fĂŒr Analyse, Tests und neue Entwicklung
lokales Gitea :3000
Zwischenstation, Review und RĂŒckfallebene
git.crumbforest.org
bewusster Veröffentlichungs-/Crew-Stand
Die Analyse startet mit:
/home/sysop/workspace/Crumbcore-V0.0/native_crumbcore_v1
Die native Variante wird immer zusammen mit der Anwendung im Parent-Repo betrachtet. Der native Unterordner enthĂ€lt vor allem systemd-, NGINX-, Installations-, Backup-, VPN- und Sicherheitsmaterial; die RAG-/Chat-/Datenlogik liegt ĂŒberwiegend unter app/.
2. Bekannter Ausgangsbestand
Codebase-Memory fĂŒr Crumbcore-V0.0:
- 3.228 Nodes
- 6.265 Edges
- 291 Dateien
- 207 Funktionen
- 70 Klassen
- 77 HTTP-Routen
- 687
CALLS - 277
IMPORTS - 52 Testbeziehungen
Erkannte Sprachen:
- Python: 67 Dateien
- HTML: 63
- Bash: 43
- SQL: 7
- CSS: 7
- JavaScript: 1
- YAML: 1
Native-Scope:
- 1.178 Nodes
- 1.278 Edges
- 81 Dateien
- 46 Funktionen
- 19 Bash-Dateien
- 2 Python-Dateien
- 2 SQL-Dateien
- 54 Markdown-Dateien
Aktuelle Zielarchitektur des nativen Betriebs:
HTTPS â NGINX â FastAPI/Uvicorn
âââ MariaDB/MySQL
âââ Qdrant
systemd:
crumbforest.service
crumbforest-indexing.service
Historische Entwicklung, die erhalten und verstanden werden muss:
CakePHP-Prototyp
â erstes RAG ohne Agenten
â Docker-App mit MariaDB + Qdrant
â FastAPI-/Rollen-/Diary-Ausbau
â natives Debian-Setup
â VPN / lokale RZ-Struktur
â NetBox + Ansible-Betreuung
â Constellation/Sternenkarte fĂŒr Qdrant
3. Pipeline der Bestandsaufnahme
Phase A â Herkunft, Laufzeit und Grenzen
- [x] Repo-Pfade, Remotes, Branches und Commits dokumentieren.
Belegt 2026-08-07 (Codebase-Graph +git log, lokale Klone/Users/bmt/rewrite_core/):
Crumbcore-V0.0âgit.crumbforest.org/branko/Crumbcore-V0.0.git, Branchmain, HEAD14a0e79("wuhuuu"), Arbeitsbaum sauber.
crumbcrm_crumbcore_v1(Rewrite) âgit.crumbforest.org/branko/crumbcrm_crumbcore_v1.git, Branchmain, HEADf40b67e, Arbeitsbaum sauber. - [ ] SOT, Workspace, lokales Gitea und veröffentlichter Crew-Stand klar markieren.
- [x] TatsĂ€chliche Produktionspfade gegen Dokumentationspfade prĂŒfen (
/opt/crumbforest, Qdrant, MariaDB, NGINX).
Belegt 2026-08-07, per SSH live aufbackbone(87.106.12.97) undnullfeld(194.164.194.191) geprĂŒft â wichtige Verwechslungsgefahr:/opt/crumbforestexistiert auf beiden Hosts, ist aber zweierlei:
ânullfeld(.org/.de/.com): die echte Crumbcore-App.systemctlzeigtcrumbforest.service(aktiv, lĂ€uft) +crumbforest-indexing.service, dahinter MariaDB + Qdrant, seit Feb. 2026 live, aktiv genutzt (Crew, keine Kinder â s. Frage 3).
âbackbone(.io): keincrumbforest.service, sondern NetBox (seeds.crumbforest.io) plus separate Subdomain-Dienste (chat.,forest.,research.,transformer.,monitor.,nopaper.,ozmai.crumbforest.io) unter demselben Pfadnamen. Wer kĂŒnftig "/opt/crumbforest" sagt, muss den Host mitnennen. - [ ] Docker- und natives Setup als historische Varianten vergleichen.
- [ ] NetBox-/Ansible-Verantwortung und tatsÀchliche Quelle der Deployments nachvollziehen.
- [ ] Keine Secrets aus
.env, Datenbanken, Logs oder Backups in dieses Dokument ĂŒbernehmen.
Ergebnis: Provenienz- und Laufzeitkarte.
Phase B â Datenfluss und CKL-Grenzen
FĂŒr jeden Datenfluss dokumentieren:
Eingabe â Authentisierung â Speicherung â Embedding â Retrieval
â Prompt/Provider â Antwort â Log/Audit â Löschung/Export
- [ ] Kind-/BenutzeridentitÀt und Rollenmodell verfolgen.
- [ ] Tagebuch- und Kinder-DatenflĂŒsse verfolgen.
- [ ] Qdrant-Collection-/Payload-Trennung prĂŒfen.
- [ ] PrĂŒfen, ob
child_idin jedem Suchpfad sicher und unverÀnderbar gesetzt wird. - [ ] Verhalten bei fehlender, falscher oder fremder
child_idtesten. - [ ] Admin-, Demo- und öffentliche Pfade getrennt prĂŒfen.
- [ ] Externe Provider und deren Datenweitergabe sichtbar machen.
- [ ] Chat-, RAG-, Prompt-, Fehler- und Audit-Logs auf Kinderinhalte prĂŒfen.
- [ ] Löschung und Export ĂŒber MariaDB, Qdrant, Logs und Backups verfolgen.
- [ ] Telemetrie, Ranking, Profilbildung und Tracking explizit ausschlieĂen oder begrĂŒnden.
Ergebnis: CKL-Datenflusskarte mit roten/harten Grenzen.
Phase C â Funktionale Architektur
- [ ] FastAPI-Einstiegspunkte und Router inventarisieren.
- [ ] ProviderFactory und Embedding-Provider untersuchen.
- [ ] Markdown-Chunking und Indexierungsreihenfolge dokumentieren.
- [ ] Qdrant-Collections und ihre fachlichen Bedeutungen kartieren.
- [ ] MariaDB-Schema und Relationen kartieren.
- [ ] Rollen-/Chat-Routing und
crumbsealgetrennt betrachten. - [ ] Constellation-Datenquelle und öffentliche Sicht prĂŒfen.
- [ ] Hintergrundindexierung und Startup-Reihenfolge prĂŒfen.
- [ ] Backup-/Restore-Pfade einschlieĂlich Qdrant prĂŒfen.
- [ ] Vorhandene Tests ausfĂŒhren, LĂŒcken markieren und keine Tests durch reine Smoke-Checks ersetzen.
Ergebnis: belastbare Architekturkarte statt nur OrdnerĂŒbersicht.
Phase D â Betriebs- und SicherheitsprĂŒfung
- [x] systemd-Units auf Pfade, Benutzer, Rechte und Restart-Verhalten prĂŒfen.
Belegt 2026-08-11, Quelle: livenullfeld(194.164.194.191) per SSH, gespiegelt inCrumbQuestions_v0/src/deployment_checklist.rs(.md â .html â offline â kernel â rust-Pipeline, portiert ausVERIFICATION_CHECKLIST.md).
crumbforest/crumbforest-indexingbeidesystemctl is-enabledâenabled. Prozess lĂ€uft alscrumbforest-User, nicht root (ps aux | grep uvicorn)./opt/crumbforestOwnercrumbforest:crumbforest,drwxr-x---..env-Rechte-rw-------, exakt wie in der Checkliste erwartet. - [ ]
ProtectSystem,ProtectHome,PrivateTmp,ReadWritePathsgegen den realen Betrieb validieren. (noch nicht geprĂŒft â die Unit-Datei selbst wurde nicht gelesen, nur Laufzeitverhalten) - [ ] NGINX-Proxy-, TLS-, WebSocket- und statische Pfade prĂŒfen. (Teilbefund: HTTPâHTTPS-Redirect bestĂ€tigt (301), volle Proxy-Konfiguration noch offen)
- [x] MariaDB und Qdrant auf Bindings und öffentliche Erreichbarkeit prĂŒfen.
Belegt 2026-08-11, Quelle:ss -tlnpaufnullfeld, live.
Qdrant (:6333) und die App (:8000) binden korrekt an127.0.0.1â nicht von auĂen erreichbar.[!] CKL-Risiko: MariaDB (:3306) bindet an*:3306(alle Interfaces), nicht nur localhost.ufwhat keine explizite Regel fĂŒr Port 3306 â der Schutz lĂ€uft ausschlieĂlich ĂŒber die Default-Deny-Policy der Firewall, nicht ĂŒber eine zusĂ€tzliche Bind-BeschrĂ€nkung. Fehlende Verteidigung in der Tiefe: sollte zusĂ€tzlich an127.0.0.1gebunden werden, nicht nur durch die Firewall abgesichert sein. - [x] Firewall-/VPN-Annahmen gegen NetBox-/Ansible-RealitĂ€t prĂŒfen.
Belegt 2026-08-11, Quelle:ufw status numberedaufnullfeld, live (40 Regeln geprĂŒft).
Ports 80/443 offen (HTTP/HTTPS), 22 rate-limited, 3000 offen (Gitea), 51820/udp offen (CrumbVPN WireGuard). Mehrere expliziteDENY-Regeln gegen einzelne IPs/Subnetze â passt zu den in Memory dokumentierten "jĂŒngsten RZ-SicherheitsvorfĂ€llen". Port 8000/3306/6333 haben keine explizite ALLOW-Regel â 3306 bleibt trotzdem der oben genannte CKL-Risikopunkt, weil der Bind selbst nicht eingeschrĂ€nkt ist. - [ ] Installations-, Update- und Backup-Skripte mit Shell-Lint und Dry-Run prĂŒfen.
- [ ] Default-Zugangsdaten und Demo-Modus aus Produktionspfaden entfernen oder hart absichern.
- [ ] Security-Scanner zu einem reproduzierbaren, CKL-relevanten Testkatalog ausbauen.
Ansatz vorhanden:CrumbQuestions_v0/src/deployment_checklist.rsist ein erster echter, automatisiert testbarer Katalog (cargo testschlĂ€gt fehl, falls ein bekannter Fail stillschweigend auf "Pass" umetikettiert wird) â aber bisher nur 15 der ~90 Original-Punkte, nicht ausgebaut auf die volle Checkliste. - [ ] Restore-Test durchfĂŒhren: Datenbank, Vektoren, Konfiguration und Logs.
ErgĂ€nzung 2026-08-11, Performance (bonus, nicht ursprĂŒnglich in Phase D verlangt): Response-Zeiten /health 1,1ms, /de/login 1,3ms (beide weit unter den in VERIFICATION_CHECKLIST.md erwarteten <1s/<2s). Speicher 192MB RSS (Erwartung <500MB). Disk 438G frei von 492G. Alles im grĂŒnen Bereich, live gemessen.
Bekannter Sicherheits-Gap, live bestÀtigt: curl -I https://crumbforest.org/de/login zeigt keinen der in der Checkliste erwarteten Header (X-Frame-Options, X-Content-Type-Options, X-XSS-Protection). Die eigene Checkliste erwartet sie, die NGINX-Config liefert sie nicht.
Ergebnis: Betriebsrisiko- und Wiederanlaufkarte â Kernpunkte jetzt belegt statt nur angenommen. Zwei offene, dokumentierte LĂŒcken (MariaDB-Bind, fehlende Security-Header), keine davon bisher als kritischer Vorfall bestĂ€tigt, beide konkret behebbar.
Phase E â Vergleich mit crumbcrm_crumbcore_v1
Erst nach AâD vergleichen, nicht vorher vermischen:
- [x] Welche Komponenten sind echter Rewrite?
- [x] Welche Teile sind nur umorganisiert oder historisch kopiert?
- [x] Welche CKL-Schutzmechanismen sind besser/schlechter?
- [x] Welche Datenmodelle sind inkompatibel?
- [x] Welche Betriebsannahmen unterscheiden sich?
- [x] Welche Tests und Migrationen existieren?
- [ ] Welche Komponenten sollten ĂŒbernommen, isoliert oder verworfen werden? (Crew-Entscheidung, s. u.)
Belegt 2026-08-07 â Quelle: Codebase-Graph-Analyse beider lokaler Klone (Crumbcore-V0.0 HEAD 14a0e79, 3228 Nodes · crumbcrm_crumbcore_v1 HEAD f40b67e, 6251 Nodes; Node-Zahl â Codeumfang, Rewrite hat viele HTML/Section-Nodes mehr, aber weniger Python-Logik).
| Dimension | Crumbcore-V0.0 (nativ) |
crumbcrm_crumbcore_v1 (Rewrite) |
|---|---|---|
| Python-Dateien | 67 | 38 |
| Routen (HTTP) | 77 | 48 |
| Router-Module | 16 (admin_logs, admin_roles, admin_users, admin_vectors, constellation, docs_reader, pulse, + 9 gemeinsame) |
9 (nur admin_post, admin_rag, chat, chat_page, crumbforest_roles, diary_rag, document_rag, home, public_posts) |
| Testdateien | 3 (test_vectors, test_admin_logs, test_integration) |
1 (nur test_integration) |
| DB-Migrationstooling | keins (nur MIGRATION_FROM_CRUMBAPI.md, historische Doku) |
keins |
| CrumbSeal/Passkante (Safety-Content-Filter) | vorhanden (app/utils/crumbseal.py, native_crumbcore_v1/crumbseal.py) |
nicht vorhanden â kein Treffer im gesamten Rewrite-Repo |
diary_rag.py Auth (current_user/admin_required) |
fehlt (s. Frage 2/3) | fehlt identisch â 1:1 kopierter Code, nicht neu geschrieben |
Legal/Compliance-Seiten (/impressum, /datenschutz, /hardware, /software) |
nicht vorhanden | neu, in home.py |
Nutzer-Einstellungen (/settings, /settings/theme, /settings/accessibility) |
nicht vorhanden | neu |
| Rust-Artefakt | keins | docs/crumbforest/krĂŒmel_api_specs.rs â explizit als "poetisches API-GerĂŒst zum WeitertrĂ€umen" markiert, kein produktiver Code, kein Bezug zu CKL-Grenzen oder echten Endpunkten |
Einordnung:
- Echter Rewrite, nicht nur umsortiert: Admin-Funktionsumfang wurde bewusst reduziert (Nutzerverwaltung, Logs, Vector-Admin, Constellation, Docs-Reader, Pulse fehlen komplett), dafĂŒr kamen Compliance-Seiten und Nutzer-Settings neu dazu. Das ist eine Verschiebung von "internem Admin-Werkzeug" hin zu "Endnutzer-zugewandter Kern" â eine echte Architekturentscheidung, kein Copy-Paste.
- CKL-Schutzmechanismen: im Rewrite schlechter, nicht besser. Die einzige inhaltliche Sicherheitsschicht, die es im nativen System ĂŒberhaupt gibt (CrumbSeal/Passkante, Content-Gate bei Hard-Flags), fehlt im Rewrite vollstĂ€ndig. Wer auf crumbcrm_crumbcore_v1 aufbaut, baut ohne den einzigen vorhandenen Schutzmechanismus weiter â das mĂŒsste zuerst nachgezogen werden, nicht als Nice-to-have spĂ€ter.
- Die Diary-Auth-LĂŒcke (Frage 2/3) ist kein Einzelfund, sondern ĂŒber beide Codebasen identisch â der Rewrite hat sie nicht behoben, weil diary_rag.py praktisch unverĂ€ndert ĂŒbernommen wurde. Wird crumbcrm_crumbcore_v1 je produktiv, muss dieser Fix dort genauso nachgezogen werden.
- Rust ist aktuell Dichtung, keine Grenze. FĂŒr Frage 7 (harte Rust-Grenzen) relevant: es gibt schon ein Rust-Artefakt im Rewrite-Repo, aber der Autor selbst hat es explizit als unfertige Skizze markiert â kein Beleg fĂŒr oder gegen die Rust-Hypothese, nur ein Hinweis, dass der Gedanke schon mal skizziert wurde.
- Datenmodelle: beide nutzen dasselbe MariaDB-Schema-Muster (diary_entries, post_vectors, users, audit_log) und dieselbe Qdrant-Collection-Namenskonvention ({prefix}_{locale}, diary_child_{id}) â kompatibel, keine Divergenz gefunden.
Ergebnis: Vergleichsmatrix Crumbcore-V0.0 â crumbcrm_crumbcore_v1 â siehe Tabelle oben.
Phase F â Zukunftsoptionen Python, Go und Rust
Keine Sprachentscheidung aus BauchgefĂŒhl. Zuerst Komponenten schneiden:
Anwendung / UI
RAG-Orchestrierung
Embedding-/Indexierungsworker
CKL-Sicherheitsgrenzen
Event-/Audit-Kern
VPN-/Netzwerknahe Dienste
Deployment-/Agentenlose Betriebshelfer
FĂŒr jede Komponente bewerten:
- [ ] SicherheitskritikalitÀt
- [ ] Datenhoheit und Offline-FĂ€higkeit
- [ ] Laufzeit-/Speicherbedarf
- [ ] Ănderungsfrequenz
- [ ] Crew-Kompetenz und Wartbarkeit
- [ ] Testbarkeit
- [ ] Bibliotheks-/Provider-Ăkosystem
- [ ] Deployment ĂŒber Debian, NetBox und Ansible
- [ ] Migrationsrisiko und RĂŒckfallmöglichkeit
VorlÀufige Hypothesen, noch keine Entscheidungen:
- Python/FastAPI kann fĂŒr RAG, Provider und schnelle fachliche Iteration sinnvoll bleiben.
- Go könnte sich fĂŒr schlanke native Worker und robuste Betriebsdienste eignen.
- Rust könnte sich fĂŒr besonders harte CKL-/Daten-/Event-Grenzen eignen.
- Ein kompletter Rewrite ist erst nach Datenfluss- und Testanalyse vertretbar.
- Ein schrittweiser Ersatz einzelner Komponenten ist dem Big Bang vorzuziehen.
Ergebnis: begrĂŒndete Technologieentscheidung oder bewusstes ânoch nicht entscheidenâ.
4. Harte Akzeptanz-Gates
Kein Release, keine Migration und kein Rewrite-Schritt ohne:
- [ ] CKL-Check bestanden.
- [ ] Kinder-/Tagebuch-Datentrennung getestet.
- [ ] Löschung und Export nachgewiesen.
- [ ] Externe DatenflĂŒsse dokumentiert und minimiert.
- [ ] Keine versteckten Profile, Rankings oder Telemetrie.
- [ ] Offline-/lokaler Fallback beschrieben.
- [ ] Backup und Restore getestet.
- [ ] Provenienz von Code, Daten und Dokumentation eindeutig.
- [ ] Tests reproduzierbar im Workspace ausfĂŒhrbar.
- [ ] Veröffentlichung zur Crew ausdrĂŒcklich freigegeben.
5. Fragen an die Crew
Bitte ErgÀnzungen nicht nur als Meinungen, sondern möglichst mit Datei-, Commit- oder Laufzeitbezug eintragen:
-
Welche ursprĂŒngliche CakePHP-Idee darf auf keinen Fall verloren gehen?
[x] belegtâ Quelle: Crew-Aussage, 2026-08-07.
PHP war der "alte Backend-Test" â nicht das, was bleiben muss. Was bleiben muss, ist die Trennung dahinter: statisches Frontend, die Antwort kommt aus der Null (Nullfeld/Backend-Kern liefert die Intelligenz, das Frontend selbst bleibt schlank und austauschbar). Das ist die eigentliche CakePHP-Idee, nicht die konkrete PHP-Implementierung â und deckt sich mit dem, was in Crumbcore-V0.0 heute an FastAPI/Jinja2-Templates ohnehin schon so gebaut ist (server-gerenderte, weitgehend statische Seiten + API-Kern). -
Wo liegen heute die echten CKL-Grenzen â im Code, in der Datenbank oder nur in Dokumenten?
[x] belegtâ Quelle: Code-Graph-AnalyseCrumbcore-V0.0(lokal + live aufnullfeld:/opt/crumbforest/), 2026-08-07.
Die jĂŒngsten RZ-SicherheitsvorfĂ€lle bestĂ€tigen empirisch, dass ein klassischer Perimeter (zentrale Firewall/Auth) nicht das tragende Modell ist â er wurde kompromittiert. Der reale Schutz lĂ€uft ĂŒber VPN + Passkarte + 3-Faktor-Auth (Stimme, Tanz, SSH-Key) je KrĂŒmel, verwaltet ĂŒber die NetBox.
Code-Befund: Die gesamte In-App-Authentifizierung istapp/deps.py::current_user()âreq.session.get("user"), gesetzt via E-Mail/bcrypt-Login (app/main.py,SessionMiddleware). Kein VPN-, Passkarte- oder 3-Faktor-Bezug im Code.Depends(current_user)/Depends(admin_required)sind auf Admin/CMS-Routen (admin_post.py,admin_users.py,admin_rag.py,admin_roles.py,admin_logs.py) gesetzt, fehlen aber komplett aufapp/routers/diary_rag.py(Kind-Tagebuch-RAG) undapp/routers/chat.py(Haupt-Persona-Chat) â dort schĂŒtzt nur Netzwerk-Reachability + der inhaltliche CrumbSeal/Passkante-Filter (Content-Gate, kein Identity-Gate). Pergit log --followunverĂ€ndert seit Initial Commit6c38ed6(2025-12-07) â keine Regression, Ausgangszustand. Wichtig: trotz fehlender Auth zeigt der reale nginx-access.logaufnullfeldnull Treffer auf/api/diary/*seit Bestehen â der Pfad ist eingehĂ€ngt (main.py), aber nie tatsĂ€chlich angefragt worden. "Importiert" â "in Anwendung": aktuell kein aktiver Expositionspfad, sondern unbenutzter Code, der vor dem ersten echten Diary-Eintrag eine Zugriffskontrolle braucht. Die 3-Faktor-PrĂŒfung ist damit bestĂ€tigt: kein Code-Pfad, sondern bewusstes Zukunfts-Feature â passend zur KrĂŒmel-Phase ohne Kinder im System (s. Frage 3). -
Welche Kinder-/Diary-Flows sind produktiv erprobt?
[x] belegt: keineâ Quelle: MariaDB-Live-Abfragenullfeld:/opt/crumbforest, 2026-08-07.
Vier unabhĂ€ngige Quellen bestĂ€tigen Null-Nutzung:diary_entries= 0 Zeilen,children= 0 Zeilen,audit_logmitaction LIKE 'diary%'= 0 EintrĂ€ge,post_vectorsmitpost_type='diary'= 0 EintrĂ€ge, nginx/api/diary/*= 0 Treffer seit Bestehen. Die 9 Accounts inuserssind durchweg Crew/Team (admin@crumb.local,demo@crumb.local,heimkind@onezeromore.com, u.a.) â keine Ghost-Accounts, keine Kinder. Alle im Chat-Log sichtbaren Rollen (Eule, Deepbit, Bugsy, Vektor, âŠ) wurden von Crew/3FCrumb-TestidentitĂ€t durchgespielt, nicht von echten Kindern. -
Welche Teile von Qdrant und Constellation sind kanonisch?
[x] belegtâ Quelle: Code-Graph-Analyse + Live-Lognullfeld:/var/log/crumbforest/chat_history.jsonl(412 EintrĂ€ge, FebâAug 2026), 2026-08-07.
Kanonische Qdrant-Collections lautRAGService._get_collection_name():{prefix}_{locale}(Standard-Prefixposts, z. B.posts_de) sowiediary_child_{id}pro Kind (aktuell 0 Instanzen, s. Frage 3). Korrektur zur ursprĂŒnglichen Annahme: nicht nur DumboSQL/Vektor, sondern 22 Personas mit realen Interaktionen im Log (Eule 110, Deepbit 63, Ozcrumb 24, Bugsy 21, Capacitoby 20, Cloudcat 19, Funkfox 19, Bashpanda 17, Spider 17, u. a.). Die Constellation-Visualisierung liest nicht live aus Qdrant âconstellation.get_nodes()(app/routers/constellation.py:68) baut die Sternenkarte aus Rollen-Config +ChatLogger-Token-ZĂ€hlern; âKnowledge" = Token-Verbrauch, nicht Vektor-NĂ€he. Constellation ist optisch ein Sternenraum, inhaltlich ein Token-Usage-Dashboard. -
Welche Betriebsannahmen stammen noch aus der Docker-Zeit?
[x] belegt, teilweiseâ Quelle: Live-Checknullfeld/backbone+Ansible-Crumbforest-Repo, 2026-08-07.
Der native Betrieb aufnullfeldist real vollzogen âcrumbforest.servicelĂ€uft direkt via systemd/Uvicorn, nicht in Docker. Reste aus der Docker-Zeit liegen aber noch sichtbar im Deploy-Verzeichnis:/opt/crumbforest/app/Dockerfileundentrypoint.shexistieren dort weiterhin, unbenutzt (kein laufender Container, keindocker/compose-Prozess auf dem Host) â historisches GepĂ€ck, kein aktives Risiko.
ErgĂ€nzung: Es gibt zusĂ€tzlichcrumbforest.ioauf einem eigenen Host (backbone, getrennt vonnullfeld/.org â s. Phase-A-Fund oben). Die aktuelle BetriebsrealitĂ€t ist dort klar nachdocker:borgmatic(borg-basiert) sichert beide Hosts gegenseitig âbackbone â nullfeldundnullfeld â backbone, je/opt/crumbforestexplizit im Backup-Scope (borgmatic-nullfeld.yaml,borgmatic-backbone.yaml), tĂ€glich, verschlĂŒsselt (zstd,3), Aufbewahrung 7 tĂ€glich/4 wöchentlich/6 monatlich/2 jĂ€hrlich. Das ist eine aus der Docker-Ăra nicht mitgenommene, sondern neu und nativ aufgebaute Annahme: Persistenz lĂ€uft ĂŒber Dateisystem-Backup, nicht ĂŒber Docker-Volumes. Einzige dokumentierte LĂŒcke dabei (2026-07-16 geschlossen):/var/lib/giteafehlte zwischenzeitlich im nullfeld-Backup-Scope â mittlerweile behoben, als Lehre im Config-Kommentar festgehalten. -
Was wird inzwischen tatsÀchlich durch NetBox und Ansible kontrolliert?
[x] belegtâ Quelle:Ansible-Crumbforest-Repo, Volltextsuche ĂŒber alle Playbooks/Rollen, 2026-08-07.
Laut Aussage erkennt die NetBox KrĂŒmel anhand von Stimme/Tanz/SSH-Key (3-Faktor) fĂŒr SOT-Uploads. Das deckt den Beitrags-/Vertrauenspfad ab â geprĂŒft, ob NetBox auch Deployment/Config der Crumbcore-App steuert oder nur IdentitĂ€t:
Kein einziges Playbook inAnsible-Crumbforestreferenziertcrumbforest.service,native_crumbcore_v1oderapp/. Was NetBox/Ansible hier tatsĂ€chlich kontrollieren: GerĂ€te-IdentitĂ€t/Tags/MAC (netbox-*.yml), einzelne Infra-Stacks als systemd-Units auf anderen Hosts (z. B.blackbox-hospital-systemd.ymlfĂŒr den separaten Hospital-KrĂŒmel-Stack), Backups (borgmatic.yml, s. Frage 5), nginx/VPN. Das Deployment der eigentlichen Crumbcore-App aufnullfeldlĂ€uft auĂerhalb der Ansible-Kontrolle â/opt/crumbforest/appist dort kein Git-Repo (git logschlĂ€gt fehl, "not a git repository"), also weder Ansible-verwaltet noch git-pull-basiert, sondern vermutlich manuell/per Copy deployt. Ergebnis: NetBox deckt IdentitĂ€t/Vertrauen ab, nicht App-Deployment â die beiden Rollen sind sauber getrennt, nicht vermischt. -
Wo braucht es harte Rust-Grenzen, wo wÀre Go ausreichend, wo bleibt Python besser?
[~] in Analyse, jetzt mit Code-Belegenâ Quelle: Crew-GesprĂ€ch 2026-08-07 (Bezug: OZMâĄNEXUS, onezeromore.com) + Phase-E-Vergleichsmatrix (s. o.).
OZM setzt Rust/FPGA fĂŒr die "nicht verhandelbaren" Determinismus-Grenzen ein (Nullfeld-Konzept). Das spricht dafĂŒr, harte CKL-Grenzen (Phase B:child_id-Erzwingung, Löschung/Export) als Kandidat fĂŒr Rust zu behandeln â nicht aus Performance-, sondern aus NachweisbarkeitsgrĂŒnden (kein Blackbox-Verhalten). FĂŒr Edge-Inferenz zeigt der aktuelle Container-Betrieb (RPi5 + Hailo-8L statt AMD Ryzen AI Max) zusĂ€tzlich: die kleinste tragbare Einheit wird zuerst bewiesen, bevor gröĂere Unified-Memory-Hardware in Betracht kommt â das sollte auch fĂŒr die Sprachentscheidung gelten (erst schlanker Worker in Go/Rust auf RPi-Klasse-Hardware zeigen, dann gröĂer denken).
ErgĂ€nzung 2026-08-07, aus der Phase-E-Vergleichsmatrix: Zwei konkrete Funde stĂŒtzen die Hypothese jetzt mit echten VorfĂ€llen statt nur Analogie zu OZM:
- CrumbSeal/Passkante â die einzige inhaltliche Schutzschicht â ist beim Rewrite kommentarlos verschwunden. Sie existiert in Crumbcore-V0.0 (app/utils/crumbseal.py), fehlt aber komplett in crumbcrm_crumbcore_v1 â kein Fehler, kein Test schlĂ€gt an (der Rewrite hat nur noch 1 Testdatei statt 3), einfach stillschweigend weg. Das ist exakt das Risiko, das "Blackbox-Verhalten" beschreibt: eine reine Python-Konvention ("man ruft die Funktion halt auf") hat nichts, was ihr Fehlen bei einem Rewrite erzwingen wĂŒrde.
- Die diary_rag.py-Auth-LĂŒcke (Frage 2/3) wurde 1:1 in den Rewrite mitkopiert, nicht neu bewertet â auch das ein Symptom fehlender erzwungener Grenzen: Depends(current_user) ist eine Konvention, kein Vertrag, den der Compiler/das Typsystem prĂŒft.
- Beide Funde sind kein Performance-Problem, sondern ein Nachweisbarkeits-/Vererbungsproblem ĂŒber einen Rewrite hinweg â spricht fĂŒr die OZM-Logik: CKL-kritische Pfade (Passkante-Gate, child_id-Scope, Löschung/Export) so bauen, dass ihr Fehlen nicht kompilieren wĂŒrde, statt sich auf Disziplin/Review zu verlassen. Das im Repo vorhandene einzige Rust-Artefakt (docs/crumbforest/krĂŒmel_api_specs.rs) ist dafĂŒr kein Beleg â der Autor selbst nennt es "poetisches API-GerĂŒst zum WeitertrĂ€umen", keine echte Implementierung, also bislang nur eine AbsichtserklĂ€rung, kein Erfahrungswert.
- Konkreter, kleinerer Zwischenschritt vor der groĂen Sprachentscheidung: unabhĂ€ngig von Rust/Go/Python könnte ein Contract-Test ("jede Route unter /api/diary und /api/documents MUSS current_user oder admin_required in ihren Dependencies haben, sonst schlĂ€gt CI fehl") das konkrete Symptom schon jetzt sprachunabhĂ€ngig absichern â bevor die gröĂere Architekturfrage entschieden ist.
Update 2026-08-10 â erster echter Beleg statt nur AbsichtserklĂ€rung: CrumbQuestions_v0 (git.crumbforest.org/branko/CrumbQuestions_v0, KrĂŒmel "Crumb Bridge", lokal auf crumbdesktop/iMac-Container gebaut) ist der erste tatsĂ€chlich funktionierende Rust-KrĂŒmel â kein Sketch mehr. Selbst geklont und unabhĂ€ngig nachgeprĂŒft (nicht nur das Audit-Dokument der Crew ĂŒbernommen): cargo fmt --check sauber, cargo clippy --all-targets --all-features -- -D warnings sauber, cargo test 4 grĂŒne Tests (Audit-Dokument nannte 3 â kleine Differenz, vermutlich weil der Persistenz-Test danach dazukam). Code gelesen (src/lib.rs, axum + argon2 + unsafe_code = "forbid"):
- owner_id ist strukturell nicht clientseitig setzbar â NewQuestion hat gar kein owner_id-Feld, es kommt ausschlieĂlich aus der Server-Session. HĂ€rtere Garantie als der child_id-Parameter in diary_rag.py, der vom Client mitgeschickt und nur stellenweise gegen die DB geprĂŒft wird.
- Jeder CRUD-Handler prĂŒft current_user() zuerst; Scope danach konsistent role == Admin || owner_id == user.id â kein Handler ohne Check, kein Diary-artiger blinder Fleck.
- EnthĂ€lt genau den Test, der in Crumbcore-V0.0/crumbcrm_crumbcore_v1 fehlt: user_questions_are_scoped_but_admin_can_see_them â Cross-Owner-Isolation, nicht nur Happy-Path (s. Frage 8).
- Noch kein CrumbSeal/Passkante-Ăquivalent â aber das beansprucht der KrĂŒmel laut eigenem Scope auch nicht, das kommt erst mit dem Vektor-Adapter.
Kein Vollbeweis fĂŒr "Rust ĂŒberall", aber ein erster echter Datenpunkt: an genau der Stelle, wo Python zweimal (nativ und beim Rewrite) eine CKL-Grenze stillschweigend auslassen konnte, erzwingt dieselbe Grenze in Rust der Typ/Compiler von Anfang an mit.
Persönliche Einordnung aus der Crew: die ursprĂŒngliche RAG-Architektur wurde seinerzeit "klassisch CRM" gedacht, nicht CKL-first â dass jetzt ausgerechnet der Fragen-Kern (IdentitĂ€t, Scope, EigentĂŒmerschaft) zur ersten sauber bewiesenen Grundlage des Ăkosystems wird, ist eine bewusste Kurskorrektur, keine FuĂnote. CKL ist nicht verhandelbar â bleibt Leitplanke fĂŒr jeden weiteren KrĂŒmel dieser BrĂŒcke (Vektor-Adapter, SSH-SchlĂŒssel).
- Welche Tests fehlen, um einen Rewrite ĂŒberhaupt verantwortbar zu machen?
[x] belegtâ Quelle: Testverzeichnisse beider Codebasen, 2026-08-07.
Native hat 3 Testdateien (test_vectors.py,test_admin_logs.py,test_integration.py), der Rewrite nur noch 1 (test_integration.py) â Testabdeckung ist beim Rewrite geschrumpft, nicht gewachsen.
test_integration.pydeckt den Diary-Happy-Path ab (test_step_1_create_childâŠtest_step_6_check_status), aber keinen einzigen Fall, in dem ein Nutzer/eine Session versucht, auf ein fremdeschild_idzuzugreifen â genau die LĂŒcke aus Frage 2/3 wird also nicht getestet, obwohl der Test extra fĂŒr Diary geschrieben wurde.
FĂŒrcrumbseal/Passkante existiert in keiner der beiden Codebasen ein einziger Test â die einzige inhaltliche Sicherheitsschicht ist komplett ungetestet, auch dort, wo sie noch existiert (native).
Der Bezugspunkt, dass es besser geht, liegt schon im selben Repo:test_admin_logs.py::test_admin_logs_accessprĂŒft explizitclient.get("/admin/logs", allow_redirects=False)â erwartet302(nicht eingeloggt blockiert), dannapp.dependency_overrides[current_user] = ...â erwartet200(eingeloggt erlaubt). Exakt dasselbe Muster fehlt 1:1 fĂŒr/api/diary/*. Konkrete Mindestanforderung fĂŒr einen verantwortbaren Rewrite: (1) Cross-Child-Isolationstest fĂŒr Diary/Documents nach demtest_admin_logs-Muster, (2) mindestens ein CrumbSeal/Passkante-Test (Hard-Flag â Safety-Shield-Antwort, kein echter Modellaufruf), (3) ein Test, der/api/diary,/api/documentsundchat.pygegen eine Liste "musscurrent_user/admin_requiredhaben" abgleicht (s. Contract-Test-Vorschlag unter Frage 7) â damit ein zukĂŒnftiger Rewrite diese LĂŒcke nicht wieder stillschweigend mitkopiert.
Update 2026-08-10: Genau dieses fehlende Testmuster existiert jetzt anderswo im Ăkosystem, unabhĂ€ngig selbst nachgeprĂŒft â CrumbQuestions_v0 (Rust, s. Frage 7) hat mit user_questions_are_scoped_but_admin_can_see_them exakt den Cross-Owner-Isolationstest, der in beiden Python-Codebasen fehlt. Kein Fremdbeispiel mehr, sondern ein KrĂŒmel aus derselben Crew, an dem sich zeigen lĂ€sst, dass die drei obigen Mindestanforderungen machbar und schon einmal geschrieben wurden â der MaĂstab liegt jetzt im eigenen Ăkosystem, nicht nur in der Theorie.
-
Welche Daten mĂŒssen offline funktionieren, wenn Provider, VPN oder Internet ausfallen?
[x] belegt, teilweiseâ Quelle: Code-Graph-Analyse + Live-Lognullfeld, 2026-08-07.
Offline-first gilt inzwischen als durch reale VorfÀlle bestÀtigter Architekturentscheid, nicht nur als Prinzip. Der geplante physische Beweis (2000W PV / 2,5kWh Speicher, Verbraucher: 3à RPi5, Mikrotik SXE, Laptops) soll zeigen, dass der Container ohne RZ-/Netzanbindung weiterlÀuft.
Code-Befund:ProviderFactory.create_provider()(app/services/provider_factory.py:78-88) braucht fĂŒrollamakeinen API-Key, nurollama_base_urlâ Diary-RAG und Admin-RAG nehmenproviderals freien Parameter und könnten rein lokal laufen. Der Haupt-Chat (app/routers/chat.py) hat aber einen hart codierten Vorab-Check (if not settings.openrouter_api_key: raise HTTPException(503, ...)), der vor der eigentlichen Rollen-Modell-Auflösung greift â Chat blockt also ohne OpenRouter-Key komplett, selbst wenn die angefragte Persona lokal ĂŒber Ollama laufen sollte. Reale Nutzung bestĂ€tigt das: von 412 geloggten Interaktionen liefen 401 ĂŒber OpenRouter (Cloud) und nur 11 ĂŒber Ollama (2,7 %). Offline-FĂ€higkeit existiert im Provider-Layer, ist aber im Chat-Entry-Point nicht scharf geschaltet â Nachbesserung nötig, bevor der PV-Inselbetrieb-Test den Chat mit einschlieĂt. -
Welche Teile gehören in den SOT, welche bleiben Workspace-/Experimentierstand?
[x] belegtâ Quelle:git remote/git logauf beiden Klonen + Live-Checknullfeld, 2026-08-07.
Beide Codebasen liegen bereits aufgit.crumbforest.org/branko/âŠâ formal also schon auf dem "veröffentlichten Crew-Stand", nicht mehr im reinen Workspace (s. Phase-A-Fund oben). Trotzdem sind sie faktisch nicht gleichrangig:Crumbcore-V0.0ist der einzige Teil mit echtem SOT-Anspruch, weil er der einzige ist, der lĂ€uft (nullfeld,crumbforest.serviceaktiv, echte Nutzung seit Feb. 2026).crumbcrm_crumbcore_v1ist trotz Gitea-Veröffentlichung faktisch Workspace-/Experimentierstand â keinsystemd-Unit aufbackboneodernullfeld, in keinem Ansible-Inventar referenziert, nirgends deployt. "Auf dem SOT-Host liegen" â "SOT sein".- Der eigentliche blinde Fleck:
/opt/crumbforest/appaufnullfeldâ die Version, die tatsĂ€chlich fĂŒr Anfragen zustĂ€ndig ist â ist selbst kein Git-Repository (git logdort: "not a git repository"). Es gibt also keine strukturelle, nachprĂŒfbare Verbindung zwischen dem, was ingit.crumbforest.orgals HEAD14a0e79steht, und dem, was live aufnullfeldlĂ€uft â nur eine stichprobenartig bestĂ€tigte Ăbereinstimmung (beidiary_rag.pyidentisch, s. Frage 2). Das ist dieselbe LĂŒcke wie bei Frage 6: kein Ansible/CI-Pfad verbindet Repo und Deployment.
Empfehlung an die Crew:git.crumbforest.org/Crumbcore-V0.0als Code-SOT fĂŒhren, aber einen echten Deploy-Nachweis (git-pull-Hook oder minimaler CI-Schritt, der den deployten Commit-Hash aufnullfeldprotokolliert) ergĂ€nzen â sonst bleibt "SOT" eine Behauptung ohne Beleg fĂŒr das, was Nutzer tatsĂ€chlich erreichen.crumbcrm_crumbcore_v1sollte explizit als Rewrite-Workspace gekennzeichnet werden, bis es einen eigenen Deploy-Nachweis hat.
Neue Fragen aus dem Crew-GesprÀch vom 2026-08-07
-
[!] CKL-Risikoâ Kostenaussage im Vektor-Index. Die Persona Vektor zitiert im Live-Log "mit 1⏠können 5.000 bis 10.000 echte, kindgerechte Fragen beantwortet werden". Die realen Betriebszahlen aus demselben Log (412 Interaktionen, $1,1308, ~113k Tokens) ergeben aber nur ~360 Fragen pro Dollar â Faktor 15â25 Abweichung, vermutlich aus einem alten Pitchdeck stammend und falsch in den RAG-Kontext gelangt. Solange diese Zahl im Qdrant-Index liegt, wird sie von Personas als Fakt an Kinder/Crew ausgegeben. Braucht: Fundstelle im Index identifizieren, korrigieren oder mit Kontext versehen ("ZielgröĂe", nicht "Ist-Zustand"). Direkt relevant fĂŒr CKL-Prinzip "kindgerechte, erklĂ€rbare und nicht ĂŒberfordernde Interaktion" â falsche Zahlen sind das Gegenteil von erklĂ€rbar.
ErgĂ€nzung 2026-08-07:chat_history.jsonlhat gar keincost_usd-Feld im Schema (Keys:timestamp, character, user, interaction, rag, ai, session_id, tokens_estimated). Die im Dokument zitierte $1,1308 muss also extern austokens_estimated(Summe 113.076 ĂŒber alle 412 EintrĂ€ge) Ă Modellpreis berechnet worden sein, nicht direkt geloggt. Fundstelle im Vektor-Index selbst noch offen â brĂ€uchte gezielte Qdrant-Payload-Suche nach dem Pitchdeck-Zitat. -
[?] Crew-Entscheidung erforderlichâ Faktencheck-Mechanismus fĂŒr den RAG-Index. Punkt 11 ist vermutlich kein Einzelfall. Braucht es einen wiederkehrenden Abgleich zwischen geloggten Echtzeit-Betriebswerten (Kosten, Coverage, Uptime) und im Vektor-Index gespeicherten Aussagen aus Ă€lteren Dokumenten (Pitchdecks, frĂŒhe Konzepte), damit Personas keine veralteten Zahlen zitieren? -
[?] Crew-Entscheidung erforderlichâ PV-Lastprofil und 3D-Drucker. Die geplante PV-Anlage (2000W/2,5kWh) deckt die Dauerlast (RPi5, Mikrotik, Laptops) komfortabel ab. Der 3D-Drucker ist der einzige potenziell spitzenlastige Verbraucher. Soll er ĂŒber Lastmanagement (zeitlich entkoppelt vom Dauerbetrieb) laufen, oder wird die PV-Dimensionierung direkt fĂŒr Druckbetrieb mitgeplant? -
[x] belegtâ Nachweispflicht fĂŒr 3-Faktor-Auth. Siehe Frage 2 â der 3-Faktor-Mechanismus (VPN + Passkarte + weiterer Faktor) ist nicht im App-Auth-Pfad erzwungen und aktuell auch nicht organisatorisch nachgebildet (In-App-Auth = reines Session-Cookie + bcrypt-Login). Das ist kein gebrochenes Versprechen, sondern der erwartete Ist-Zustand vor dem geplanten Ausbau â bestĂ€tigt per Git-Historie (unverĂ€ndert seit Initial Commit) und real: es gibt noch keine Kinder im System (Frage 3), also auch keinen Fall, an dem die LĂŒcke bisher etwas gekostet hĂ€tte. Als CKL-Hard-Gate fĂŒr Phase D zu fĂŒhren: Auth muss vor dem ersten echten Kind-Account stehen, nicht danach.
6. Arbeitsregel
Wir analysieren zuerst. Wir verÀndern noch keine Produktionspfade.
Jede Erkenntnis bekommt:
Quelle / Pfad / Commit / Laufzeitstand / CKL-Relevanz
Jede neue Version muss rĂŒckwĂ€rts erklĂ€rbar bleiben:
Was war vorher?
Was wurde geÀndert?
Warum war es sicherer oder verstÀndlicher?
Wie kann die Crew zurĂŒckrollen?
Bugsy-Regel: Ein gefundener Fehler ist kein Makel, sondern eine neue Schutzschicht â sofern wir ihn dokumentieren, testen und nicht wieder in eine andere Repo-/Pfad-IdentitĂ€t hineinvermischen.
7. NĂ€chster konkreter Schritt
Als nĂ€chstes wird eine kleine, belegbare Datenflusskarte fĂŒr den nativen Einstieg erstellt:
native_crumbcore_v1
â crumbforest.service
â app/main.py
â Chat/RAG/Diary-Routen
â MariaDB + Qdrant
â Provider/Embedding
â Logs/Audit/Löschung
Dabei werden keine neuen Features gebaut. Ziel ist ausschlieĂlich, die CKL-relevanten Grenzen des bestehenden Systems sichtbar und testbar zu machen.
Statusfelder fĂŒr Crew-BeitrĂ€ge:
[ ] offen
[~] in Analyse
[x] belegt/erledigt
[!] CKL-Risiko
[?] Crew-Entscheidung erforderlich