MindMap-trait for samlingsnoder (oppgave 27.3)

Gjør mindmap til et offisielt trait som kan velges ved opprettelse
av samlingsnoder. Frontend-komponenten (27.1) og BlockShell-panelet
(27.2) var allerede på plass — dette kobler traiten inn i backend-
validering og pakke-definisjoner.

Endringer:
- Lagt til "mindmap" i VALID_TRAITS (intentions.rs)
- Validering av konfig: default_depth 1-3, layout radial/tree
- Inkludert mindmap i Podcaststudio- og Wiki-pakker (traits.ts)
- Oppdatert trait-katalog i docs/primitiver/traits.md
This commit is contained in:
vegard 2026-03-18 19:44:30 +00:00
parent 49d8599056
commit 8f7d2d7fe8
4 changed files with 26 additions and 5 deletions

View file

@ -136,6 +136,7 @@ Fravær av en trait betyr at funksjonaliteten er deaktivert. Ingen boolean
| Trait | Frontend | Backend |
|---|---|---|
| `knowledge_graph` | Visuell graf, auto-tagging | NER, embedding-generering |
| `mindmap` | Radial/tree-layout av noder rundt rot, pan/zoom, dybde 1-3 hopp | Validering av konfig (dybde, layout) |
| `wiki` | Slug-baserte sider, kryssreferanser, "finnes ikke ennå"-lenker | Slug-unikhet, backlink-indeks |
| `glossary` | Begrepsliste, hover-definisjoner i annet innhold | Begrep-matching i tekst |
| `faq` | Spørsmål/svar-par med søk | Søkeindeksering |
@ -180,9 +181,9 @@ Brukeren kan legge til eller fjerne traits etterpå.
| Pakke | Traits |
|---|---|
| **Nettmagasin** | editor(longform), publishing, rss, comments, analytics, custom_domain, newsletter |
| **Podcaststudio** | podcast, recording, transcription, mixer, editor(shownotes), rss, analytics, clips, knowledge_graph |
| **Podcaststudio** | podcast, recording, transcription, mixer, editor(shownotes), rss, analytics, clips, knowledge_graph, mindmap |
| **Nyhetsbrev** | editor(longform), newsletter, analytics, versioning |
| **Wiki** | wiki, editor(longform), collaboration, versioning, knowledge_graph, glossary |
| **Wiki** | wiki, editor(longform), collaboration, versioning, knowledge_graph, mindmap, glossary |
| **Diskusjonsklubb** | forum, chat, polls, membership, roles, directory |
| **Kursplattform** | editor(longform), playlist, qa, membership, paywall, templates |
| **Møteplass** | recording, mixer, chat, kanban, calendar, auto_summarize, guest_input |

View file

@ -58,6 +58,7 @@ export const packages: Package[] = [
analytics: {},
clips: {},
knowledge_graph: {},
mindmap: { default_depth: 2, layout: 'radial' },
},
},
{
@ -83,6 +84,7 @@ export const packages: Package[] = [
collaboration: {},
versioning: {},
knowledge_graph: {},
mindmap: { default_depth: 2, layout: 'tree' },
glossary: {},
},
},

View file

@ -42,7 +42,7 @@ const VALID_TRAITS: &[&str] = &[
// Organisering
"kanban", "calendar", "timeline", "table", "gallery", "bookmarks", "tags",
// Kunnskap
"knowledge_graph", "wiki", "glossary", "faq", "bibliography",
"knowledge_graph", "mindmap", "wiki", "glossary", "faq", "bibliography",
// Automatisering & AI
"auto_tag", "auto_summarize", "digest", "bridge", "moderation", "ai_tool", "orchestration",
// Tilgang & fellesskap
@ -90,6 +90,25 @@ fn validate_collection_traits(
));
}
// Valider mindmap-konfigurasjon: dybde 1-3, layout radial/tree
if let Some(mindmap) = traits_obj.get("mindmap") {
if let Some(depth) = mindmap.get("default_depth") {
if let Some(d) = depth.as_i64() {
if !(1..=3).contains(&d) {
return Err("mindmap.default_depth må være 1, 2 eller 3".to_string());
}
}
}
if let Some(layout) = mindmap.get("layout").and_then(|v| v.as_str()) {
if layout != "radial" && layout != "tree" {
return Err(format!(
"mindmap.layout må være \"radial\" eller \"tree\", fikk \"{}\"",
layout
));
}
}
}
// Valider custom_domain DNS hvis satt i publishing-trait
if let Some(publishing) = traits_obj.get("publishing") {
if let Some(domain) = publishing.get("custom_domain").and_then(|v| v.as_str()) {

View file

@ -363,8 +363,7 @@ visning av eksisterende grafdata.
- [x] 27.1 MindMap Svelte-komponent: radial/tree-layout av noder rundt en rotnode. Hent relaterte noder (1-2 hopp) via WebSocket. d3-hierarchy eller trigonometri for layout. Pan/zoom via canvas-primitiv. Klikk node = ny rot, dobbeltklikk = åpne i editor.
- [x] 27.2 BlockShell-panel: MindMap som BlockShell-panel i arbeidsflaten med fullskjerm, resize, drag-handle. Rotnode fra kontekst-header. Responsivt.
- [~] 27.3 MindMap-trait: `mindmap`-trait for samlingsnoder. Vises i trait-velger ved opprettelse. Konfigurasjon: default dybde (1-3 hopp), layout-stil (radial/tree).
> Påbegynt: 2026-03-18T19:40
- [x] 27.3 MindMap-trait: `mindmap`-trait for samlingsnoder. Vises i trait-velger ved opprettelse. Konfigurasjon: default dybde (1-3 hopp), layout-stil (radial/tree).
## Fase 28: Manglende CLI-verktøy + AI-rutingskontroll