Datenmodell
Wie Sonaloop alles als JSON in einem Graphen speichert.
Sonaloop speichert alles als JSON in einem Graphen. Drei Schichten erklären das Format — und jedes Konzept zeigt sein konkretes Schema, wenn du es öffnest.
Drei Schichten
Jedes Stück Inhalt in jedem Artefakt ist eines von fünf: Statement · Finding · Prompt · Ref · Stance. Ein Renderer pro Primitive — darum sieht „dasselbe Ding“ überall gleich aus.
Jedes Artefakt (Persona, Council, Report, Prototyp, Notiz, Section) ist ein Node mit {id, kind, title, project_id, created_at}. Typisierte Edges verbinden sie (based_on, feeds_into, refines, answers).
Persona-Erinnerung lebt in eigenen, datierten Records (Erlebnisse, Tages-Summaries, Pain-Points), sodass Recall und Zeitreise funktionieren.
Die fünf Primitive
Statement{ "persona_id": "persona_…",
"text": "…markdown, in the persona's voice…",
"stance": { "value": 1, "label": "conditional" }, // optional
"about": { "kind": "prompt", "id": "q0" }, // what it responds to
"refs": [ { "kind": "memory", "text": "missed a deadline in March" } ] }Finding{ "text": "…markdown…",
"kind": "summary|key_problem|recommendation|open_question|risk|cluster|segment",
"score": { "effort": 2, "value": 5 }, // optional
"refs": [ { "kind": "council", "id": "council_…" } ] }Prompt{ "text": "…markdown…", "kind": "question|proposal|goal|focus|hypothesis", "id": "q0" }Ref{ "kind": "memory|council|synthesis|prototype_state|persona|external",
"id": "council_…", // when it points at a stored record
"text": "…", // when it is a free observed-state string
"quote": "…" } // optional supporting quoteStance{ "value": -2, "label": "oppose" }
// −2 oppose · −1 skeptical · 0 neutral · +1 conditional · +2 supportDetails & Migrationspfad: spec/unified-artifact-schema.md.