From 4d3552006fc6d8cf7a3fcd33592415d9362359e3 Mon Sep 17 00:00:00 2001 From: csiefen Date: Wed, 17 Jun 2026 23:50:53 -0400 Subject: [PATCH 01/11] Clean up Hugo theme presentation and settings --- assets/css/style.css | 307 +++++++++++++++++++++++++++++++++++++ exampleSite/hugo.yaml | 12 ++ hugo.yaml | 23 ++- layouts/partials/head.html | 52 ++++++- static/js/xananode.js | 260 +++++++++++++++++++++++++++++-- static/site.webmanifest | 2 +- theme.toml | 6 +- 7 files changed, 640 insertions(+), 22 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index aca00be4..95783589 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -56,6 +56,40 @@ --xana-section-trails-border: rgba(251, 133, 0, 0.3); } +html[data-xana-theme="light"] { + color-scheme: light; + --xana-bg: #f6f8fb; + --xana-surface: #ffffff; + --xana-surface-elevated: #eef3f7; + --xana-panel-bg: rgba(255, 255, 255, 0.97); + --xana-panel-border: rgba(15, 23, 42, 0.12); + --xana-text: #111827; + --xana-text-muted: #526173; + --xana-accent: #0f766e; + --xana-accent-soft: rgba(15, 118, 110, 0.12); + --xana-accent-border: rgba(15, 118, 110, 0.28); + --xana-scrollbar-track: rgba(226, 232, 240, 0.95); + --xana-scrollbar-thumb: #64748b; + --xana-scrollbar-thumb-hover: #0f766e; +} + +html[data-xana-theme="classic"] { + color-scheme: light; + --xana-bg: #f8f9fa; + --xana-surface: #ffffff; + --xana-surface-elevated: #eaecf0; + --xana-panel-bg: #ffffff; + --xana-panel-border: #a2a9b1; + --xana-text: #202122; + --xana-text-muted: #54595d; + --xana-accent: #3366cc; + --xana-accent-soft: rgba(51, 102, 204, 0.1); + --xana-accent-border: rgba(51, 102, 204, 0.35); + --xana-scrollbar-track: #eaecf0; + --xana-scrollbar-thumb: #a2a9b1; + --xana-scrollbar-thumb-hover: #3366cc; +} + *, *::before, *::after { @@ -75,6 +109,20 @@ body { -moz-osx-font-smoothing: grayscale; } +html[data-xana-theme="classic"] body { + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +html[data-xana-theme="classic"] h1, +html[data-xana-theme="classic"] h2, +html[data-xana-theme="classic"] h3, +html[data-xana-theme="classic"] h4, +html[data-xana-theme="classic"] h5, +html[data-xana-theme="classic"] h6 { + font-family: Georgia, "Times New Roman", serif; + letter-spacing: 0; +} + h1, h2, h3, @@ -153,6 +201,61 @@ body.is-resizing { #xana-stage { height: 100%; width: 100%; + position: relative; + z-index: 1; +} + +.xana-graph-atmosphere { + position: absolute; + inset: 0; + z-index: 0; + pointer-events: none; + overflow: hidden; + background: + radial-gradient(circle at 18% 22%, rgba(85, 214, 190, 0.16), transparent 26%), + radial-gradient(circle at 78% 68%, rgba(255, 209, 102, 0.12), transparent 22%), + linear-gradient(135deg, rgba(85, 214, 190, 0.05), transparent 45%); +} + +.xana-graph-atmosphere::before, +.xana-graph-atmosphere::after { + content: ""; + position: absolute; + inset: -20%; + opacity: 0.55; + background-image: + radial-gradient(circle, rgba(255, 255, 255, 0.18) 0 1px, transparent 1px), + radial-gradient(circle, rgba(85, 214, 190, 0.18) 0 1px, transparent 1px); + background-size: 58px 58px, 92px 92px; + animation: xana-info-current 38s linear infinite; +} + +.xana-graph-atmosphere::after { + opacity: 0.28; + filter: blur(1px); + animation-duration: 64s; + animation-direction: reverse; +} + +@keyframes xana-info-current { + from { transform: translate3d(0, 0, 0) rotate(0deg); } + to { transform: translate3d(-58px, -34px, 0) rotate(1deg); } +} + +html[data-xana-atmosphere="still"] .xana-graph-atmosphere::before, +html[data-xana-atmosphere="still"] .xana-graph-atmosphere::after { + animation: none; +} + +html[data-xana-atmosphere="plain"] .xana-graph-atmosphere { + display: none; +} + +@media (prefers-reduced-motion: reduce) { + .xana-graph-atmosphere::before, + .xana-graph-atmosphere::after { + animation: none; + } } html, @@ -628,6 +731,143 @@ body, display: none; } +.xana-settings { + position: absolute; + right: 1.25rem; + bottom: 1.25rem; + z-index: 45; + pointer-events: auto; +} + +.xana-settings-fab { + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + border: 1px solid var(--xana-accent-border); + background: color-mix(in srgb, var(--xana-surface) 88%, transparent); + color: var(--xana-accent); + font-size: 1.15rem; + cursor: pointer; + box-shadow: 0 14px 38px rgba(0, 0, 0, 0.28); +} + +.xana-settings-fab:hover, +.xana-settings-fab.active { + background: var(--xana-accent-soft); + border-color: var(--xana-accent); +} + +.xana-settings-panel { + position: absolute; + right: 0; + bottom: 3.35rem; + width: min(320px, calc(100vw - 2rem)); + padding: 0.8rem; + border: 1px solid var(--xana-panel-border); + border-radius: 0.9rem; + background: var(--xana-panel-bg); + color: var(--xana-text); + box-shadow: 0 24px 70px rgba(0, 0, 0, 0.36); +} + +.xana-settings-panel[hidden] { + display: none; +} + +.xana-settings-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.75rem; + color: var(--xana-text-muted); + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.08em; + font-size: 0.72rem; +} + +.xana-settings-header button { + border: 1px solid var(--xana-panel-border); + border-radius: 50%; + background: transparent; + color: var(--xana-text-muted); + cursor: pointer; + width: 24px; + height: 24px; +} + +.xana-settings-group { + display: grid; + grid-template-columns: 68px repeat(3, minmax(0, 1fr)); + gap: 0.35rem; + align-items: center; + margin: 0.45rem 0; +} + +.xana-settings-label { + color: var(--xana-text-muted); + font-size: 0.72rem; + font-weight: 850; +} + +.xana-settings-group button { + min-height: 32px; + border: 1px solid var(--xana-panel-border); + border-radius: 0.55rem; + background: var(--xana-surface-elevated); + color: var(--xana-text); + cursor: pointer; + font-weight: 750; +} + +.xana-settings-group button.active { + background: var(--xana-accent-soft); + border-color: var(--xana-accent); + color: var(--xana-accent); +} + +.xana-settings-toggle { + display: flex; + align-items: center; + gap: 0.55rem; + margin-top: 0.75rem; + padding-top: 0.7rem; + border-top: 1px solid var(--xana-panel-border); + color: var(--xana-text); + font-size: 0.86rem; + cursor: pointer; +} + +.xana-settings-toggle input { + accent-color: var(--xana-accent); +} + +html[data-xana-density="compact"] .xana-panel { + padding: 18px; +} + +html[data-xana-density="compact"] .xana-panel h1 { + font-size: clamp(1.45rem, 2.4vw, 2.05rem); +} + +html[data-xana-density="compact"] .xana-node-body, +html[data-xana-density="compact"] .xana-summary, +html[data-xana-density="compact"] .xana-connections { + font-size: 0.94rem; + line-height: 1.5; +} + +html[data-xana-density="compact"] .xana-searcher { + width: clamp(260px, 48%, 460px); +} + +html[data-xana-density="compact"] .xana-search-wrap { + padding: 0.42rem 0.5rem 0.42rem 0.85rem; +} + @keyframes tour-pulse { 0%, 100% { box-shadow: 0 0 6px rgba(85, 214, 190, 0.25); } 50% { box-shadow: 0 0 16px rgba(85, 214, 190, 0.55); } @@ -729,6 +969,73 @@ body, flex-shrink: 0; } +html[data-xana-theme="light"] .xana-navbar, +html[data-xana-theme="classic"] .xana-navbar { + background: color-mix(in srgb, var(--xana-surface) 94%, transparent); + border-bottom-color: var(--xana-panel-border); +} + +html[data-xana-theme="light"] .xana-brand-name, +html[data-xana-theme="classic"] .xana-brand-name, +html[data-xana-theme="light"] .xana-search-form input, +html[data-xana-theme="classic"] .xana-search-form input, +html[data-xana-theme="light"] .xana-search-results button, +html[data-xana-theme="classic"] .xana-search-results button { + color: var(--xana-text); +} + +html[data-xana-theme="light"] .xana-search-wrap, +html[data-xana-theme="classic"] .xana-search-wrap, +html[data-xana-theme="light"] .xana-ctrl-btn, +html[data-xana-theme="classic"] .xana-ctrl-btn, +html[data-xana-theme="light"] .xana-ctrl-speed, +html[data-xana-theme="classic"] .xana-ctrl-speed, +html[data-xana-theme="light"] .xana-filter-popover, +html[data-xana-theme="classic"] .xana-filter-popover { + background: var(--xana-panel-bg); + border-color: var(--xana-panel-border); + color: var(--xana-text); + box-shadow: 0 12px 30px rgba(15, 23, 42, 0.14); +} + +html[data-xana-theme="light"] .xana-search-results button, +html[data-xana-theme="classic"] .xana-search-results button { + background: var(--xana-surface); + border-color: var(--xana-panel-border); +} + +html[data-xana-theme="light"] .xana-search-result-snippet, +html[data-xana-theme="classic"] .xana-search-result-snippet, +html[data-xana-theme="light"] .xana-summary, +html[data-xana-theme="classic"] .xana-summary { + color: var(--xana-text-muted); +} + +html[data-xana-theme="classic"] .xana-navbar, +html[data-xana-theme="classic"] .xana-search-wrap, +html[data-xana-theme="classic"] .xana-filter-popover, +html[data-xana-theme="classic"] .xana-settings-panel, +html[data-xana-theme="classic"] .xana-list-hero, +html[data-xana-theme="classic"] .xana-list-card, +html[data-xana-theme="classic"] .xana-ctrl-btn, +html[data-xana-theme="classic"] .xana-ctrl-speed { + border-radius: 2px; + backdrop-filter: none; + -webkit-backdrop-filter: none; +} + +html[data-xana-theme="classic"] .xana-panel { + border-left: 1px solid var(--xana-panel-border); +} + +html[data-xana-theme="classic"] a { + color: #3366cc; +} + +html[data-xana-theme="classic"] a:visited { + color: #6b4ba1; +} + /* Audit meta badge — floats near controls strip when audit is active */ .xana-audit-meta { diff --git a/exampleSite/hugo.yaml b/exampleSite/hugo.yaml index 35a5ffa8..90bde507 100644 --- a/exampleSite/hugo.yaml +++ b/exampleSite/hugo.yaml @@ -7,6 +7,18 @@ params: description: "A self-hosting example knowledge substrate that explains XanaNode using XanaNode." author: "XanaNode Contributors" tagline: "A relationship-first static knowledge substrate." + keywords: + - XanaNode + - knowledge graph + - provenance + - static publishing + - semantic web + themeColor: "#55d6be" + image: "xananode-icon.svg" + analytics: + gtag: "" + plausibleDomain: "" + plausibleSrc: "https://plausible.io/js/script.js" markup: goldmark: diff --git a/hugo.yaml b/hugo.yaml index 36d3dd07..a0340208 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -1,13 +1,26 @@ -baseURL: "https://builtbybots.com/" +baseURL: "https://xananode.com/" languageCode: "en-us" -title: "Built By Bots" +title: "XanaNode" contentDir: "exampleSite/content" dataDir: "exampleSite/data" params: - description: "A living investigation into intelligence, memory, provenance, and the systems we build to remember things." - author: "Christian Siefen" - tagline: "Investigating how humans, machines, and civilizations remember things." + description: "A relationship-first knowledge substrate for publishing connected nodes, sources, claims, trails, and protocol artifacts." + author: "XanaNode Contributors" + tagline: "Relationships preserve knowledge." + keywords: + - knowledge graph + - digital garden + - provenance + - hypertext + - semantic publishing + - XanaNode + themeColor: "#55d6be" + image: "xananode-icon.svg" + analytics: + gtag: "" + plausibleDomain: "" + plausibleSrc: "https://plausible.io/js/script.js" markup: goldmark: diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 5207de7d..378b2629 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -1,7 +1,39 @@ -{{ if .Title }}{{ .Title }} | {{ end }}{{ site.Title }} - +{{ $description := .Description | default .Params.summary | default site.Params.description | default site.Title }} +{{ $title := cond .IsHome site.Title (printf "%s | %s" .Title site.Title) }} +{{ $canonical := .Permalink }} +{{ $image := site.Params.image | default "xananode-icon.svg" | absURL }} +{{ $title }} + + + + + + + + + + + + + + +{{ with site.Params.keywords }} + +{{ end }} + @@ -9,4 +41,18 @@ - +{{ with site.Params.analytics.gtag }} + + +{{ end }} +{{ with site.Params.analytics.plausibleDomain }} + +{{ end }} +{{ with site.Params.headExtra }} +{{ . | safeHTML }} +{{ end }} diff --git a/static/js/xananode.js b/static/js/xananode.js index 8546c059..0fb6735e 100644 --- a/static/js/xananode.js +++ b/static/js/xananode.js @@ -27,9 +27,22 @@ enabledMediaTypes: "xananode.enabledMediaTypes", depth: "xananode.depth", connectionsOpen: "xananode.connectionsOpen", - tourSpeed: "xananode.tourSpeed" + tourSpeed: "xananode.tourSpeed", + colorTheme: "xananode.colorTheme", + uiDensity: "xananode.uiDensity", + graphAtmosphere: "xananode.graphAtmosphere", + ttsNarrator: "xananode.ttsNarrator" }; + const DISPLAY_DEFAULTS = Object.freeze({ + colorTheme: "dark", + uiDensity: "comfortable", + graphAtmosphere: "alive", + ttsNarrator: false + }); + + const SEARCH_VERBS = ["Explore", "Map", "Trace", "Search", "Navigate", "Follow", "Question", "Compare"]; + const DEFAULT_TYPES = [ "essay", "concept", @@ -310,6 +323,8 @@ const savedTypes = loadSetting(STORAGE_KEYS.enabledTypes, null); const savedMediaTypes = loadSetting(STORAGE_KEYS.enabledMediaTypes, null); const savedDepth = loadSetting(STORAGE_KEYS.depth, 2); + const displaySettings = loadDisplaySettings(); + applyDisplaySettings(displaySettings); const state = { focusId, @@ -334,11 +349,14 @@ }, tourActive: false, tourIndex: 0, + tourVisited: new Set(), + tourRecent: [], cy: null, allNodes, nodeIds, allEdges, - allEdgesRaw + allEdgesRaw, + displaySettings }; if (state.focusId) { @@ -377,6 +395,7 @@ }, 250)); bindControls(state); + startSearchVerbRotation(); makeResizable(state); restorePanelWidth(state); @@ -442,7 +461,7 @@
- · powered by BuiltByBots.com + · xananode.com
@@ -454,7 +473,7 @@ type="search" autocomplete="off" spellcheck="false" - placeholder="Explore the knowledge substrate\u2026" + placeholder="${escapeHtml(SEARCH_VERBS[0])} the knowledge substrate..." value="${escapeHtml(state.searchQuery)}" > + + + +{{- else if $nodeRouteMatch -}} + {{- $nodeID := replaceRE `^/?(?:node|claim|concept|essay|media|observation|person|project|schema|source|technology|trail)/([^/?#]+)/?$` "$1" $dest | urlquery -}} + {{- $target := partial "find-page-by-id.html" (dict "id" $nodeID) -}} + {{- if $target -}} + {{ .Text | safeHTML }} + {{- else -}} + {{ .Text | safeHTML }} + {{- end -}} {{- else -}} {{ .Text | safeHTML }} -{{- end -}} \ No newline at end of file +{{- end -}} diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 8c3091eb..4fe98675 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -27,8 +27,6 @@

{{ .Title }}

{{ range .RegularPages.ByTitle }} - {{ $nodeID := .Params.node_id | default .File.ContentBaseName }} - {{ $viewerURL := printf "/node/%s" ($nodeID | urlquery) }} {{ end }}
-{{ end }} \ No newline at end of file +{{ end }} diff --git a/layouts/index.json b/layouts/index.json index 61b94f9c..37cecaa3 100644 --- a/layouts/index.json +++ b/layouts/index.json @@ -1,12 +1,17 @@ {{- $pages := where site.RegularPages "Params.type" "!=" nil -}} +{{- $namespace := site.Params.xananode.namespace | default "xananode.example" -}} { + "namespace": {{ $namespace | jsonify }}, "nodes": [ {{- range $i, $p := $pages -}} + {{- $nodeID := $p.Params.node_id | default $p.File.ContentBaseName -}} + {{- $nodeType := $p.Params.node_type | default $p.Params.type | default $p.Section -}} {{- if $i }},{{ end }} { - "id": {{ ($p.Params.node_id | default $p.File.ContentBaseName) | jsonify }}, + "id": {{ $nodeID | jsonify }}, + "protocol_id": {{ ($p.Params.protocol_id | default (printf "%s:%s/%s" $namespace ($nodeType | urlize) ($nodeID | urlize))) | jsonify }}, "title": {{ $p.Title | jsonify }}, - "type": {{ ($p.Params.node_type | default $p.Params.type | default $p.Section) | jsonify }}, + "type": {{ $nodeType | jsonify }}, "section": {{ $p.Section | jsonify }}, "importance": {{ ($p.Params.importance | default 3) | jsonify }}, @@ -31,6 +36,7 @@ "license": {{ ($p.Params.license | default "") | jsonify }}, "license_url": {{ ($p.Params.license_url | default "") | jsonify }}, "rights_status": {{ ($p.Params.rights_status | default "") | jsonify }}, + "tumbler": {{ ($p.Params.tumbler | default "") | jsonify }}, "author": {{ ($p.Params.author | default "") | jsonify }}, "year": {{ ($p.Params.year | default "") | jsonify }} } @@ -162,4 +168,4 @@ {{- end -}} {{- end }} ] -} \ No newline at end of file +} diff --git a/layouts/shortcodes/xana.html b/layouts/shortcodes/xana.html index 0d4c25db..2167a706 100644 --- a/layouts/shortcodes/xana.html +++ b/layouts/shortcodes/xana.html @@ -22,10 +22,10 @@

Source node

-

{{ if $page }}{{ $page.Title }}{{ else }}{{ $nodeData.title }}{{ end }}

+

{{ if $page }}{{ $page.Title }}{{ else }}{{ $nodeData.title }}{{ end }}

{{- if $page -}} - Open source + Open source {{- end -}}
@@ -53,7 +53,7 @@

{{ if $page }} Transcluded from {{ if $page -}} - {{ $page.Title }} + {{ $page.Title }} {{ else -}} {{ $nodeData.title }} {{ end -}} diff --git a/static/js/xananode.js b/static/js/xananode.js index 0fb6735e..afd83701 100644 --- a/static/js/xananode.js +++ b/static/js/xananode.js @@ -31,14 +31,22 @@ colorTheme: "xananode.colorTheme", uiDensity: "xananode.uiDensity", graphAtmosphere: "xananode.graphAtmosphere", - ttsNarrator: "xananode.ttsNarrator" + ttsNarrator: "xananode.ttsNarrator", + ttsVoice: "xananode.ttsVoice", + ttsRate: "xananode.ttsRate", + ttsPitch: "xananode.ttsPitch", + ttsDetail: "xananode.ttsDetail" }; const DISPLAY_DEFAULTS = Object.freeze({ colorTheme: "dark", uiDensity: "comfortable", graphAtmosphere: "alive", - ttsNarrator: false + ttsNarrator: false, + ttsVoice: "", + ttsRate: 0.95, + ttsPitch: 1, + ttsDetail: "full" }); const SEARCH_VERBS = ["Explore", "Map", "Trace", "Search", "Navigate", "Follow", "Question", "Compare"]; @@ -295,10 +303,13 @@ hydrateMedia(allNodes); + window.__xanaAllNodes = allNodes; window.__xanaAllEdges = allEdges; - // Resolve the requested node from the URL, handling doubled /node/node/ prefixes. - const rawRequested = nodeIdFromUrl(); + // Resolve the requested node from the URL. The current public route is + // type-aware (for example /concept/knowledge-substrate/), with support + // for old /node/ links as a compatibility alias. + const rawRequested = nodeIdFromUrl(allNodes); // Try the raw ID, then strip a leading "node/" segment in case of a doubled prefix. const requestedNode = rawRequested && ( nodeIds.has(rawRequested) @@ -373,8 +384,7 @@ minZoom: 0.15, maxZoom: 3, style: getCyStyle(nodeTypeColors), - layout: { name: "preset" }, - wheelSensitivity: 0.16 + layout: { name: "preset" } }); state.cy = cy; @@ -407,7 +417,7 @@ }, 180)); window.addEventListener("popstate", () => { - const nodeFromUrl = nodeIdFromUrl(); + const nodeFromUrl = nodeIdFromUrl(allNodes); if (nodeFromUrl && allNodes.some((node) => node.id === nodeFromUrl)) { state.previousFocusId = state.focusId; @@ -506,6 +516,7 @@ +
- @@ -738,8 +767,16 @@ const settingsToggle = graphEl.querySelector("[data-settings-toggle]"); const settingsPanel = graphEl.querySelector(".xana-settings-panel"); const settingsClose = graphEl.querySelector("[data-settings-close]"); + const voiceSelect = graphEl.querySelector("[data-tts-voice]"); + const detailSelect = graphEl.querySelector("[data-tts-detail]"); + const rateInput = graphEl.querySelector("[data-tts-rate]"); + const pitchInput = graphEl.querySelector("[data-tts-pitch]"); updateDisplaySettingButtons(state); + populateVoiceOptions(state); + if ("speechSynthesis" in window) { + window.speechSynthesis.onvoiceschanged = () => populateVoiceOptions(state); + } settingsToggle?.addEventListener("click", (event) => { event.stopPropagation(); @@ -784,6 +821,32 @@ }); }); + voiceSelect?.addEventListener("change", () => { + state.displaySettings.ttsVoice = voiceSelect.value; + saveSetting(STORAGE_KEYS.ttsVoice, state.displaySettings.ttsVoice); + if (state.tourActive && state.displaySettings.ttsNarrator) { + narrateNode(state.allNodes.find((node) => node.id === state.focusId), state); + } + }); + + detailSelect?.addEventListener("change", () => { + state.displaySettings.ttsDetail = detailSelect.value; + saveSetting(STORAGE_KEYS.ttsDetail, state.displaySettings.ttsDetail); + if (state.tourActive && state.displaySettings.ttsNarrator) { + narrateNode(state.allNodes.find((node) => node.id === state.focusId), state); + } + }); + + rateInput?.addEventListener("input", () => { + state.displaySettings.ttsRate = Number(rateInput.value) || DISPLAY_DEFAULTS.ttsRate; + saveSetting(STORAGE_KEYS.ttsRate, state.displaySettings.ttsRate); + }); + + pitchInput?.addEventListener("input", () => { + state.displaySettings.ttsPitch = Number(pitchInput.value) || DISPLAY_DEFAULTS.ttsPitch; + saveSetting(STORAGE_KEYS.ttsPitch, state.displaySettings.ttsPitch); + }); + filterToggleBtn?.addEventListener("click", (event) => { event.stopPropagation(); @@ -1624,9 +1687,9 @@ updateTourButton(); panelEl.scrollTop = 0; startTourPanelScroll(); - narrateNode(state.allNodes.find((node) => node.id === state.focusId), state); + const narrated = narrateNode(state.allNodes.find((node) => node.id === state.focusId), state); restartTourRing(); - scheduleTourAdvance(state); + if (!narrated) scheduleTourAdvance(state); } function stopTour(state) { @@ -1711,8 +1774,9 @@ } } - function scheduleTourAdvance(state) { + function scheduleTourAdvance(state, forceTimer = false) { if (_tourTimer) window.clearTimeout(_tourTimer); + if (!forceTimer && state.displaySettings?.ttsNarrator && canNarrate()) return; _tourTimer = window.setTimeout(() => { if (!state.tourActive) return; @@ -1832,7 +1896,7 @@ panelEl.innerHTML = `
- ${renderPanelImage(node)} + ${renderPanelImage(node, state)}
${renderTypeBadge(node.type)}

${escapeHtml(node.title || node.id)}

@@ -1882,28 +1946,51 @@ if (state.tourActive) { panelEl.scrollTop = 0; startTourPanelScroll(); - narrateNode(node, state); + const narrated = narrateNode(node, state); restartTourRing(); + if (!narrated) scheduleTourAdvance(state); } } function narrateNode(node, state) { - if (!node || !state?.displaySettings?.ttsNarrator) return; - if (!("speechSynthesis" in window) || !window.SpeechSynthesisUtterance) return; + if (!node || !state?.displaySettings?.ttsNarrator) return false; + if (!canNarrate()) return false; const title = node.title || node.id || "Untitled node"; - const summary = stripHtml(node.summary || node.content || "").replace(/\s+/g, " ").trim(); - const shortSummary = summary.length > 220 ? `${summary.slice(0, 220)}...` : summary; - const text = [title, shortSummary].filter(Boolean).join(". "); - - if (!text) return; + const summary = stripHtml(node.summary || "").replace(/\s+/g, " ").trim(); + const content = stripHtml(node.content || node.html || "").replace(/\s+/g, " ").trim(); + const wantsFull = state.displaySettings.ttsDetail !== "summary"; + const readableContent = wantsFull && content && content !== summary + ? content + : ""; + const text = [title, summary, readableContent].filter(Boolean).join(". "); + + if (!text) return false; stopNarration(); const utterance = new SpeechSynthesisUtterance(text); - utterance.rate = 0.95; - utterance.pitch = 1; + const voices = getAvailableVoices(); + const selectedVoice = voices.find((voice) => voice.voiceURI === state.displaySettings.ttsVoice) + || voices.find((voice) => voice.default) + || voices[0]; + + if (selectedVoice) utterance.voice = selectedVoice; + utterance.rate = clampNumber(state.displaySettings.ttsRate, 0.65, 1.35, DISPLAY_DEFAULTS.ttsRate); + utterance.pitch = clampNumber(state.displaySettings.ttsPitch, 0.75, 1.35, DISPLAY_DEFAULTS.ttsPitch); utterance.volume = 0.88; + utterance.onend = () => { + if (!state.tourActive) return; + window.setTimeout(() => { + if (!state.tourActive) return; + const nextId = pickNextTourNode(state); + if (nextId) travelToNode(nextId, state, false); + }, 450); + }; + utterance.onerror = () => { + if (state.tourActive) scheduleTourAdvance(state, true); + }; window.speechSynthesis.speak(utterance); + return true; } function stopNarration() { @@ -1912,7 +1999,34 @@ } } - function renderPanelImage(node) { + function canNarrate() { + return "speechSynthesis" in window && Boolean(window.SpeechSynthesisUtterance); + } + + function getAvailableVoices() { + return canNarrate() ? window.speechSynthesis.getVoices() : []; + } + + function populateVoiceOptions(state) { + const select = graphEl.querySelector("[data-tts-voice]"); + if (!select) return; + + const voices = getAvailableVoices(); + const current = state.displaySettings.ttsVoice || ""; + select.innerHTML = [ + ``, + ...voices.map((voice) => { + const label = `${voice.name}${voice.lang ? ` (${voice.lang})` : ""}${voice.localService ? "" : " - network"}`; + return ``; + }) + ].join(""); + + if (current && !voices.some((voice) => voice.voiceURI === current)) { + select.value = ""; + } + } + + function renderPanelImage(node, state) { if (!node.image) return ""; const mediaType = node.primary_media_node?.media_type || ""; @@ -1953,7 +2067,7 @@ return ` ${escapeHtml(media.title || "Media node")} @@ -2050,7 +2164,7 @@ return `
  • - + ${escapeHtml(other.title || other.id)} ${renderTypeBadge(other.type, "xana-type-badge--sm")} @@ -2719,16 +2833,17 @@ return normalizePath(node.url) === normalizePath(href); }); - // Fallback: treat the href as a "node/" pattern (written in markdown - // as relative links like `node/provenance` or `/node/provenance`). - // Strip any leading slash, strip the "node/" prefix, and look up by id. + // Fallback: treat type-aware routes and old "node/" routes as + // local node links. if (!matchingNode) { - const stripped = href.replace(/^\//, "").replace(/^node\//, "").replace(/\/$/, ""); - matchingNode = nodeById.get(stripped); + const stripped = href.replace(/^\//, "").replace(/\/$/, ""); + const routeParts = stripped.split("/"); + const candidateId = routeParts.length >= 2 ? routeParts.at(-1) : stripped; + matchingNode = nodeById.get(candidateId); } if (matchingNode) { - link.setAttribute("href", `/node/${encodeURIComponent(matchingNode.id)}`); + link.setAttribute("href", nodeHref(matchingNode, state)); link.addEventListener("click", (event) => { event.preventDefault(); @@ -2913,8 +3028,9 @@ function updateUrl(nodeId, replace) { if (!nodeId) return; + const node = window.__xanaAllNodes?.find((candidate) => candidate.id === nodeId); const url = new URL(window.location.href); - url.pathname = `/node/${encodeURIComponent(nodeId)}`; + url.pathname = nodeHref(node || { id: nodeId, type: "node" }, { allNodes: window.__xanaAllNodes || [] }); url.search = ""; if (replace) { @@ -2933,15 +3049,29 @@ source: "xananode-preview", type: "node-selected", nodeId, - path: `/node/${encodeURIComponent(nodeId)}`, + path: nodeHref(window.__xanaAllNodes?.find((node) => node.id === nodeId) || { id: nodeId, type: "node" }, { allNodes: window.__xanaAllNodes || [] }), url: window.location.href }, "*"); } - function nodeIdFromUrl() { + function nodeIdFromUrl(allNodes = []) { const pathname = window.location.pathname.replace(/\/$/, ""); const match = pathname.match(/^\/node\/(.+)$/); if (match) return decodeURIComponent(match[1]); + const matchingNode = allNodes.find((node) => normalizePath(node.url) === normalizePath(pathname)); + if (matchingNode) return matchingNode.id; + + const parts = pathname.replace(/^\//, "").split("/"); + if (parts.length >= 2) { + try { + const candidateId = decodeURIComponent(parts.at(-1)); + if (allNodes.some((node) => node.id === candidateId)) return candidateId; + } catch { + const candidateId = parts.at(-1); + if (allNodes.some((node) => node.id === candidateId)) return candidateId; + } + } + return new URLSearchParams(window.location.search).get("node"); } @@ -2970,6 +3100,27 @@ } } + function nodeHref(nodeOrId, state = {}) { + const id = typeof nodeOrId === "string" ? nodeOrId : nodeOrId?.id; + if (!id) return "/"; + + const node = typeof nodeOrId === "string" + ? state.allNodes?.find((candidate) => candidate.id === nodeOrId) + : nodeOrId; + + if (node?.url) return node.url; + const typeSegment = slugSegment(node?.type || "node"); + return `/${typeSegment}/${encodeURIComponent(id)}/`; + } + + function slugSegment(value) { + return String(value || "node") + .trim() + .toLowerCase() + .replace(/[^a-z0-9._-]+/g, "-") + .replace(/^-+|-+$/g, "") || "node"; + } + function normalizeSearchText(value) { return String(value || "") .toLowerCase() @@ -3053,10 +3204,20 @@ colorTheme: loadSetting(STORAGE_KEYS.colorTheme, DISPLAY_DEFAULTS.colorTheme), uiDensity: loadSetting(STORAGE_KEYS.uiDensity, DISPLAY_DEFAULTS.uiDensity), graphAtmosphere: loadSetting(STORAGE_KEYS.graphAtmosphere, DISPLAY_DEFAULTS.graphAtmosphere), - ttsNarrator: loadSetting(STORAGE_KEYS.ttsNarrator, DISPLAY_DEFAULTS.ttsNarrator) + ttsNarrator: loadSetting(STORAGE_KEYS.ttsNarrator, DISPLAY_DEFAULTS.ttsNarrator), + ttsVoice: loadSetting(STORAGE_KEYS.ttsVoice, DISPLAY_DEFAULTS.ttsVoice), + ttsRate: clampNumber(loadSetting(STORAGE_KEYS.ttsRate, DISPLAY_DEFAULTS.ttsRate), 0.65, 1.35, DISPLAY_DEFAULTS.ttsRate), + ttsPitch: clampNumber(loadSetting(STORAGE_KEYS.ttsPitch, DISPLAY_DEFAULTS.ttsPitch), 0.75, 1.35, DISPLAY_DEFAULTS.ttsPitch), + ttsDetail: loadSetting(STORAGE_KEYS.ttsDetail, DISPLAY_DEFAULTS.ttsDetail) }; } + function clampNumber(value, min, max, fallback) { + const number = Number(value); + if (!Number.isFinite(number)) return fallback; + return Math.min(max, Math.max(min, number)); + } + function applyDisplaySettings(settings) { const resolved = { ...DISPLAY_DEFAULTS, ...(settings || {}) }; document.documentElement.dataset.xanaTheme = resolved.colorTheme; diff --git a/tools/prepare-xananode.mjs b/tools/prepare-xananode.mjs index 0efba9a0..eed97e38 100644 --- a/tools/prepare-xananode.mjs +++ b/tools/prepare-xananode.mjs @@ -102,6 +102,23 @@ function readJson(filePath) { return JSON.parse(fs.readFileSync(filePath, "utf8")); } +function withoutGeneratedAt(value) { + return JSON.stringify(value, (key, innerValue) => key === "generated_at" ? undefined : innerValue); +} + +function withStableGeneratedAt(nextValue, existingPath) { + if (!fs.existsSync(existingPath)) return nextValue; + try { + const existingValue = readJson(existingPath); + if (withoutGeneratedAt(existingValue) === withoutGeneratedAt(nextValue) && existingValue.generated_at) { + return { ...nextValue, generated_at: existingValue.generated_at }; + } + } catch { + // Keep the fresh timestamp if the previous artifact cannot be read. + } + return nextValue; +} + function asArray(value) { if (value === undefined || value === null) return []; return Array.isArray(value) ? value : [value]; @@ -123,6 +140,21 @@ function protocolTypePath(type) { return normalizedType; } +const PUBLIC_ROUTE_TYPES = new Set([ + "claim", + "concept", + "essay", + "media", + "observation", + "person", + "project", + "schema", + "source", + "technology", + "trail", + "node" +]); + function nodeIdFor(relativeFile, data) { return data.node_id || path.basename(relativeFile, ".md"); } @@ -360,7 +392,7 @@ function lineColumnFor(text, index) { } function linkTargetFor(node) { - return `/node/${encodeURIComponent(node.id)}`; + return `/${protocolTypePath(node.data?.type || "node")}/${encodeURIComponent(node.id)}/`; } function nodeIdFromLinkHref(href) { @@ -372,11 +404,12 @@ function nodeIdFromLinkHref(href) { pathValue = value; } const stripped = pathValue.replace(/^\//, "").replace(/\/$/, ""); - if (!stripped.startsWith("node/")) return null; + const [routeType, ...rest] = stripped.split("/"); + if (!PUBLIC_ROUTE_TYPES.has(routeType) || !rest.length) return null; try { - return decodeURIComponent(stripped.slice("node/".length)); + return decodeURIComponent(rest.at(-1)); } catch { - return stripped.slice("node/".length); + return rest.at(-1); } } @@ -1022,9 +1055,11 @@ fs.mkdirSync(dataDir, { recursive: true }); fs.mkdirSync(staticDir, { recursive: true }); fs.mkdirSync(staticNodesDir, { recursive: true }); copyProtocolSchemas(staticSchemaDir); -fs.writeFileSync(path.join(dataDir, "xananode_fragments.json"), JSON.stringify(fragments, null, 2) + "\n"); +const fragmentsOutput = withStableGeneratedAt(fragments, path.join(dataDir, "xananode_fragments.json")); +reviewSuggestions = withStableGeneratedAt(reviewSuggestions, path.join(dataDir, "xananode_suggestions.json")); +fs.writeFileSync(path.join(dataDir, "xananode_fragments.json"), JSON.stringify(fragmentsOutput, null, 2) + "\n"); fs.writeFileSync(path.join(dataDir, "xananode_suggestions.json"), JSON.stringify(reviewSuggestions, null, 2) + "\n"); -fs.writeFileSync(path.join(staticDir, "xananode-fragments.json"), JSON.stringify(fragments, null, 2) + "\n"); +fs.writeFileSync(path.join(staticDir, "xananode-fragments.json"), JSON.stringify(fragmentsOutput, null, 2) + "\n"); fs.writeFileSync(path.join(staticDir, "xananode-suggestions.json"), JSON.stringify(reviewSuggestions, null, 2) + "\n"); fs.writeFileSync(path.join(staticDir, "xananode-suggestions.md"), renderSuggestionReport(reviewSuggestions)); fs.writeFileSync(path.join(staticDir, "substrate.json"), JSON.stringify(substrateManifest, null, 2) + "\n"); From 26e66e80dcba5964bf76751a53b571235ecce1fd Mon Sep 17 00:00:00 2001 From: csiefen Date: Thu, 18 Jun 2026 00:29:04 -0400 Subject: [PATCH 03/11] Add repo trail and protocol reference resolver --- README.md | 4 +- assets/css/style.css | 272 ++++++++- .../content/sources/xananode-core-sdk-repo.md | 19 + .../content/sources/xananode-hugo-repo.md | 19 + .../content/sources/xananode-protocol-repo.md | 19 + .../content/sources/xananode-studio-repo.md | 19 + .../sources/xananode-workspace-repo.md | 17 + .../xananode-implementation-stack-trail.md | 41 ++ exampleSite/data/xananode_fragments.json | 160 ++++- exampleSite/data/xananode_suggestions.json | 117 +++- exampleSite/static/nodes/as-we-may-think.json | 10 +- .../static/nodes/canonical-type-policy.json | 6 +- .../static/nodes/civilizational-memory.json | 10 +- .../nodes/claim-merge-without-collapse.json | 14 +- .../claim-relationships-preserve-context.json | 12 +- .../nodes/claim-substrate-is-structure.json | 6 +- .../static/nodes/compatibility-levels.json | 14 +- .../nodes/compatibility-report-schema.json | 6 +- .../static/nodes/compatibility-report.json | 16 +- .../nodes/custom-extension-substrate.json | 8 +- exampleSite/static/nodes/cytoscape-js.json | 4 +- exampleSite/static/nodes/deep-linking.json | 6 +- .../static/nodes/dispute-resolution.json | 10 +- .../static/nodes/douglas-engelbart.json | 8 +- .../nodes/federated-knowledge-substrates.json | 38 +- .../static/nodes/federation-example.json | 14 +- .../static/nodes/federation-rules.json | 14 +- exampleSite/static/nodes/fragment-node.json | 12 +- .../nodes/historical-lineage-trail.json | 8 +- exampleSite/static/nodes/hugo.json | 10 +- .../static/nodes/independent-moderation.json | 14 +- .../static/nodes/knowledge-substrate.json | 34 +- .../nodes/known-implementations-registry.json | 4 +- exampleSite/static/nodes/link-rot.json | 10 +- exampleSite/static/nodes/memex.json | 10 +- .../static/nodes/merge-report-schema.json | 6 +- exampleSite/static/nodes/merge-report.json | 16 +- .../static/nodes/merge-validation.json | 24 +- .../static/nodes/moderation-model.json | 6 +- .../static/nodes/mother-of-all-demos.json | 10 +- .../static/nodes/namespace-registry.json | 8 +- .../static/nodes/namespace-schema.json | 6 +- exampleSite/static/nodes/namespacing.json | 16 +- exampleSite/static/nodes/nls.json | 8 +- exampleSite/static/nodes/project-xanadu.json | 10 +- .../nodes/protocol-artifacts-trail.json | 14 +- .../static/nodes/protocol-artifacts.json | 24 +- exampleSite/static/nodes/provenance.json | 28 +- .../static/nodes/review-suggestions.json | 6 +- .../static/nodes/schema-extension.json | 20 +- .../static/nodes/single-source-of-truth.json | 14 +- .../nodes/source-code-link-decay-study.json | 6 +- exampleSite/static/nodes/start-here.json | 14 +- .../static/nodes/static-publishing.json | 4 +- .../nodes/substrate-manifest-schema.json | 8 +- .../static/nodes/substrate-manifest.json | 12 +- .../static/nodes/substrate-node-record.json | 16 +- .../static/nodes/substrate-node-schema.json | 8 +- .../nodes/substrate-relationship-list.json | 16 +- .../nodes/substrate-relationships-schema.json | 8 +- exampleSite/static/nodes/ted-nelson.json | 10 +- exampleSite/static/nodes/transclusion.json | 18 +- .../static/nodes/tumbler-addressing.json | 12 +- .../static/nodes/typed-relationships.json | 12 +- .../static/nodes/unlabeled-hyperlink.json | 10 +- exampleSite/static/nodes/vannevar-bush.json | 8 +- .../static/nodes/what-is-xananode.json | 10 +- .../xanadu-document-interconnection.json | 10 +- .../static/nodes/xananode-core-schema.json | 60 +- .../static/nodes/xananode-core-sdk-repo.json | 35 ++ .../static/nodes/xananode-core-trail.json | 12 +- .../static/nodes/xananode-hugo-repo.json | 35 ++ .../static/nodes/xananode-hugo-theme.json | 30 +- exampleSite/static/nodes/xananode-icon.json | 6 +- .../xananode-implementation-stack-trail.json | 39 ++ .../static/nodes/xananode-node-types.json | 8 +- .../static/nodes/xananode-protocol-repo.json | 35 ++ .../nodes/xananode-relationship-types.json | 8 +- .../static/nodes/xananode-studio-repo.json | 35 ++ .../static/nodes/xananode-workspace-repo.json | 29 + exampleSite/static/nodes/xananode.json | 44 +- exampleSite/static/relationships.json | 561 ++++++++++++------ exampleSite/static/xananode-fragments.json | 160 ++++- exampleSite/static/xananode-suggestions.json | 117 +++- exampleSite/static/xananode-suggestions.md | 50 +- layouts/404.html | 270 +-------- layouts/index.json | 1 + static/js/xananode.js | 404 ++++++++++++- 88 files changed, 2458 insertions(+), 864 deletions(-) create mode 100644 exampleSite/content/sources/xananode-core-sdk-repo.md create mode 100644 exampleSite/content/sources/xananode-hugo-repo.md create mode 100644 exampleSite/content/sources/xananode-protocol-repo.md create mode 100644 exampleSite/content/sources/xananode-studio-repo.md create mode 100644 exampleSite/content/sources/xananode-workspace-repo.md create mode 100644 exampleSite/content/trails/xananode-implementation-stack-trail.md create mode 100644 exampleSite/static/nodes/xananode-core-sdk-repo.json create mode 100644 exampleSite/static/nodes/xananode-hugo-repo.json create mode 100644 exampleSite/static/nodes/xananode-implementation-stack-trail.json create mode 100644 exampleSite/static/nodes/xananode-protocol-repo.json create mode 100644 exampleSite/static/nodes/xananode-studio-repo.json create mode 100644 exampleSite/static/nodes/xananode-workspace-repo.json diff --git a/README.md b/README.md index 601395cb..8adf44ab 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ themes/xananode-hugo/ layouts/ Hugo templates and JSON export static/js/xananode.js Cytoscape-powered graph viewer static/schemas/ Bundled XanaNode schemas and registries - tools/prepare-xananode.mjs Validator, protocol artifact generator, fragment generator, suggestion scanner + tools/prepare-xananode.mjs Hugo adapter that prepares Core-validated artifacts vendor/xananode-core/ Core SDK submodule used for protocol validation exampleSite/ Self-hosting example substrate package.json Validation/build scripts for the example @@ -47,6 +47,8 @@ themes/xananode-hugo/ The build tool validates generated substrate artifacts with `@xananode/core`. It also copies the latest protocol schemas from the Core SDK submodule into the example site's static output so the published Hugo site and the machine-readable artifacts stay aligned. +`tools/prepare-xananode.mjs` intentionally remains in this repository because it is Hugo-specific glue. It reads Hugo Markdown/front matter conventions, resolves Hugo shortcodes, writes files into Hugo's `data/` and `static/` folders, and prepares the viewer feed used by the theme. Protocol rules should live in Core; renderer concerns should stay here. If this script needs a protocol rule that Core does not expose, that rule belongs upstream in Core rather than being reimplemented permanently in Hugo. + Current generated protocol files include: - `substrate.json`: substrate manifest with namespace, version, imports, and schema version. diff --git a/assets/css/style.css b/assets/css/style.css index 47c98375..e19a5306 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -411,6 +411,9 @@ body, } .xana-search-wrap { + display: flex; + flex-wrap: wrap; + align-items: center; background: rgba(5, 7, 10, 0.82); border: 1px solid rgba(255, 255, 255, 0.13); border-radius: 1.5rem; @@ -429,6 +432,8 @@ body, display: flex; align-items: center; gap: 0.4rem; + flex: 1 1 calc(100% - 1rem); + min-width: 0; } .xana-search-form input { @@ -444,8 +449,27 @@ body, } .xana-search-form input::placeholder { - color: rgba(148, 163, 184, 0.5); - font-style: italic; + color: rgba(176, 246, 233, 0.78); + font-style: normal; +} + +.xana-search-wrap::after { + content: ""; + display: inline-block; + width: 1px; + height: 1.15em; + margin-left: 0.15rem; + background: var(--xana-accent); + opacity: 0.75; + animation: xana-caret-blink 900ms steps(2, start) infinite; +} + +.xana-search-wrap:focus-within::after { + display: none; +} + +@keyframes xana-caret-blink { + 50% { opacity: 0; } } .xana-search-form input::-webkit-search-cancel-button { @@ -475,6 +499,7 @@ body, } .xana-search-meta { + flex: 1 0 100%; color: #55d6be; font-size: 0.72rem; font-weight: 850; @@ -484,6 +509,7 @@ body, } .xana-search-results { + flex: 1 0 100%; max-height: min(42vh, 380px); overflow: auto; margin-top: 0.4rem; @@ -857,6 +883,84 @@ body, accent-color: var(--xana-accent); } +.xana-interface-tour { + position: absolute; + inset: 0; + z-index: 70; + pointer-events: none; +} + +.xana-interface-tour-card { + position: absolute; + right: 1.5rem; + top: 1.5rem; + width: min(360px, calc(100% - 3rem)); + padding: 1rem; + border: 1px solid var(--xana-accent-border); + border-radius: 0.9rem; + background: var(--xana-panel-bg); + color: var(--xana-text); + box-shadow: 0 24px 70px rgba(0, 0, 0, 0.38); + pointer-events: auto; +} + +.xana-interface-tour-count { + color: var(--xana-accent); + font-size: 0.68rem; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.xana-interface-tour-card h2 { + margin: 0.25rem 0 0.4rem; + font-size: 1.25rem; +} + +.xana-interface-tour-card p { + margin: 0; + color: var(--xana-text-muted); + line-height: 1.5; +} + +.xana-interface-tour-actions { + display: flex; + justify-content: flex-end; + gap: 0.45rem; + margin-top: 0.9rem; +} + +.xana-interface-tour-actions button { + min-height: 32px; + border: 1px solid var(--xana-panel-border); + border-radius: 0.55rem; + background: var(--xana-surface-elevated); + color: var(--xana-text); + cursor: pointer; + font: inherit; + font-weight: 800; +} + +.xana-interface-tour-actions button:last-child { + border-color: var(--xana-accent); + background: var(--xana-accent-soft); + color: var(--xana-accent); +} + +.xana-interface-tour-actions button:disabled { + opacity: 0.45; + cursor: not-allowed; +} + +.xana-tour-target { + position: relative; + z-index: 72 !important; + outline: 3px solid rgba(85, 214, 190, 0.72); + outline-offset: 5px; + border-radius: 0.9rem; + box-shadow: 0 0 0 9999px rgba(2, 6, 10, 0.38), 0 0 34px rgba(85, 214, 190, 0.34); +} + html[data-xana-density="compact"] .xana-panel { padding: 18px; } @@ -1492,6 +1596,155 @@ a.xana-type-badge-link:focus-visible { display: block; } +.xana-protocol-footer { + display: grid; + gap: 0.45rem; + margin: 1.35rem 0 0; + padding: 0.75rem 0; + border-top: 1px solid var(--xana-panel-border); + color: var(--xana-text-muted); + font-size: 0.72rem; +} + +.xana-protocol-footer div { + min-width: 0; +} + +.xana-protocol-footer span { + display: block; + margin-bottom: 0.16rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.xana-protocol-footer code { + display: block; + overflow-wrap: anywhere; + color: var(--xana-accent); + font-size: 0.74rem; +} + +.xana-fragment-highlight { + position: relative; + border-radius: 0.55rem; + outline: 2px solid rgba(255, 209, 102, 0.9); + background: rgba(255, 209, 102, 0.14); + box-shadow: 0 0 0 6px rgba(255, 209, 102, 0.08); +} + +.xana-fragment-note { + margin: 0 0 1rem; + padding: 0.75rem 0.85rem; + border: 1px solid rgba(255, 209, 102, 0.45); + border-radius: 0.7rem; + background: rgba(255, 209, 102, 0.12); + color: var(--xana-text); +} + +.xana-fragment-note span { + display: block; + margin-bottom: 0.3rem; + color: var(--xana-text-muted); + font-size: 0.68rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.xana-fragment-note code { + overflow-wrap: anywhere; + color: #ffd166; +} + +.xana-trail-playlist { + margin: 1.25rem 0; + padding: 0.85rem; + border: 1px solid var(--xana-panel-border); + border-radius: 0.9rem; + background: rgba(5, 7, 10, 0.34); +} + +.xana-trail-playlist-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + margin-bottom: 0.65rem; +} + +.xana-trail-playlist-head span { + color: var(--xana-text-muted); + font-size: 0.68rem; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.xana-trail-playlist-head button, +.xana-trail-playlist-items button { + font: inherit; + cursor: pointer; +} + +.xana-trail-playlist-head button { + min-height: 32px; + border: 1px solid var(--xana-accent); + border-radius: 0.55rem; + background: var(--xana-accent-soft); + color: var(--xana-accent); + font-weight: 850; +} + +.xana-trail-playlist-items { + display: grid; + gap: 0.4rem; +} + +.xana-trail-playlist-items button { + display: grid; + grid-template-columns: 32px minmax(0, 1fr) auto; + align-items: center; + gap: 0.55rem; + width: 100%; + min-height: 44px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 0.7rem; + background: rgba(21, 25, 34, 0.6); + color: var(--xana-text); + text-align: left; +} + +.xana-trail-playlist-items button span { + display: grid; + place-items: center; + width: 24px; + height: 24px; + border-radius: 50%; + background: var(--xana-accent-soft); + color: var(--xana-accent); + font-size: 0.72rem; + font-weight: 900; +} + +.xana-trail-playlist-items button strong { + min-width: 0; + overflow-wrap: anywhere; +} + +.xana-trail-playlist-items button em { + color: var(--xana-text-muted); + font-size: 0.68rem; + font-style: normal; + font-weight: 850; + text-transform: uppercase; +} + +.xana-trail-playlist-items button:hover { + border-color: var(--xana-accent); + background: rgba(30, 41, 59, 0.8); +} + .xana-media-warning { margin-top: 12px; padding: 10px 12px; @@ -2136,6 +2389,21 @@ a.xana-type-badge-link:focus-visible { max-height: 55svh; } + .xana-interface-tour-card { + right: 0.75rem; + left: 0.75rem; + top: 0.75rem; + width: auto; + } + + .xana-trail-playlist-items button { + grid-template-columns: 30px minmax(0, 1fr); + } + + .xana-trail-playlist-items button em { + grid-column: 2; + } + .xana-node-header, .xana-node-header.has-media, .xana-node-header.no-media { diff --git a/exampleSite/content/sources/xananode-core-sdk-repo.md b/exampleSite/content/sources/xananode-core-sdk-repo.md new file mode 100644 index 00000000..bd757a9a --- /dev/null +++ b/exampleSite/content/sources/xananode-core-sdk-repo.md @@ -0,0 +1,19 @@ +--- +title: "XanaNode Core SDK Repository" +type: "source" +importance: 5 +author: "XanaNode Contributors" +year: "2026" +summary: "The reusable Core SDK repository for building, validating, and exporting XanaNode protocol artifacts across renderers and tools." +source_url: "https://github.com/kingc95/XanaNode-Core-SDK" +rights_status: "open-source" +relationships: + - type: "implements" + target: "xananode-core-schema" + - type: "uses" + target: "substrate-node-record" + - type: "uses" + target: "substrate-relationship-list" +--- + +The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export. diff --git a/exampleSite/content/sources/xananode-hugo-repo.md b/exampleSite/content/sources/xananode-hugo-repo.md new file mode 100644 index 00000000..cfcfef7d --- /dev/null +++ b/exampleSite/content/sources/xananode-hugo-repo.md @@ -0,0 +1,19 @@ +--- +title: "XanaNode Hugo Repository" +type: "source" +importance: 5 +author: "XanaNode Contributors" +year: "2026" +summary: "The Hugo theme repository that publishes XanaNode substrates as static websites while using Core for protocol validation." +source_url: "https://github.com/kingc95/XanaNode-Hugo" +rights_status: "open-source" +relationships: + - type: "implements" + target: "xananode-hugo-theme" + - type: "uses" + target: "hugo" + - type: "uses" + target: "xananode-core-schema" +--- + +The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts. diff --git a/exampleSite/content/sources/xananode-protocol-repo.md b/exampleSite/content/sources/xananode-protocol-repo.md new file mode 100644 index 00000000..8e9b728c --- /dev/null +++ b/exampleSite/content/sources/xananode-protocol-repo.md @@ -0,0 +1,19 @@ +--- +title: "XanaNode Protocol Repository" +type: "source" +importance: 5 +author: "XanaNode Contributors" +year: "2026" +summary: "The canonical XanaNode protocol repository containing schemas, registries, examples, specs, governance, and proposals." +source_url: "https://github.com/kingc95/xananode" +rights_status: "open-source" +relationships: + - type: "defines" + target: "xananode" + - type: "defines" + target: "xananode-core-schema" + - type: "documents" + target: "protocol-artifacts" +--- + +The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals. diff --git a/exampleSite/content/sources/xananode-studio-repo.md b/exampleSite/content/sources/xananode-studio-repo.md new file mode 100644 index 00000000..fb4791b7 --- /dev/null +++ b/exampleSite/content/sources/xananode-studio-repo.md @@ -0,0 +1,19 @@ +--- +title: "XanaNode Studio Repository" +type: "source" +importance: 4 +author: "XanaNode Contributors" +year: "2026" +summary: "The desktop workbench repository for editing, previewing, validating, and navigating local XanaNode substrates." +source_url: "https://github.com/kingc95/XanaNode-Studio" +rights_status: "open-source" +relationships: + - type: "uses" + target: "xananode-core-schema" + - type: "uses" + target: "xananode-hugo-theme" + - type: "demonstrates" + target: "knowledge-substrate" +--- + +The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows. diff --git a/exampleSite/content/sources/xananode-workspace-repo.md b/exampleSite/content/sources/xananode-workspace-repo.md new file mode 100644 index 00000000..d6dee768 --- /dev/null +++ b/exampleSite/content/sources/xananode-workspace-repo.md @@ -0,0 +1,17 @@ +--- +title: "XanaNode Workspace Repository" +type: "source" +importance: 4 +author: "XanaNode Contributors" +year: "2026" +summary: "The workspace orchestration repository for managing multiple local XanaNode substrates, imports, Git state, and build workflows." +source_url: "https://github.com/kingc95/XanaNode-Workspace" +rights_status: "open-source" +relationships: + - type: "uses" + target: "xananode-core-schema" + - type: "required_for" + target: "federated-knowledge-substrates" +--- + +The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks. diff --git a/exampleSite/content/trails/xananode-implementation-stack-trail.md b/exampleSite/content/trails/xananode-implementation-stack-trail.md new file mode 100644 index 00000000..de9cc78a --- /dev/null +++ b/exampleSite/content/trails/xananode-implementation-stack-trail.md @@ -0,0 +1,41 @@ +--- +title: "XanaNode Implementation Stack Trail" +type: "trail" +importance: 5 +summary: "A curated path through the XanaNode repositories in dependency order: Protocol, Core SDK, Hugo, Workspace, and Studio." +nodes: + - xananode-protocol-repo + - xananode-core-sdk-repo + - xananode-hugo-repo + - xananode-workspace-repo + - xananode-studio-repo +relationships: + - type: "starts_with" + target: "xananode-protocol-repo" + - type: "continues_to" + target: "xananode-core-sdk-repo" + - type: "continues_to" + target: "xananode-hugo-repo" + - type: "continues_to" + target: "xananode-workspace-repo" + - type: "arrives_at" + target: "xananode-studio-repo" +--- + +This trail orders the active XanaNode implementation repositories by dependency and responsibility. + +The [protocol repository](/source/xananode-protocol-repository/) defines the canonical rules. + +The [Core SDK repository](/source/xananode-core-sdk-repository/) consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs. + +The [Hugo repository](/source/xananode-hugo-repository/) adapts Hugo content and static publishing to Core-validated protocol artifacts. + +The [Workspace repository](/source/xananode-workspace-repository/) manages multiple local substrates and their operational workflows. + +The [Studio repository](/source/xananode-studio-repository/) provides the desktop workbench for editing, previewing, validating, and navigating those substrates. + +{{< node ref="xananode-protocol-repo" >}} +{{< node ref="xananode-core-sdk-repo" >}} +{{< node ref="xananode-hugo-repo" >}} +{{< node ref="xananode-workspace-repo" >}} +{{< node ref="xananode-studio-repo" >}} diff --git a/exampleSite/data/xananode_fragments.json b/exampleSite/data/xananode_fragments.json index 4c28342a..5873e95c 100644 --- a/exampleSite/data/xananode_fragments.json +++ b/exampleSite/data/xananode_fragments.json @@ -1,6 +1,52 @@ { - "generated_at": "2026-06-18T03:17:03.791Z", + "generated_at": "2026-06-18T04:24:11.885Z", "nodes": { + "xananode-implementation-stack-trail": { + "versions": { + "v1": { + "fragments": { + "1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.\n\nThe protocol repository defines the canonical rules.\n\nThe Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.\n\nThe Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.\n\nThe Workspace repository manages multiple local substrates and their operational workflows.\n\nThe Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.\n\n{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.2": "The protocol repository defines the canonical rules.", + "1.2.1": "The protocol repository defines the canonical rules.", + "1.3": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.3.1": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.4": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.4.1": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.5": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.5.1": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.6": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.6.1": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.7": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.7.1": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}" + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.\n\nThe protocol repository defines the canonical rules.\n\nThe Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.\n\nThe Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.\n\nThe Workspace repository manages multiple local substrates and their operational workflows.\n\nThe Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.\n\n{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.2": "The protocol repository defines the canonical rules.", + "1.2.1": "The protocol repository defines the canonical rules.", + "1.3": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.3.1": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.4": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.4.1": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.5": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.5.1": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.6": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.6.1": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.7": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.7.1": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}" + }, + "metadata": {} + } + }, + "title": "XanaNode Implementation Stack Trail", + "type": "trail" + }, "xananode-core-trail": { "versions": { "v1": { @@ -153,6 +199,118 @@ "title": "Cytoscape.js", "type": "technology" }, + "xananode-workspace-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks." + }, + "metadata": {} + } + }, + "title": "XanaNode Workspace Repository", + "type": "source" + }, + "xananode-studio-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows." + }, + "metadata": {} + } + }, + "title": "XanaNode Studio Repository", + "type": "source" + }, + "xananode-protocol-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals." + }, + "metadata": {} + } + }, + "title": "XanaNode Protocol Repository", + "type": "source" + }, + "xananode-hugo-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1.1": "The Hugo repository is the static-site renderer and example substrate.", + "1.1.2": "It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1.1": "The Hugo repository is the static-site renderer and example substrate.", + "1.1.2": "It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts." + }, + "metadata": {} + } + }, + "title": "XanaNode Hugo Repository", + "type": "source" + }, + "xananode-core-sdk-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export." + }, + "metadata": {} + } + }, + "title": "XanaNode Core SDK Repository", + "type": "source" + }, "xanadu-document-interconnection": { "versions": { "v1": { diff --git a/exampleSite/data/xananode_suggestions.json b/exampleSite/data/xananode_suggestions.json index 79843744..7bbe23dc 100644 --- a/exampleSite/data/xananode_suggestions.json +++ b/exampleSite/data/xananode_suggestions.json @@ -1,7 +1,120 @@ { - "generated_at": "2026-06-18T03:17:03.848Z", + "generated_at": "2026-06-18T04:24:11.950Z", "status": "pending_user_approval", "note": "These suggestions are not auto-applied. Review each replacement before editing content.", - "autolinks": [], + "autolinks": [ + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 82, + "source_node": "xananode-implementation-stack-trail", + "target_node": "static-publishing", + "target_title": "Static Publishing", + "matched_text": "static publishing", + "matched_term": "Static Publishing", + "match_kind": "title", + "replacement": "[static publishing](/technology/static-publishing/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 65, + "source_node": "xananode-implementation-stack-trail", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 25, + "column": 30, + "source_node": "xananode-implementation-stack-trail", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 118, + "source_node": "xananode-implementation-stack-trail", + "target_node": "protocol-artifacts", + "target_title": "Protocol Artifacts", + "matched_text": "protocol artifacts", + "matched_term": "Protocol Artifacts", + "match_kind": "title", + "replacement": "[protocol artifacts](/concept/protocol-artifacts/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-studio-repo.md", + "line": 19, + "column": 96, + "source_node": "xananode-studio-repo", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-protocol-repo.md", + "line": 19, + "column": 52, + "source_node": "xananode-protocol-repo", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-hugo-repo.md", + "line": 19, + "column": 5, + "source_node": "xananode-hugo-repo", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-hugo-repo.md", + "line": 19, + "column": 139, + "source_node": "xananode-hugo-repo", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + } + ], "transclusions": [] } diff --git a/exampleSite/static/nodes/as-we-may-think.json b/exampleSite/static/nodes/as-we-may-think.json index 18d18d84..e816c398 100644 --- a/exampleSite/static/nodes/as-we-may-think.json +++ b/exampleSite/static/nodes/as-we-may-think.json @@ -8,31 +8,31 @@ "rights_status": "copyrighted", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-documents-memex-26", + "id": "xananode.example:rel/as-we-may-think-documents-memex-45", "type": "documents", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-27", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", "type": "supports", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-63", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", "type": "introduced_in", "source": "xananode.example:project/memex", "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-65", + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", "type": "authored", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-107", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", "type": "deep_links_to", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" diff --git a/exampleSite/static/nodes/canonical-type-policy.json b/exampleSite/static/nodes/canonical-type-policy.json index 6fc4e651..d73cfd46 100644 --- a/exampleSite/static/nodes/canonical-type-policy.json +++ b/exampleSite/static/nodes/canonical-type-policy.json @@ -6,19 +6,19 @@ "summary": "The governance rule that separates shared core node and relationship types from namespaced extension types.", "relationships": [ { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-178", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", "type": "features", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-188", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", "type": "context_for", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-189", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" diff --git a/exampleSite/static/nodes/civilizational-memory.json b/exampleSite/static/nodes/civilizational-memory.json index 722b7190..541224f9 100644 --- a/exampleSite/static/nodes/civilizational-memory.json +++ b/exampleSite/static/nodes/civilizational-memory.json @@ -6,31 +6,31 @@ "summary": "A long-term, federated memory layer where knowledge remains traceable, disputed, interoperable, and navigable across generations.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-5", + "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-10", "type": "arrives_at", "source": "xananode.example:trail/xananode-core-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-184", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", "type": "enables", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-185", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", "type": "requires", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-186", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-187", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", "type": "requires", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-merge-without-collapse.json b/exampleSite/static/nodes/claim-merge-without-collapse.json index a09fa046..a9a6a1da 100644 --- a/exampleSite/static/nodes/claim-merge-without-collapse.json +++ b/exampleSite/static/nodes/claim-merge-without-collapse.json @@ -7,43 +7,43 @@ "summary": "Federated substrates should preserve authorship, provenance, and disagreement rather than forcing one merged source of truth.", "relationships": [ { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-84", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", "type": "arrives_at", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-141", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", "type": "arrives_at", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-144", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", "type": "supports", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-170", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", "type": "supports", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-193", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", "type": "has_claim", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-194", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", "type": "supports", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-195", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", "type": "contradicts", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-relationships-preserve-context.json b/exampleSite/static/nodes/claim-relationships-preserve-context.json index 7b8e592e..a3287446 100644 --- a/exampleSite/static/nodes/claim-relationships-preserve-context.json +++ b/exampleSite/static/nodes/claim-relationships-preserve-context.json @@ -7,37 +7,37 @@ "summary": "Typed relationships preserve why nodes are connected, while ordinary hyperlinks usually preserve only that a connection exists.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-21", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", "type": "supports", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-23", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", "type": "supports", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-101", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", "type": "supports", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-123", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", "type": "evidence_for", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-191", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", "type": "has_claim", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-192", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-substrate-is-structure.json b/exampleSite/static/nodes/claim-substrate-is-structure.json index 5ac63ee6..10433c1d 100644 --- a/exampleSite/static/nodes/claim-substrate-is-structure.json +++ b/exampleSite/static/nodes/claim-substrate-is-structure.json @@ -7,19 +7,19 @@ "summary": "A knowledge substrate is not the information itself; it is the structure that determines how information relates, persists, and can be understood.", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-27", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", "type": "supports", "source": "xananode.example:source/as-we-may-think", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-147", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", "type": "has_claim", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-190", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", "type": "supports", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-levels.json b/exampleSite/static/nodes/compatibility-levels.json index 3f942d0f..eceb6356 100644 --- a/exampleSite/static/nodes/compatibility-levels.json +++ b/exampleSite/static/nodes/compatibility-levels.json @@ -6,43 +6,43 @@ "summary": "A staged way to describe how much of a substrate another implementation can recognize, validate, extend, merge, or federate.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-10", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-15", "type": "continues_to", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-53", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", "type": "documents", "source": "xananode.example:schema/compatibility-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-146", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", "type": "supports", "source": "xananode.example:concept/known-implementations-registry", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-179", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", "type": "documents", "source": "xananode.example:concept/compatibility-report", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-181", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-182", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", "type": "requires", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-report-schema.json b/exampleSite/static/nodes/compatibility-report-schema.json index b850e384..df365220 100644 --- a/exampleSite/static/nodes/compatibility-report-schema.json +++ b/exampleSite/static/nodes/compatibility-report-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema that validates compatibility reports between tools and substrates.", "relationships": [ { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-52", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", "type": "defines", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-53", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", "type": "documents", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-54", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", "type": "requires", "source": "xananode.example:concept/federation-example", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-report.json b/exampleSite/static/nodes/compatibility-report.json index a03e2706..5c1c17f9 100644 --- a/exampleSite/static/nodes/compatibility-report.json +++ b/exampleSite/static/nodes/compatibility-report.json @@ -6,49 +6,49 @@ "summary": "A report that records how one substrate or tool understands another substrate, including compatibility level, supported schemas, warnings, and blocking issues.", "relationships": [ { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-45", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", "type": "requires", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-52", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", "type": "defines", "source": "xananode.example:schema/compatibility-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-140", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", "type": "uses", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-158", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-161", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", "type": "uses", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-179", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", "type": "documents", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-180", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-181", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", "type": "uses", "source": "xananode.example:concept/compatibility-levels", "direction": "incoming" diff --git a/exampleSite/static/nodes/custom-extension-substrate.json b/exampleSite/static/nodes/custom-extension-substrate.json index 956e483f..4eb4cb17 100644 --- a/exampleSite/static/nodes/custom-extension-substrate.json +++ b/exampleSite/static/nodes/custom-extension-substrate.json @@ -6,25 +6,25 @@ "summary": "An example substrate that defines namespaced domain-specific node and relationship types while preserving compatibility with XanaNode Core.", "relationships": [ { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-175", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", "type": "demonstrates", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-176", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", "type": "requires", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-177", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", "type": "uses", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-178", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", "type": "features", "target": "xananode.example:concept/canonical-type-policy", "direction": "outgoing" diff --git a/exampleSite/static/nodes/cytoscape-js.json b/exampleSite/static/nodes/cytoscape-js.json index 7d0463e3..cee22815 100644 --- a/exampleSite/static/nodes/cytoscape-js.json +++ b/exampleSite/static/nodes/cytoscape-js.json @@ -6,13 +6,13 @@ "summary": "A JavaScript graph visualization library used by the reference viewer to render nodes and relationships.", "relationships": [ { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-18", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", "type": "represents", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-57", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", "type": "uses", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" diff --git a/exampleSite/static/nodes/deep-linking.json b/exampleSite/static/nodes/deep-linking.json index 334ae359..d347c7ad 100644 --- a/exampleSite/static/nodes/deep-linking.json +++ b/exampleSite/static/nodes/deep-linking.json @@ -6,19 +6,19 @@ "summary": "Pointing to a specific addressable fragment rather than only to a whole document or node.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-103", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-173", + "id": "xananode.example:rel/deep-linking-enables-transclusion-192", "type": "enables", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-174", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" diff --git a/exampleSite/static/nodes/dispute-resolution.json b/exampleSite/static/nodes/dispute-resolution.json index 1c9c1d92..43693395 100644 --- a/exampleSite/static/nodes/dispute-resolution.json +++ b/exampleSite/static/nodes/dispute-resolution.json @@ -6,31 +6,31 @@ "summary": "A governance process for preserving contested claims, identity matches, relationships, and moderation decisions without pretending disagreement has disappeared.", "relationships": [ { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-135", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", "type": "context_for", "source": "xananode.example:concept/moderation-model", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-169", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-170", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-171", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", "type": "context_for", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-172", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" diff --git a/exampleSite/static/nodes/douglas-engelbart.json b/exampleSite/static/nodes/douglas-engelbart.json index c689e22b..92983d11 100644 --- a/exampleSite/static/nodes/douglas-engelbart.json +++ b/exampleSite/static/nodes/douglas-engelbart.json @@ -6,25 +6,25 @@ "summary": "Computer pioneer focused on augmenting human intellect through interactive computing.", "relationships": [ { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-13", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-18", "type": "continues_to", "source": "xananode.example:trail/historical-lineage-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-72", + "id": "xananode.example:rel/douglas-engelbart-created-nls-91", "type": "created", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-73", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", "type": "presented", "target": "xananode.example:source/mother-of-all-demos", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-74", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/federated-knowledge-substrates.json b/exampleSite/static/nodes/federated-knowledge-substrates.json index f7c97532..d4f9e3ad 100644 --- a/exampleSite/static/nodes/federated-knowledge-substrates.json +++ b/exampleSite/static/nodes/federated-knowledge-substrates.json @@ -6,97 +6,103 @@ "summary": "Independently authored XanaNode substrates that can interoperate, merge, compare, and preserve disagreement without a central authority.", "relationships": [ { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-35", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "type": "requires", + "target": "xananode.example:source/xananode-workspace-repo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-85", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", "type": "context_for", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-89", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-94", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", "type": "explains", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-115", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", "type": "contrasts_with", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-120", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", "type": "requires", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-129", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", "type": "requires", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-156", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", "type": "defines", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-160", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", "type": "demonstrates", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-164", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-165", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", "type": "requires", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-166", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", "type": "requires", "target": "xananode.example:concept/federation-rules", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-167", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-168", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", "type": "alternative_to", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", "type": "requires", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-184", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", "type": "enables", "target": "xananode.example:concept/civilizational-memory", "direction": "outgoing" diff --git a/exampleSite/static/nodes/federation-example.json b/exampleSite/static/nodes/federation-example.json index 7c1319c6..5cdf7f44 100644 --- a/exampleSite/static/nodes/federation-example.json +++ b/exampleSite/static/nodes/federation-example.json @@ -6,43 +6,43 @@ "summary": "A protocol example showing two independently authored substrates being compared through compatibility and merge reports.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-11", + "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-16", "type": "arrives_at", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-51", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", "type": "requires", "target": "xananode.example:schema/merge-report-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-54", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", "type": "requires", "target": "xananode.example:schema/compatibility-report-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-160", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", "type": "demonstrates", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-161", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-162", + "id": "xananode.example:rel/federation-example-uses-merge-report-181", "type": "uses", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-163", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" diff --git a/exampleSite/static/nodes/federation-rules.json b/exampleSite/static/nodes/federation-rules.json index 07ddb75a..9bb988e0 100644 --- a/exampleSite/static/nodes/federation-rules.json +++ b/exampleSite/static/nodes/federation-rules.json @@ -6,43 +6,43 @@ "summary": "The rules for exchanging, comparing, and preserving independently governed substrates without collapsing them into one authority.", "relationships": [ { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-134", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", "type": "requires", "target": "xananode.example:concept/moderation-model", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-156", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", "type": "defines", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-157", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-158", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", "type": "requires", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-159", + "id": "xananode.example:rel/federation-rules-requires-merge-report-178", "type": "requires", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-166", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-172", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", "type": "requires", "target": "xananode.example:concept/dispute-resolution", "direction": "outgoing" diff --git a/exampleSite/static/nodes/fragment-node.json b/exampleSite/static/nodes/fragment-node.json index 32160c95..11a2db15 100644 --- a/exampleSite/static/nodes/fragment-node.json +++ b/exampleSite/static/nodes/fragment-node.json @@ -6,37 +6,37 @@ "summary": "A node representing a stable addressable portion of another source, publication, media object, or node.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-105", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-109", + "id": "xananode.example:rel/transclusion-uses-fragment-node-128", "type": "uses", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-113", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", "type": "contains", "source": "xananode.example:concept/substrate-node-record", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-153", + "id": "xananode.example:rel/transclusion-requires-fragment-node-172", "type": "requires", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-154", + "id": "xananode.example:rel/fragment-node-preserves-provenance-173", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-155", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", "type": "deep_links_to", "target": "xananode.example:source/mother-of-all-demos", "direction": "outgoing" diff --git a/exampleSite/static/nodes/historical-lineage-trail.json b/exampleSite/static/nodes/historical-lineage-trail.json index 7c84927b..f06df731 100644 --- a/exampleSite/static/nodes/historical-lineage-trail.json +++ b/exampleSite/static/nodes/historical-lineage-trail.json @@ -6,25 +6,25 @@ "summary": "A curated path through Bush, Engelbart, Nelson, and XanaNode.", "relationships": [ { - "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-12", + "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-17", "type": "starts_with", "target": "xananode.example:person/vannevar-bush", "direction": "outgoing" }, { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-13", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-18", "type": "continues_to", "target": "xananode.example:person/douglas-engelbart", "direction": "outgoing" }, { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-14", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-19", "type": "continues_to", "target": "xananode.example:person/ted-nelson", "direction": "outgoing" }, { - "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-15", + "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-20", "type": "arrives_at", "target": "xananode.example:concept/xananode", "direction": "outgoing" diff --git a/exampleSite/static/nodes/hugo.json b/exampleSite/static/nodes/hugo.json index 6e4fd88d..daf94f0e 100644 --- a/exampleSite/static/nodes/hugo.json +++ b/exampleSite/static/nodes/hugo.json @@ -6,13 +6,19 @@ "summary": "A static site generator used by the example implementation to compile content into a public substrate viewer.", "relationships": [ { - "id": "xananode.example:rel/hugo-implements-static-publishing-17", + "id": "xananode.example:rel/hugo-implements-static-publishing-22", "type": "implements", "target": "xananode.example:technology/static-publishing", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-56", + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "type": "uses", + "source": "xananode.example:source/xananode-hugo-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", "type": "uses", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" diff --git a/exampleSite/static/nodes/independent-moderation.json b/exampleSite/static/nodes/independent-moderation.json index 7e5b3fe4..a6235812 100644 --- a/exampleSite/static/nodes/independent-moderation.json +++ b/exampleSite/static/nodes/independent-moderation.json @@ -6,43 +6,43 @@ "summary": "The principle that each substrate may govern its own content while still remaining interoperable with others.", "relationships": [ { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-116", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", "type": "threatens", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-133", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", "type": "defines", "source": "xananode.example:concept/moderation-model", "direction": "incoming" }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-151", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", "type": "contrasts_with", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-152", + "id": "xananode.example:rel/independent-moderation-requires-provenance-171", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-157", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", "type": "preserves", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-163", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", "type": "preserves", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-167", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", "type": "preserves", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/knowledge-substrate.json b/exampleSite/static/nodes/knowledge-substrate.json index 53b17db8..205810a1 100644 --- a/exampleSite/static/nodes/knowledge-substrate.json +++ b/exampleSite/static/nodes/knowledge-substrate.json @@ -6,85 +6,91 @@ "summary": "The structure that determines how information relates, persists, evolves, and can be navigated as knowledge.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-3", + "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-8", "type": "continues_to", "source": "xananode.example:trail/xananode-core-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-18", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", "type": "represents", "source": "xananode.example:technology/cytoscape-js", "direction": "incoming" }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-25", + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "type": "demonstrates", + "source": "xananode.example:source/xananode-studio-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", "type": "supports", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-58", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", "type": "demonstrates", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-67", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", "type": "anticipated", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-78", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", "type": "explains", "target": "xananode.example:observation/link-rot", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-88", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-93", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", "type": "defines", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-117", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", "type": "alternative_to", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-147", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", "type": "has_claim", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-148", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-149", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", "type": "requires", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-150", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", "type": "enables", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-185", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" diff --git a/exampleSite/static/nodes/known-implementations-registry.json b/exampleSite/static/nodes/known-implementations-registry.json index b1c8f4dd..7ed38b9b 100644 --- a/exampleSite/static/nodes/known-implementations-registry.json +++ b/exampleSite/static/nodes/known-implementations-registry.json @@ -6,13 +6,13 @@ "summary": "A registry of tools, themes, validators, renderers, and substrates that claim some level of XanaNode compatibility.", "relationships": [ { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-145", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", "type": "documents", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-146", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", "type": "supports", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" diff --git a/exampleSite/static/nodes/link-rot.json b/exampleSite/static/nodes/link-rot.json index ae0bb51e..156b9df5 100644 --- a/exampleSite/static/nodes/link-rot.json +++ b/exampleSite/static/nodes/link-rot.json @@ -6,31 +6,31 @@ "summary": "A failure mode where references embedded in digital artifacts decay, move, disappear, or lose context over time.", "relationships": [ { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-22", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", "type": "documents", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-75", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", "type": "demonstrates", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" }, { - "id": "xananode.example:rel/link-rot-threatens-provenance-76", + "id": "xananode.example:rel/link-rot-threatens-provenance-95", "type": "threatens", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-77", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", "type": "supports", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-78", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", "type": "explains", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" diff --git a/exampleSite/static/nodes/memex.json b/exampleSite/static/nodes/memex.json index 646596f6..4bef5a7d 100644 --- a/exampleSite/static/nodes/memex.json +++ b/exampleSite/static/nodes/memex.json @@ -6,31 +6,31 @@ "summary": "Vannevar Bush's proposed associative memory device for navigating trails through recorded knowledge.", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-documents-memex-26", + "id": "xananode.example:rel/as-we-may-think-documents-memex-45", "type": "documents", "source": "xananode.example:source/as-we-may-think", "direction": "incoming" }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-63", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", "type": "introduced_in", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" }, { - "id": "xananode.example:rel/memex-anticipated-xananode-64", + "id": "xananode.example:rel/memex-anticipated-xananode-83", "type": "anticipated", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-66", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", "type": "proposed", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-memex-98", + "id": "xananode.example:rel/xananode-extends-memex-117", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-report-schema.json b/exampleSite/static/nodes/merge-report-schema.json index df73f054..a5b7a8e2 100644 --- a/exampleSite/static/nodes/merge-report-schema.json +++ b/exampleSite/static/nodes/merge-report-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema that validates merge reports for substrate comparison and federation workflows.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-49", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", "type": "defines", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-50", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", "type": "documents", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-51", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", "type": "requires", "source": "xananode.example:concept/federation-example", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-report.json b/exampleSite/static/nodes/merge-report.json index 42f9c47b..e8632c91 100644 --- a/exampleSite/static/nodes/merge-report.json +++ b/exampleSite/static/nodes/merge-report.json @@ -6,49 +6,49 @@ "summary": "A report that explains proposed mappings, conflicts, identity decisions, preserved disagreements, and unresolved issues when substrates are compared or merged.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-49", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", "type": "defines", "source": "xananode.example:schema/merge-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-139", + "id": "xananode.example:rel/merge-validation-uses-merge-report-158", "type": "uses", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-142", + "id": "xananode.example:rel/merge-report-documents-merge-validation-161", "type": "documents", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-143", + "id": "xananode.example:rel/merge-report-preserves-provenance-162", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-144", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-159", + "id": "xananode.example:rel/federation-rules-requires-merge-report-178", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-162", + "id": "xananode.example:rel/federation-example-uses-merge-report-181", "type": "uses", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-171", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", "type": "context_for", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-validation.json b/exampleSite/static/nodes/merge-validation.json index 87811cfb..ba47932e 100644 --- a/exampleSite/static/nodes/merge-validation.json +++ b/exampleSite/static/nodes/merge-validation.json @@ -6,73 +6,73 @@ "summary": "The process of safely combining or comparing substrates without destroying authorship, provenance, disagreement, or local moderation.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-50", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", "type": "documents", "source": "xananode.example:schema/merge-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-136", + "id": "xananode.example:rel/merge-validation-requires-namespacing-155", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-137", + "id": "xananode.example:rel/merge-validation-requires-provenance-156", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-138", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", "type": "requires", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-139", + "id": "xananode.example:rel/merge-validation-uses-merge-report-158", "type": "uses", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-140", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-141", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", "type": "arrives_at", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-142", + "id": "xananode.example:rel/merge-report-documents-merge-validation-161", "type": "documents", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-165", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-180", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", "type": "requires", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-187", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-193", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", "type": "has_claim", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" diff --git a/exampleSite/static/nodes/moderation-model.json b/exampleSite/static/nodes/moderation-model.json index 27dbdfdb..ccd7447d 100644 --- a/exampleSite/static/nodes/moderation-model.json +++ b/exampleSite/static/nodes/moderation-model.json @@ -6,19 +6,19 @@ "summary": "The governance model that lets each substrate decide its own trust, inclusion, review, and publication rules.", "relationships": [ { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-133", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", "type": "defines", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-134", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-135", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", "type": "context_for", "target": "xananode.example:concept/dispute-resolution", "direction": "outgoing" diff --git a/exampleSite/static/nodes/mother-of-all-demos.json b/exampleSite/static/nodes/mother-of-all-demos.json index f1f10a61..4b9ac1fb 100644 --- a/exampleSite/static/nodes/mother-of-all-demos.json +++ b/exampleSite/static/nodes/mother-of-all-demos.json @@ -7,31 +7,31 @@ "source_url": "https://www.dougengelbart.org/content/view/209/", "relationships": [ { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-24", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", "type": "documents", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-25", + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", "type": "supports", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-61", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", "type": "demonstrates", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-73", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", "type": "presented", "source": "xananode.example:person/douglas-engelbart", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-155", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", "type": "deep_links_to", "source": "xananode.example:concept/fragment-node", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespace-registry.json b/exampleSite/static/nodes/namespace-registry.json index 1f6a0da1..91983c13 100644 --- a/exampleSite/static/nodes/namespace-registry.json +++ b/exampleSite/static/nodes/namespace-registry.json @@ -6,25 +6,25 @@ "summary": "A registry of known namespace identifiers used to avoid collisions and help tools recognize who owns a substrate, schema, or extension vocabulary.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-46", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", "type": "defines", "source": "xananode.example:schema/namespace-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-131", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", "type": "implements", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-132", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-176", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", "type": "requires", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespace-schema.json b/exampleSite/static/nodes/namespace-schema.json index d71e44e1..c6832be8 100644 --- a/exampleSite/static/nodes/namespace-schema.json +++ b/exampleSite/static/nodes/namespace-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema for namespace registry entries.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-46", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", "type": "defines", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-47", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", "type": "supports", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-48", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespacing.json b/exampleSite/static/nodes/namespacing.json index 85c07667..05625fb3 100644 --- a/exampleSite/static/nodes/namespacing.json +++ b/exampleSite/static/nodes/namespacing.json @@ -6,49 +6,49 @@ "summary": "A way to identify which substrate or schema owns a node type, relationship type, node, or fragment.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-47", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", "type": "supports", "source": "xananode.example:schema/namespace-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-114", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", "type": "requires", "source": "xananode.example:concept/substrate-manifest", "direction": "incoming" }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-118", + "id": "xananode.example:rel/namespacing-enables-schema-extension-137", "type": "enables", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-130", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", "type": "clarifies", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-131", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", "type": "implements", "source": "xananode.example:concept/namespace-registry", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-136", + "id": "xananode.example:rel/merge-validation-requires-namespacing-155", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-164", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-189", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", "type": "requires", "source": "xananode.example:concept/canonical-type-policy", "direction": "incoming" diff --git a/exampleSite/static/nodes/nls.json b/exampleSite/static/nodes/nls.json index 780e3f27..1890e716 100644 --- a/exampleSite/static/nodes/nls.json +++ b/exampleSite/static/nodes/nls.json @@ -6,25 +6,25 @@ "summary": "Douglas Engelbart's oN-Line System, an early interactive computing environment for augmenting human intellect.", "relationships": [ { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-24", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", "type": "documents", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-61", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", "type": "demonstrates", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/nls-anticipated-xananode-62", + "id": "xananode.example:rel/nls-anticipated-xananode-81", "type": "anticipated", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-72", + "id": "xananode.example:rel/douglas-engelbart-created-nls-91", "type": "created", "source": "xananode.example:person/douglas-engelbart", "direction": "incoming" diff --git a/exampleSite/static/nodes/project-xanadu.json b/exampleSite/static/nodes/project-xanadu.json index 20929803..afe9282b 100644 --- a/exampleSite/static/nodes/project-xanadu.json +++ b/exampleSite/static/nodes/project-xanadu.json @@ -6,31 +6,31 @@ "summary": "Ted Nelson's long-running hypertext project focused on deep linking, transclusion, versioning, and visible interconnection.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-19", + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", "type": "documents", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-59", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", "type": "defines", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-60", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", "type": "influenced", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-68", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", "type": "created", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-97", + "id": "xananode.example:rel/xananode-extends-project-xanadu-116", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/protocol-artifacts-trail.json b/exampleSite/static/nodes/protocol-artifacts-trail.json index c2879fe3..9f5ee8e9 100644 --- a/exampleSite/static/nodes/protocol-artifacts-trail.json +++ b/exampleSite/static/nodes/protocol-artifacts-trail.json @@ -6,43 +6,43 @@ "summary": "A curated path through the concrete JSON files, reports, registries, and governance documents that make a XanaNode substrate interoperable.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-6", + "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-11", "type": "starts_with", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-7", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-12", "type": "continues_to", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-8", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-13", "type": "continues_to", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-9", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-14", "type": "continues_to", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-10", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-15", "type": "continues_to", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-11", + "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-16", "type": "arrives_at", "target": "xananode.example:concept/federation-example", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-92", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", "type": "continues_to", "source": "xananode.example:essay/start-here", "direction": "incoming" diff --git a/exampleSite/static/nodes/protocol-artifacts.json b/exampleSite/static/nodes/protocol-artifacts.json index 4d8c28e8..37dfa452 100644 --- a/exampleSite/static/nodes/protocol-artifacts.json +++ b/exampleSite/static/nodes/protocol-artifacts.json @@ -6,55 +6,61 @@ "summary": "The machine-readable files and reports that let a XanaNode substrate be validated, compared, merged, and federated.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-4", + "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-9", "type": "continues_to", "source": "xananode.example:trail/xananode-core-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-6", + "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-11", "type": "starts_with", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-86", + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "type": "documents", + "source": "xananode.example:source/xananode-protocol-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", "type": "explains", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-124", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-125", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", "type": "contains", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-126", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", "type": "contains", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-127", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", "type": "contains", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-128", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", "type": "contains", "target": "xananode.example:concept/review-suggestions", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-129", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/provenance.json b/exampleSite/static/nodes/provenance.json index 9fd8b0f0..446de064 100644 --- a/exampleSite/static/nodes/provenance.json +++ b/exampleSite/static/nodes/provenance.json @@ -6,85 +6,85 @@ "summary": "The visible lineage of where information came from, how it changed, who asserted it, and what evidence it depends on.", "relationships": [ { - "id": "xananode.example:rel/link-rot-threatens-provenance-76", + "id": "xananode.example:rel/link-rot-threatens-provenance-95", "type": "threatens", "source": "xananode.example:observation/link-rot", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-preserves-provenance-96", + "id": "xananode.example:rel/xananode-preserves-provenance-115", "type": "preserves", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-99", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", "type": "threatens", "source": "xananode.example:concept/unlabeled-hyperlink", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-104", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", "type": "preserves", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-108", + "id": "xananode.example:rel/transclusion-preserves-provenance-127", "type": "preserves", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-111", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", "type": "preserves", "source": "xananode.example:concept/substrate-relationship-list", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-123", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", "type": "evidence_for", "source": "xananode.example:claim/claim-relationships-preserve-context", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-137", + "id": "xananode.example:rel/merge-validation-requires-provenance-156", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-143", + "id": "xananode.example:rel/merge-report-preserves-provenance-162", "type": "preserves", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-148", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", "type": "requires", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-152", + "id": "xananode.example:rel/independent-moderation-requires-provenance-171", "type": "requires", "source": "xananode.example:concept/independent-moderation", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-154", + "id": "xananode.example:rel/fragment-node-preserves-provenance-173", "type": "preserves", "source": "xananode.example:concept/fragment-node", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-169", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", "type": "requires", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-186", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" diff --git a/exampleSite/static/nodes/review-suggestions.json b/exampleSite/static/nodes/review-suggestions.json index 60cb6229..4c51bbca 100644 --- a/exampleSite/static/nodes/review-suggestions.json +++ b/exampleSite/static/nodes/review-suggestions.json @@ -6,19 +6,19 @@ "summary": "Generated, user-approved suggestions for autolinking node titles, aliases, and repeated fragments without rewriting content automatically.", "relationships": [ { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-121", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", "type": "uses", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-122", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", "type": "uses", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-128", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/schema-extension.json b/exampleSite/static/nodes/schema-extension.json index b13ab154..0735ef52 100644 --- a/exampleSite/static/nodes/schema-extension.json +++ b/exampleSite/static/nodes/schema-extension.json @@ -6,61 +6,61 @@ "summary": "The ability for a substrate to add custom node or relationship types while remaining compatible with XanaNode Core.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-36", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", "type": "enables", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-48", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", "type": "requires", "target": "xananode.example:schema/namespace-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-118", + "id": "xananode.example:rel/namespacing-enables-schema-extension-137", "type": "enables", "source": "xananode.example:concept/namespacing", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-119", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-120", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-130", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", "type": "clarifies", "source": "xananode.example:concept/namespacing", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-132", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", "type": "requires", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-138", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-175", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", "type": "demonstrates", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-188", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", "type": "context_for", "source": "xananode.example:concept/canonical-type-policy", "direction": "incoming" diff --git a/exampleSite/static/nodes/single-source-of-truth.json b/exampleSite/static/nodes/single-source-of-truth.json index 8d4fc207..e3dea821 100644 --- a/exampleSite/static/nodes/single-source-of-truth.json +++ b/exampleSite/static/nodes/single-source-of-truth.json @@ -6,43 +6,43 @@ "summary": "A centralized model where one canonical location or authority controls what is treated as valid.", "relationships": [ { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-90", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", "type": "contrasts_with", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-115", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", "type": "contrasts_with", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-116", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", "type": "threatens", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-117", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", "type": "alternative_to", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-151", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", "type": "contrasts_with", "source": "xananode.example:concept/independent-moderation", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-168", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", "type": "alternative_to", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-195", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", "type": "contradicts", "source": "xananode.example:claim/claim-merge-without-collapse", "direction": "incoming" diff --git a/exampleSite/static/nodes/source-code-link-decay-study.json b/exampleSite/static/nodes/source-code-link-decay-study.json index c2c40180..877aadf0 100644 --- a/exampleSite/static/nodes/source-code-link-decay-study.json +++ b/exampleSite/static/nodes/source-code-link-decay-study.json @@ -8,19 +8,19 @@ "rights_status": "open-access", "relationships": [ { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-22", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", "type": "documents", "target": "xananode.example:observation/link-rot", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-23", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-77", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", "type": "supports", "target": "xananode.example:observation/link-rot", "direction": "outgoing" diff --git a/exampleSite/static/nodes/start-here.json b/exampleSite/static/nodes/start-here.json index fac8faa6..ff4eaa78 100644 --- a/exampleSite/static/nodes/start-here.json +++ b/exampleSite/static/nodes/start-here.json @@ -6,43 +6,43 @@ "summary": "The canonical starting essay for the XanaNode example substrate.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-1", + "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-6", "type": "starts_with", "source": "xananode.example:trail/xananode-core-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-xananode-87", + "id": "xananode.example:rel/start-here-explains-xananode-106", "type": "explains", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-88", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", "type": "explains", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-89", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", "type": "explains", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-90", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", "type": "contrasts_with", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-91", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", "type": "continues_to", "target": "xananode.example:trail/xananode-core-trail", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-92", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", "type": "continues_to", "target": "xananode.example:trail/protocol-artifacts-trail", "direction": "outgoing" diff --git a/exampleSite/static/nodes/static-publishing.json b/exampleSite/static/nodes/static-publishing.json index cbd51363..af702801 100644 --- a/exampleSite/static/nodes/static-publishing.json +++ b/exampleSite/static/nodes/static-publishing.json @@ -6,13 +6,13 @@ "summary": "Publishing files that can be hosted without a dynamic application server.", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-16", + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", "type": "enables", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/hugo-implements-static-publishing-17", + "id": "xananode.example:rel/hugo-implements-static-publishing-22", "type": "implements", "source": "xananode.example:technology/hugo", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-manifest-schema.json b/exampleSite/static/nodes/substrate-manifest-schema.json index 240ae636..a0b71d90 100644 --- a/exampleSite/static/nodes/substrate-manifest-schema.json +++ b/exampleSite/static/nodes/substrate-manifest-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates a XanaNode substrate manifest.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-32", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-43", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", "type": "defines", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-44", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-45", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", "type": "requires", "source": "xananode.example:concept/compatibility-report", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-manifest.json b/exampleSite/static/nodes/substrate-manifest.json index 061b2a4e..d3381b49 100644 --- a/exampleSite/static/nodes/substrate-manifest.json +++ b/exampleSite/static/nodes/substrate-manifest.json @@ -6,37 +6,37 @@ "summary": "The root metadata file that identifies a substrate, its namespace, version, schema version, imports, maintainers, and extension declarations.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-7", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-12", "type": "continues_to", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-43", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", "type": "defines", "source": "xananode.example:schema/substrate-manifest-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-114", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-125", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-177", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", "type": "uses", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-182", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", "type": "requires", "source": "xananode.example:concept/compatibility-levels", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-node-record.json b/exampleSite/static/nodes/substrate-node-record.json index 59a07544..4eb43a28 100644 --- a/exampleSite/static/nodes/substrate-node-record.json +++ b/exampleSite/static/nodes/substrate-node-record.json @@ -6,31 +6,37 @@ "summary": "A JSON representation of a node with a protocol identifier, type, summary, importance, provenance fields, and incoming or outgoing relationship summaries.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-8", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-13", "type": "continues_to", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-40", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "type": "uses", + "source": "xananode.example:source/xananode-core-sdk-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", "type": "defines", "source": "xananode.example:schema/substrate-node-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-112", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", "type": "uses", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-113", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", "type": "contains", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-126", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-node-schema.json b/exampleSite/static/nodes/substrate-node-schema.json index 8f790042..f26b0357 100644 --- a/exampleSite/static/nodes/substrate-node-schema.json +++ b/exampleSite/static/nodes/substrate-node-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates machine-readable XanaNode node records.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-33", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-40", + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", "type": "defines", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-41", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", "type": "uses", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-42", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-relationship-list.json b/exampleSite/static/nodes/substrate-relationship-list.json index 0dc344d4..1706d380 100644 --- a/exampleSite/static/nodes/substrate-relationship-list.json +++ b/exampleSite/static/nodes/substrate-relationship-list.json @@ -6,31 +6,37 @@ "summary": "The protocol-level relationship file containing typed edges with stable ids, source and target ids, summaries, visibility, weights, and assertion provenance.", "relationships": [ { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-9", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-14", "type": "continues_to", "source": "xananode.example:trail/protocol-artifacts-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-37", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "type": "uses", + "source": "xananode.example:source/xananode-core-sdk-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", "type": "defines", "source": "xananode.example:schema/substrate-relationships-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-110", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", "type": "uses", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-111", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-127", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-relationships-schema.json b/exampleSite/static/nodes/substrate-relationships-schema.json index eea37a7b..d2cbb73a 100644 --- a/exampleSite/static/nodes/substrate-relationships-schema.json +++ b/exampleSite/static/nodes/substrate-relationships-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates the protocol relationship list for a substrate.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-34", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-37", + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", "type": "defines", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-38", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", "type": "uses", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-39", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" diff --git a/exampleSite/static/nodes/ted-nelson.json b/exampleSite/static/nodes/ted-nelson.json index 70d05bef..5391e602 100644 --- a/exampleSite/static/nodes/ted-nelson.json +++ b/exampleSite/static/nodes/ted-nelson.json @@ -6,31 +6,31 @@ "summary": "Hypertext theorist and founder of Project Xanadu, associated with transclusion, visible interconnection, and nonsequential writing.", "relationships": [ { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-14", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-19", "type": "continues_to", "source": "xananode.example:trail/historical-lineage-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-68", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", "type": "created", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-69", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", "type": "introduced", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-70", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", "type": "authored", "target": "xananode.example:source/xanadu-document-interconnection", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-71", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", "type": "influenced", "target": "xananode.example:concept/xananode", "direction": "outgoing" diff --git a/exampleSite/static/nodes/transclusion.json b/exampleSite/static/nodes/transclusion.json index 4a3e969c..24d8b6b7 100644 --- a/exampleSite/static/nodes/transclusion.json +++ b/exampleSite/static/nodes/transclusion.json @@ -6,55 +6,55 @@ "summary": "Including a specific versioned fragment by reference rather than copying it, preserving identity, attribution, and revision lineage.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-20", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", "type": "defines", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-59", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", "type": "defines", "source": "xananode.example:project/project-xanadu", "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-69", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", "type": "introduced", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-102", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-108", + "id": "xananode.example:rel/transclusion-preserves-provenance-127", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-109", + "id": "xananode.example:rel/transclusion-uses-fragment-node-128", "type": "uses", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-122", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", "type": "uses", "source": "xananode.example:concept/review-suggestions", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-153", + "id": "xananode.example:rel/transclusion-requires-fragment-node-172", "type": "requires", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-173", + "id": "xananode.example:rel/deep-linking-enables-transclusion-192", "type": "enables", "source": "xananode.example:concept/deep-linking", "direction": "incoming" diff --git a/exampleSite/static/nodes/tumbler-addressing.json b/exampleSite/static/nodes/tumbler-addressing.json index 5b123bf3..2c2517bf 100644 --- a/exampleSite/static/nodes/tumbler-addressing.json +++ b/exampleSite/static/nodes/tumbler-addressing.json @@ -6,37 +6,37 @@ "summary": "Persistent, location-independent addressing for nodes, relationships, revisions, and fragments inside a substrate.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-102", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", "type": "enables", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-103", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", "type": "enables", "target": "xananode.example:concept/deep-linking", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-104", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-105", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", "type": "enables", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-106", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-107", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", "type": "deep_links_to", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" diff --git a/exampleSite/static/nodes/typed-relationships.json b/exampleSite/static/nodes/typed-relationships.json index 376e3589..1b323099 100644 --- a/exampleSite/static/nodes/typed-relationships.json +++ b/exampleSite/static/nodes/typed-relationships.json @@ -6,37 +6,37 @@ "summary": "Explicit relationship meanings that explain why two nodes are connected.", "relationships": [ { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-28", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", "type": "defines", "source": "xananode.example:schema/xananode-relationship-types", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-100", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-101", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-121", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", "type": "uses", "source": "xananode.example:concept/review-suggestions", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-149", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", "type": "requires", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-191", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", "type": "has_claim", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" diff --git a/exampleSite/static/nodes/unlabeled-hyperlink.json b/exampleSite/static/nodes/unlabeled-hyperlink.json index f9bbcb58..70b64747 100644 --- a/exampleSite/static/nodes/unlabeled-hyperlink.json +++ b/exampleSite/static/nodes/unlabeled-hyperlink.json @@ -6,31 +6,31 @@ "summary": "A link that connects two resources without preserving why the connection matters.", "relationships": [ { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-75", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", "type": "demonstrates", "source": "xananode.example:observation/link-rot", "direction": "incoming" }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-99", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", "type": "threatens", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-100", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", "type": "contrasts_with", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-174", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", "type": "contrasts_with", "source": "xananode.example:concept/deep-linking", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-192", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", "type": "contrasts_with", "source": "xananode.example:claim/claim-relationships-preserve-context", "direction": "incoming" diff --git a/exampleSite/static/nodes/vannevar-bush.json b/exampleSite/static/nodes/vannevar-bush.json index 88a9644d..7d0af01c 100644 --- a/exampleSite/static/nodes/vannevar-bush.json +++ b/exampleSite/static/nodes/vannevar-bush.json @@ -6,25 +6,25 @@ "summary": "Engineer and science administrator whose Memex proposal described associative trails as a response to information overload.", "relationships": [ { - "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-12", + "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-17", "type": "starts_with", "source": "xananode.example:trail/historical-lineage-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-65", + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", "type": "authored", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-66", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", "type": "proposed", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-67", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", "type": "anticipated", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" diff --git a/exampleSite/static/nodes/what-is-xananode.json b/exampleSite/static/nodes/what-is-xananode.json index 8c419972..76eb5c6b 100644 --- a/exampleSite/static/nodes/what-is-xananode.json +++ b/exampleSite/static/nodes/what-is-xananode.json @@ -6,31 +6,31 @@ "summary": "XanaNode is a protocol for interoperable knowledge substrates, not merely a graph viewer or static site theme.", "relationships": [ { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-82", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", "type": "defines", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-83", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", "type": "explains", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-84", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", "type": "arrives_at", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-85", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", "type": "context_for", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-86", + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", "type": "explains", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xanadu-document-interconnection.json b/exampleSite/static/nodes/xanadu-document-interconnection.json index b1281c71..3007f2ed 100644 --- a/exampleSite/static/nodes/xanadu-document-interconnection.json +++ b/exampleSite/static/nodes/xanadu-document-interconnection.json @@ -8,31 +8,31 @@ "rights_status": "copyrighted", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-19", + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", "type": "documents", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-20", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", "type": "defines", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-21", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-70", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", "type": "authored", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-190", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", "type": "supports", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-core-schema.json b/exampleSite/static/nodes/xananode-core-schema.json index c3add5b7..75d06096 100644 --- a/exampleSite/static/nodes/xananode-core-schema.json +++ b/exampleSite/static/nodes/xananode-core-schema.json @@ -7,91 +7,121 @@ "summary": "The canonical core node and relationship vocabulary used to make independent substrates interoperable.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-30", + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "type": "uses", + "source": "xananode.example:source/xananode-workspace-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "type": "uses", + "source": "xananode.example:source/xananode-studio-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "type": "defines", + "source": "xananode.example:source/xananode-protocol-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "type": "uses", + "source": "xananode.example:source/xananode-hugo-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "type": "implements", + "source": "xananode.example:source/xananode-core-sdk-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", "type": "defines", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-31", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", "type": "defines", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-32", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", "type": "defines", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-33", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", "type": "defines", "target": "xananode.example:schema/substrate-node-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-34", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", "type": "defines", "target": "xananode.example:schema/substrate-relationships-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-35", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-36", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", "type": "enables", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-39", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", "type": "contains", "target": "xananode.example:schema/substrate-relationships-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-42", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", "type": "contains", "target": "xananode.example:schema/substrate-node-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-44", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", "type": "contains", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-95", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", "type": "requires", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-119", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-124", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", "type": "defines", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-150", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", "type": "enables", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-194", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-core-sdk-repo.json b/exampleSite/static/nodes/xananode-core-sdk-repo.json new file mode 100644 index 00000000..3d6c7780 --- /dev/null +++ b/exampleSite/static/nodes/xananode-core-sdk-repo.json @@ -0,0 +1,35 @@ +{ + "id": "xananode.example:source/xananode-core-sdk-repo", + "title": "XanaNode Core SDK Repository", + "type": "source", + "importance": 5, + "summary": "The reusable Core SDK repository for building, validating, and exporting XanaNode protocol artifacts across renderers and tools.", + "source_url": "https://github.com/kingc95/XanaNode-Core-SDK", + "rights_status": "open-source", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-core-sdk-repo-2", + "type": "continues_to", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "type": "implements", + "target": "xananode.example:schema/xananode-core-schema", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "type": "uses", + "target": "xananode.example:concept/substrate-node-record", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "type": "uses", + "target": "xananode.example:concept/substrate-relationship-list", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/xananode-core-trail.json b/exampleSite/static/nodes/xananode-core-trail.json index 85ffeecc..f649f4af 100644 --- a/exampleSite/static/nodes/xananode-core-trail.json +++ b/exampleSite/static/nodes/xananode-core-trail.json @@ -6,37 +6,37 @@ "summary": "A curated path through the core concepts that define XanaNode.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-1", + "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-6", "type": "starts_with", "target": "xananode.example:essay/start-here", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-2", + "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-7", "type": "continues_to", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-3", + "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-8", "type": "continues_to", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-4", + "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-9", "type": "continues_to", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-5", + "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-10", "type": "arrives_at", "target": "xananode.example:concept/civilizational-memory", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-91", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", "type": "continues_to", "source": "xananode.example:essay/start-here", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-hugo-repo.json b/exampleSite/static/nodes/xananode-hugo-repo.json new file mode 100644 index 00000000..d38ec314 --- /dev/null +++ b/exampleSite/static/nodes/xananode-hugo-repo.json @@ -0,0 +1,35 @@ +{ + "id": "xananode.example:source/xananode-hugo-repo", + "title": "XanaNode Hugo Repository", + "type": "source", + "importance": 5, + "summary": "The Hugo theme repository that publishes XanaNode substrates as static websites while using Core for protocol validation.", + "source_url": "https://github.com/kingc95/XanaNode-Hugo", + "rights_status": "open-source", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-hugo-repo-3", + "type": "continues_to", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "type": "implements", + "target": "xananode.example:project/xananode-hugo-theme", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "type": "uses", + "target": "xananode.example:technology/hugo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "type": "uses", + "target": "xananode.example:schema/xananode-core-schema", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/xananode-hugo-theme.json b/exampleSite/static/nodes/xananode-hugo-theme.json index ecf107e7..cbb252a6 100644 --- a/exampleSite/static/nodes/xananode-hugo-theme.json +++ b/exampleSite/static/nodes/xananode-hugo-theme.json @@ -8,55 +8,67 @@ "primary_media": "xananode.example:media/xananode-icon", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-16", + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", "type": "enables", "target": "xananode.example:technology/static-publishing", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-55", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "type": "uses", + "source": "xananode.example:source/xananode-studio-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "type": "implements", + "source": "xananode.example:source/xananode-hugo-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", "type": "implements", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-56", + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", "type": "uses", "target": "xananode.example:technology/hugo", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-57", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", "type": "uses", "target": "xananode.example:technology/cytoscape-js", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-58", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", "type": "demonstrates", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-79", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", "type": "has_primary_media", "target": "xananode.example:media/xananode-icon", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-80", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", "type": "depicts", "source": "xananode.example:media/xananode-icon", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-83", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", "type": "explains", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-145", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", "type": "documents", "source": "xananode.example:concept/known-implementations-registry", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-icon.json b/exampleSite/static/nodes/xananode-icon.json index aec671bc..93c3add8 100644 --- a/exampleSite/static/nodes/xananode-icon.json +++ b/exampleSite/static/nodes/xananode-icon.json @@ -8,19 +8,19 @@ "rights_status": "open-source", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-79", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", "type": "has_primary_media", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-80", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", "type": "depicts", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-81", + "id": "xananode.example:rel/xananode-icon-represents-xananode-100", "type": "represents", "target": "xananode.example:concept/xananode", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-implementation-stack-trail.json b/exampleSite/static/nodes/xananode-implementation-stack-trail.json new file mode 100644 index 00000000..9e59273c --- /dev/null +++ b/exampleSite/static/nodes/xananode-implementation-stack-trail.json @@ -0,0 +1,39 @@ +{ + "id": "xananode.example:trail/xananode-implementation-stack-trail", + "title": "XanaNode Implementation Stack Trail", + "type": "trail", + "importance": 5, + "summary": "A curated path through the XanaNode repositories in dependency order: Protocol, Core SDK, Hugo, Workspace, and Studio.", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-starts_with-xananode-protocol-repo-1", + "type": "starts_with", + "target": "xananode.example:source/xananode-protocol-repo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-core-sdk-repo-2", + "type": "continues_to", + "target": "xananode.example:source/xananode-core-sdk-repo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-hugo-repo-3", + "type": "continues_to", + "target": "xananode.example:source/xananode-hugo-repo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-workspace-repo-4", + "type": "continues_to", + "target": "xananode.example:source/xananode-workspace-repo", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-arrives_at-xananode-studio-repo-5", + "type": "arrives_at", + "target": "xananode.example:source/xananode-studio-repo", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/xananode-node-types.json b/exampleSite/static/nodes/xananode-node-types.json index 877ea4a0..75ce3bda 100644 --- a/exampleSite/static/nodes/xananode-node-types.json +++ b/exampleSite/static/nodes/xananode-node-types.json @@ -7,25 +7,25 @@ "summary": "The canonical node type registry for XanaNode substrates.", "relationships": [ { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-29", + "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", "type": "defines", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-30", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-41", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", "type": "uses", "source": "xananode.example:schema/substrate-node-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-112", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", "type": "uses", "source": "xananode.example:concept/substrate-node-record", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-protocol-repo.json b/exampleSite/static/nodes/xananode-protocol-repo.json new file mode 100644 index 00000000..0fd6646e --- /dev/null +++ b/exampleSite/static/nodes/xananode-protocol-repo.json @@ -0,0 +1,35 @@ +{ + "id": "xananode.example:source/xananode-protocol-repo", + "title": "XanaNode Protocol Repository", + "type": "source", + "importance": 5, + "summary": "The canonical XanaNode protocol repository containing schemas, registries, examples, specs, governance, and proposals.", + "source_url": "https://github.com/kingc95/xananode", + "rights_status": "open-source", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-starts_with-xananode-protocol-repo-1", + "type": "starts_with", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "type": "defines", + "target": "xananode.example:concept/xananode", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "type": "defines", + "target": "xananode.example:schema/xananode-core-schema", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "type": "documents", + "target": "xananode.example:concept/protocol-artifacts", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/xananode-relationship-types.json b/exampleSite/static/nodes/xananode-relationship-types.json index 5fe67029..7c68a43f 100644 --- a/exampleSite/static/nodes/xananode-relationship-types.json +++ b/exampleSite/static/nodes/xananode-relationship-types.json @@ -7,25 +7,25 @@ "summary": "The canonical relationship type registry for XanaNode substrates.", "relationships": [ { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-28", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", "type": "defines", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-31", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-38", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", "type": "uses", "source": "xananode.example:schema/substrate-relationships-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-110", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", "type": "uses", "source": "xananode.example:concept/substrate-relationship-list", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-studio-repo.json b/exampleSite/static/nodes/xananode-studio-repo.json new file mode 100644 index 00000000..2397ef3d --- /dev/null +++ b/exampleSite/static/nodes/xananode-studio-repo.json @@ -0,0 +1,35 @@ +{ + "id": "xananode.example:source/xananode-studio-repo", + "title": "XanaNode Studio Repository", + "type": "source", + "importance": 4, + "summary": "The desktop workbench repository for editing, previewing, validating, and navigating local XanaNode substrates.", + "source_url": "https://github.com/kingc95/XanaNode-Studio", + "rights_status": "open-source", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-arrives_at-xananode-studio-repo-5", + "type": "arrives_at", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "type": "uses", + "target": "xananode.example:schema/xananode-core-schema", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "type": "uses", + "target": "xananode.example:project/xananode-hugo-theme", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "type": "demonstrates", + "target": "xananode.example:concept/knowledge-substrate", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/xananode-workspace-repo.json b/exampleSite/static/nodes/xananode-workspace-repo.json new file mode 100644 index 00000000..7b4d49b9 --- /dev/null +++ b/exampleSite/static/nodes/xananode-workspace-repo.json @@ -0,0 +1,29 @@ +{ + "id": "xananode.example:source/xananode-workspace-repo", + "title": "XanaNode Workspace Repository", + "type": "source", + "importance": 4, + "summary": "The workspace orchestration repository for managing multiple local XanaNode substrates, imports, Git state, and build workflows.", + "source_url": "https://github.com/kingc95/XanaNode-Workspace", + "rights_status": "open-source", + "relationships": [ + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-workspace-repo-4", + "type": "continues_to", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "type": "uses", + "target": "xananode.example:schema/xananode-core-schema", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "type": "requires", + "source": "xananode.example:concept/federated-knowledge-substrates", + "direction": "incoming" + } + ] +} diff --git a/exampleSite/static/nodes/xananode.json b/exampleSite/static/nodes/xananode.json index 3c112be7..355ee70c 100644 --- a/exampleSite/static/nodes/xananode.json +++ b/exampleSite/static/nodes/xananode.json @@ -7,115 +7,121 @@ "primary_media": "xananode.example:media/xananode-icon", "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-2", + "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-7", "type": "continues_to", "source": "xananode.example:trail/xananode-core-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-15", + "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-20", "type": "arrives_at", "source": "xananode.example:trail/historical-lineage-trail", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-29", + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "type": "defines", + "source": "xananode.example:source/xananode-protocol-repo", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", "type": "defines", "source": "xananode.example:schema/xananode-node-types", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-55", + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", "type": "implements", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-60", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", "type": "influenced", "source": "xananode.example:project/project-xanadu", "direction": "incoming" }, { - "id": "xananode.example:rel/nls-anticipated-xananode-62", + "id": "xananode.example:rel/nls-anticipated-xananode-81", "type": "anticipated", "source": "xananode.example:project/nls", "direction": "incoming" }, { - "id": "xananode.example:rel/memex-anticipated-xananode-64", + "id": "xananode.example:rel/memex-anticipated-xananode-83", "type": "anticipated", "source": "xananode.example:project/memex", "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-71", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", "type": "influenced", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-74", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", "type": "extends", "target": "xananode.example:person/douglas-engelbart", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-81", + "id": "xananode.example:rel/xananode-icon-represents-xananode-100", "type": "represents", "source": "xananode.example:media/xananode-icon", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-82", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", "type": "defines", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-xananode-87", + "id": "xananode.example:rel/start-here-explains-xananode-106", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-93", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", "type": "defines", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-94", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", "type": "explains", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-95", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-preserves-provenance-96", + "id": "xananode.example:rel/xananode-preserves-provenance-115", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-97", + "id": "xananode.example:rel/xananode-extends-project-xanadu-116", "type": "extends", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-memex-98", + "id": "xananode.example:rel/xananode-extends-memex-117", "type": "extends", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-106", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", "type": "extends", "target": "xananode.example:concept/tumbler-addressing", "direction": "outgoing" diff --git a/exampleSite/static/relationships.json b/exampleSite/static/relationships.json index ef77da89..67876e9d 100644 --- a/exampleSite/static/relationships.json +++ b/exampleSite/static/relationships.json @@ -1,7 +1,52 @@ { "relationships": [ { - "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-1", + "id": "xananode.example:rel/xananode-implementation-stack-trail-starts_with-xananode-protocol-repo-1", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "target": "xananode.example:source/xananode-protocol-repo", + "type": "starts_with", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Implementation Stack Trail starts with XanaNode Protocol Repository." + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-core-sdk-repo-2", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "target": "xananode.example:source/xananode-core-sdk-repo", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Implementation Stack Trail continues to XanaNode Core SDK Repository." + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-hugo-repo-3", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "target": "xananode.example:source/xananode-hugo-repo", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Implementation Stack Trail continues to XanaNode Hugo Repository." + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-continues_to-xananode-workspace-repo-4", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "target": "xananode.example:source/xananode-workspace-repo", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Implementation Stack Trail continues to XanaNode Workspace Repository." + }, + { + "id": "xananode.example:rel/xananode-implementation-stack-trail-arrives_at-xananode-studio-repo-5", + "source": "xananode.example:trail/xananode-implementation-stack-trail", + "target": "xananode.example:source/xananode-studio-repo", + "type": "arrives_at", + "weight": 4, + "visibility": "primary", + "summary": "XanaNode Implementation Stack Trail arrives at XanaNode Studio Repository." + }, + { + "id": "xananode.example:rel/xananode-core-trail-starts_with-start-here-6", "source": "xananode.example:trail/xananode-core-trail", "target": "xananode.example:essay/start-here", "type": "starts_with", @@ -10,7 +55,7 @@ "summary": "XanaNode Core Trail starts with Start Here." }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-2", + "id": "xananode.example:rel/xananode-core-trail-continues_to-xananode-7", "source": "xananode.example:trail/xananode-core-trail", "target": "xananode.example:concept/xananode", "type": "continues_to", @@ -19,7 +64,7 @@ "summary": "XanaNode Core Trail continues to XanaNode." }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-3", + "id": "xananode.example:rel/xananode-core-trail-continues_to-knowledge-substrate-8", "source": "xananode.example:trail/xananode-core-trail", "target": "xananode.example:concept/knowledge-substrate", "type": "continues_to", @@ -28,7 +73,7 @@ "summary": "XanaNode Core Trail continues to Knowledge Substrate." }, { - "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-4", + "id": "xananode.example:rel/xananode-core-trail-continues_to-protocol-artifacts-9", "source": "xananode.example:trail/xananode-core-trail", "target": "xananode.example:concept/protocol-artifacts", "type": "continues_to", @@ -37,7 +82,7 @@ "summary": "XanaNode Core Trail continues to Protocol Artifacts." }, { - "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-5", + "id": "xananode.example:rel/xananode-core-trail-arrives_at-civilizational-memory-10", "source": "xananode.example:trail/xananode-core-trail", "target": "xananode.example:concept/civilizational-memory", "type": "arrives_at", @@ -46,7 +91,7 @@ "summary": "XanaNode Core Trail arrives at Civilizational Memory." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-6", + "id": "xananode.example:rel/protocol-artifacts-trail-starts_with-protocol-artifacts-11", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/protocol-artifacts", "type": "starts_with", @@ -55,7 +100,7 @@ "summary": "Protocol Artifacts Trail starts with Protocol Artifacts." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-7", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-manifest-12", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/substrate-manifest", "type": "continues_to", @@ -64,7 +109,7 @@ "summary": "Protocol Artifacts Trail continues to Substrate Manifest." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-8", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-node-record-13", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/substrate-node-record", "type": "continues_to", @@ -73,7 +118,7 @@ "summary": "Protocol Artifacts Trail continues to Substrate Node Record." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-9", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-substrate-relationship-list-14", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/substrate-relationship-list", "type": "continues_to", @@ -82,7 +127,7 @@ "summary": "Protocol Artifacts Trail continues to Substrate Relationship List." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-10", + "id": "xananode.example:rel/protocol-artifacts-trail-continues_to-compatibility-levels-15", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/compatibility-levels", "type": "continues_to", @@ -91,7 +136,7 @@ "summary": "Protocol Artifacts Trail continues to Compatibility Levels." }, { - "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-11", + "id": "xananode.example:rel/protocol-artifacts-trail-arrives_at-federation-example-16", "source": "xananode.example:trail/protocol-artifacts-trail", "target": "xananode.example:concept/federation-example", "type": "arrives_at", @@ -100,7 +145,7 @@ "summary": "Protocol Artifacts Trail arrives at Federation Example." }, { - "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-12", + "id": "xananode.example:rel/historical-lineage-trail-starts_with-vannevar-bush-17", "source": "xananode.example:trail/historical-lineage-trail", "target": "xananode.example:person/vannevar-bush", "type": "starts_with", @@ -109,7 +154,7 @@ "summary": "Historical Lineage Trail starts with Vannevar Bush." }, { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-13", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-douglas-engelbart-18", "source": "xananode.example:trail/historical-lineage-trail", "target": "xananode.example:person/douglas-engelbart", "type": "continues_to", @@ -118,7 +163,7 @@ "summary": "Historical Lineage Trail continues to Douglas Engelbart." }, { - "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-14", + "id": "xananode.example:rel/historical-lineage-trail-continues_to-ted-nelson-19", "source": "xananode.example:trail/historical-lineage-trail", "target": "xananode.example:person/ted-nelson", "type": "continues_to", @@ -127,7 +172,7 @@ "summary": "Historical Lineage Trail continues to Ted Nelson." }, { - "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-15", + "id": "xananode.example:rel/historical-lineage-trail-arrives_at-xananode-20", "source": "xananode.example:trail/historical-lineage-trail", "target": "xananode.example:concept/xananode", "type": "arrives_at", @@ -136,7 +181,7 @@ "summary": "Historical Lineage Trail arrives at XanaNode." }, { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-16", + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/static-publishing", "type": "enables", @@ -145,7 +190,7 @@ "summary": "XanaNode Hugo Theme enables Static Publishing." }, { - "id": "xananode.example:rel/hugo-implements-static-publishing-17", + "id": "xananode.example:rel/hugo-implements-static-publishing-22", "source": "xananode.example:technology/hugo", "target": "xananode.example:technology/static-publishing", "type": "implements", @@ -154,7 +199,7 @@ "summary": "Hugo implements Static Publishing." }, { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-18", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", "source": "xananode.example:technology/cytoscape-js", "target": "xananode.example:concept/knowledge-substrate", "type": "represents", @@ -163,7 +208,133 @@ "summary": "Cytoscape.js represents Knowledge Substrate." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-19", + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "source": "xananode.example:source/xananode-workspace-repo", + "target": "xananode.example:schema/xananode-core-schema", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Workspace Repository uses XanaNode Core Schema." + }, + { + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "source": "xananode.example:concept/federated-knowledge-substrates", + "target": "xananode.example:source/xananode-workspace-repo", + "type": "requires", + "weight": 4, + "visibility": "primary", + "summary": "Federated Knowledge Substrates requires XanaNode Workspace Repository." + }, + { + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "source": "xananode.example:source/xananode-studio-repo", + "target": "xananode.example:schema/xananode-core-schema", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Studio Repository uses XanaNode Core Schema." + }, + { + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "source": "xananode.example:source/xananode-studio-repo", + "target": "xananode.example:project/xananode-hugo-theme", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Studio Repository uses XanaNode Hugo Theme." + }, + { + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "source": "xananode.example:source/xananode-studio-repo", + "target": "xananode.example:concept/knowledge-substrate", + "type": "demonstrates", + "weight": 4, + "visibility": "primary", + "summary": "XanaNode Studio Repository demonstrates Knowledge Substrate." + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "source": "xananode.example:source/xananode-protocol-repo", + "target": "xananode.example:concept/xananode", + "type": "defines", + "weight": 5, + "visibility": "primary", + "summary": "XanaNode Protocol Repository defines XanaNode." + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "source": "xananode.example:source/xananode-protocol-repo", + "target": "xananode.example:schema/xananode-core-schema", + "type": "defines", + "weight": 5, + "visibility": "primary", + "summary": "XanaNode Protocol Repository defines XanaNode Core Schema." + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "source": "xananode.example:source/xananode-protocol-repo", + "target": "xananode.example:concept/protocol-artifacts", + "type": "documents", + "weight": 4, + "visibility": "primary", + "summary": "XanaNode Protocol Repository documents Protocol Artifacts." + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "source": "xananode.example:source/xananode-hugo-repo", + "target": "xananode.example:project/xananode-hugo-theme", + "type": "implements", + "weight": 5, + "visibility": "primary", + "summary": "XanaNode Hugo Repository implements XanaNode Hugo Theme." + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "source": "xananode.example:source/xananode-hugo-repo", + "target": "xananode.example:technology/hugo", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Hugo Repository uses Hugo." + }, + { + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "source": "xananode.example:source/xananode-hugo-repo", + "target": "xananode.example:schema/xananode-core-schema", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Hugo Repository uses XanaNode Core Schema." + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "source": "xananode.example:source/xananode-core-sdk-repo", + "target": "xananode.example:schema/xananode-core-schema", + "type": "implements", + "weight": 5, + "visibility": "primary", + "summary": "XanaNode Core SDK Repository implements XanaNode Core Schema." + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "source": "xananode.example:source/xananode-core-sdk-repo", + "target": "xananode.example:concept/substrate-node-record", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Core SDK Repository uses Substrate Node Record." + }, + { + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "source": "xananode.example:source/xananode-core-sdk-repo", + "target": "xananode.example:concept/substrate-relationship-list", + "type": "uses", + "weight": 3, + "visibility": "secondary", + "summary": "XanaNode Core SDK Repository uses Substrate Relationship List." + }, + { + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:project/project-xanadu", "type": "documents", @@ -172,7 +343,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use documents Project Xanadu." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-20", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:concept/transclusion", "type": "defines", @@ -181,7 +352,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use defines Transclusion." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-21", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -190,7 +361,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-22", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:observation/link-rot", "type": "documents", @@ -199,7 +370,7 @@ "summary": "9.6 Million Links in Source Code Comments documents Link Rot." }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-23", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -208,7 +379,7 @@ "summary": "9.6 Million Links in Source Code Comments supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-24", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:project/nls", "type": "documents", @@ -217,7 +388,7 @@ "summary": "Mother of All Demos documents NLS." }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-25", + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:concept/knowledge-substrate", "type": "supports", @@ -226,7 +397,7 @@ "summary": "Mother of All Demos supports Knowledge Substrate." }, { - "id": "xananode.example:rel/as-we-may-think-documents-memex-26", + "id": "xananode.example:rel/as-we-may-think-documents-memex-45", "source": "xananode.example:source/as-we-may-think", "target": "xananode.example:project/memex", "type": "documents", @@ -235,7 +406,7 @@ "summary": "As We May Think documents Memex." }, { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-27", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", "source": "xananode.example:source/as-we-may-think", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "supports", @@ -244,7 +415,7 @@ "summary": "As We May Think supports A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-28", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", "source": "xananode.example:schema/xananode-relationship-types", "target": "xananode.example:concept/typed-relationships", "type": "defines", @@ -253,7 +424,7 @@ "summary": "XanaNode Relationship Types defines Typed Relationships." }, { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-29", + "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", "source": "xananode.example:schema/xananode-node-types", "target": "xananode.example:concept/xananode", "type": "defines", @@ -262,7 +433,7 @@ "summary": "XanaNode Node Types defines XanaNode." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-30", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/xananode-node-types", "type": "defines", @@ -271,7 +442,7 @@ "summary": "XanaNode Core Schema defines XanaNode Node Types." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-31", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/xananode-relationship-types", "type": "defines", @@ -280,7 +451,7 @@ "summary": "XanaNode Core Schema defines XanaNode Relationship Types." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-32", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-manifest-schema", "type": "defines", @@ -289,7 +460,7 @@ "summary": "XanaNode Core Schema defines Substrate Manifest Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-33", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-node-schema", "type": "defines", @@ -298,7 +469,7 @@ "summary": "XanaNode Core Schema defines Substrate Node Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-34", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-relationships-schema", "type": "defines", @@ -307,7 +478,7 @@ "summary": "XanaNode Core Schema defines Substrate Relationships Schema." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-35", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -316,7 +487,7 @@ "summary": "Federated Knowledge Substrates requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-36", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/schema-extension", "type": "enables", @@ -325,7 +496,7 @@ "summary": "XanaNode Core Schema enables Schema Extension." }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-37", + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", "source": "xananode.example:schema/substrate-relationships-schema", "target": "xananode.example:concept/substrate-relationship-list", "type": "defines", @@ -334,7 +505,7 @@ "summary": "Substrate Relationships Schema defines Substrate Relationship List." }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-38", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", "source": "xananode.example:schema/substrate-relationships-schema", "target": "xananode.example:schema/xananode-relationship-types", "type": "uses", @@ -343,7 +514,7 @@ "summary": "Substrate Relationships Schema uses XanaNode Relationship Types." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-39", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-relationships-schema", "type": "contains", @@ -352,7 +523,7 @@ "summary": "XanaNode Core Schema contains Substrate Relationships Schema." }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-40", + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", "source": "xananode.example:schema/substrate-node-schema", "target": "xananode.example:concept/substrate-node-record", "type": "defines", @@ -361,7 +532,7 @@ "summary": "Substrate Node Schema defines Substrate Node Record." }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-41", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", "source": "xananode.example:schema/substrate-node-schema", "target": "xananode.example:schema/xananode-node-types", "type": "uses", @@ -370,7 +541,7 @@ "summary": "Substrate Node Schema uses XanaNode Node Types." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-42", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-node-schema", "type": "contains", @@ -379,7 +550,7 @@ "summary": "XanaNode Core Schema contains Substrate Node Schema." }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-43", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", "source": "xananode.example:schema/substrate-manifest-schema", "target": "xananode.example:concept/substrate-manifest", "type": "defines", @@ -388,7 +559,7 @@ "summary": "Substrate Manifest Schema defines Substrate Manifest." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-44", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-manifest-schema", "type": "contains", @@ -397,7 +568,7 @@ "summary": "XanaNode Core Schema contains Substrate Manifest Schema." }, { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-45", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", "source": "xananode.example:concept/compatibility-report", "target": "xananode.example:schema/substrate-manifest-schema", "type": "requires", @@ -406,7 +577,7 @@ "summary": "Compatibility Report requires Substrate Manifest Schema." }, { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-46", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", "source": "xananode.example:schema/namespace-schema", "target": "xananode.example:concept/namespace-registry", "type": "defines", @@ -415,7 +586,7 @@ "summary": "Namespace Schema defines Namespace Registry." }, { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-47", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", "source": "xananode.example:schema/namespace-schema", "target": "xananode.example:concept/namespacing", "type": "supports", @@ -424,7 +595,7 @@ "summary": "Namespace Schema supports Namespacing." }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-48", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:schema/namespace-schema", "type": "requires", @@ -433,7 +604,7 @@ "summary": "Schema Extension requires Namespace Schema." }, { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-49", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", "source": "xananode.example:schema/merge-report-schema", "target": "xananode.example:concept/merge-report", "type": "defines", @@ -442,7 +613,7 @@ "summary": "Merge Report Schema defines Merge Report." }, { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-50", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", "source": "xananode.example:schema/merge-report-schema", "target": "xananode.example:concept/merge-validation", "type": "documents", @@ -451,7 +622,7 @@ "summary": "Merge Report Schema documents Merge Validation." }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-51", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", "source": "xananode.example:concept/federation-example", "target": "xananode.example:schema/merge-report-schema", "type": "requires", @@ -460,7 +631,7 @@ "summary": "Federation Example requires Merge Report Schema." }, { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-52", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", "source": "xananode.example:schema/compatibility-report-schema", "target": "xananode.example:concept/compatibility-report", "type": "defines", @@ -469,7 +640,7 @@ "summary": "Compatibility Report Schema defines Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-53", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", "source": "xananode.example:schema/compatibility-report-schema", "target": "xananode.example:concept/compatibility-levels", "type": "documents", @@ -478,7 +649,7 @@ "summary": "Compatibility Report Schema documents Compatibility Levels." }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-54", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", "source": "xananode.example:concept/federation-example", "target": "xananode.example:schema/compatibility-report-schema", "type": "requires", @@ -487,7 +658,7 @@ "summary": "Federation Example requires Compatibility Report Schema." }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-55", + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:concept/xananode", "type": "implements", @@ -496,7 +667,7 @@ "summary": "XanaNode Hugo Theme implements XanaNode." }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-56", + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/hugo", "type": "uses", @@ -505,7 +676,7 @@ "summary": "XanaNode Hugo Theme uses Hugo." }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-57", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/cytoscape-js", "type": "uses", @@ -514,7 +685,7 @@ "summary": "XanaNode Hugo Theme uses Cytoscape.js." }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-58", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:concept/knowledge-substrate", "type": "demonstrates", @@ -523,7 +694,7 @@ "summary": "XanaNode Hugo Theme demonstrates Knowledge Substrate." }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-59", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", "source": "xananode.example:project/project-xanadu", "target": "xananode.example:concept/transclusion", "type": "defines", @@ -532,7 +703,7 @@ "summary": "Project Xanadu defines Transclusion." }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-60", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", "source": "xananode.example:project/project-xanadu", "target": "xananode.example:concept/xananode", "type": "influenced", @@ -541,7 +712,7 @@ "summary": "Project Xanadu influenced XanaNode." }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-61", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:project/nls", "type": "demonstrates", @@ -550,7 +721,7 @@ "summary": "Mother of All Demos demonstrates NLS." }, { - "id": "xananode.example:rel/nls-anticipated-xananode-62", + "id": "xananode.example:rel/nls-anticipated-xananode-81", "source": "xananode.example:project/nls", "target": "xananode.example:concept/xananode", "type": "anticipated", @@ -559,7 +730,7 @@ "summary": "NLS anticipated XanaNode." }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-63", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", "source": "xananode.example:project/memex", "target": "xananode.example:source/as-we-may-think", "type": "introduced_in", @@ -568,7 +739,7 @@ "summary": "Memex introduced in As We May Think." }, { - "id": "xananode.example:rel/memex-anticipated-xananode-64", + "id": "xananode.example:rel/memex-anticipated-xananode-83", "source": "xananode.example:project/memex", "target": "xananode.example:concept/xananode", "type": "anticipated", @@ -577,7 +748,7 @@ "summary": "Memex anticipated XanaNode." }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-65", + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:source/as-we-may-think", "type": "authored", @@ -586,7 +757,7 @@ "summary": "Vannevar Bush authored As We May Think." }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-66", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:project/memex", "type": "proposed", @@ -595,7 +766,7 @@ "summary": "Vannevar Bush proposed Memex." }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-67", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:concept/knowledge-substrate", "type": "anticipated", @@ -604,7 +775,7 @@ "summary": "Vannevar Bush anticipated Knowledge Substrate." }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-68", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:project/project-xanadu", "type": "created", @@ -613,7 +784,7 @@ "summary": "Ted Nelson created Project Xanadu." }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-69", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:concept/transclusion", "type": "introduced", @@ -622,7 +793,7 @@ "summary": "Ted Nelson introduced Transclusion." }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-70", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:source/xanadu-document-interconnection", "type": "authored", @@ -631,7 +802,7 @@ "summary": "Ted Nelson authored Xanadu: Document Interconnection Enabling Re-use." }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-71", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:concept/xananode", "type": "influenced", @@ -640,7 +811,7 @@ "summary": "Ted Nelson influenced XanaNode." }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-72", + "id": "xananode.example:rel/douglas-engelbart-created-nls-91", "source": "xananode.example:person/douglas-engelbart", "target": "xananode.example:project/nls", "type": "created", @@ -649,7 +820,7 @@ "summary": "Douglas Engelbart created NLS." }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-73", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", "source": "xananode.example:person/douglas-engelbart", "target": "xananode.example:source/mother-of-all-demos", "type": "presented", @@ -658,7 +829,7 @@ "summary": "Douglas Engelbart presented Mother of All Demos." }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-74", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", "source": "xananode.example:concept/xananode", "target": "xananode.example:person/douglas-engelbart", "type": "extends", @@ -667,7 +838,7 @@ "summary": "XanaNode extends Douglas Engelbart." }, { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-75", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", "source": "xananode.example:observation/link-rot", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "demonstrates", @@ -676,7 +847,7 @@ "summary": "Link Rot demonstrates Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/link-rot-threatens-provenance-76", + "id": "xananode.example:rel/link-rot-threatens-provenance-95", "source": "xananode.example:observation/link-rot", "target": "xananode.example:concept/provenance", "type": "threatens", @@ -685,7 +856,7 @@ "summary": "Link Rot threatens Provenance." }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-77", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:observation/link-rot", "type": "supports", @@ -694,7 +865,7 @@ "summary": "9.6 Million Links in Source Code Comments supports Link Rot." }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-78", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:observation/link-rot", "type": "explains", @@ -703,7 +874,7 @@ "summary": "Knowledge Substrate explains Link Rot." }, { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-79", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:media/xananode-icon", "type": "has_primary_media", @@ -712,7 +883,7 @@ "summary": "XanaNode Hugo Theme has primary media XanaNode Icon." }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-80", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", "source": "xananode.example:media/xananode-icon", "target": "xananode.example:project/xananode-hugo-theme", "type": "depicts", @@ -721,7 +892,7 @@ "summary": "XanaNode Icon depicts XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-81", + "id": "xananode.example:rel/xananode-icon-represents-xananode-100", "source": "xananode.example:media/xananode-icon", "target": "xananode.example:concept/xananode", "type": "represents", @@ -730,7 +901,7 @@ "summary": "XanaNode Icon represents XanaNode." }, { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-82", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/xananode", "type": "defines", @@ -739,7 +910,7 @@ "summary": "What Is XanaNode? defines XanaNode." }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-83", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:project/xananode-hugo-theme", "type": "explains", @@ -748,7 +919,7 @@ "summary": "What Is XanaNode? explains XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-84", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "arrives_at", @@ -757,7 +928,7 @@ "summary": "What Is XanaNode? arrives at Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-85", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "context_for", @@ -766,7 +937,7 @@ "summary": "What Is XanaNode? context for Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-86", + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/protocol-artifacts", "type": "explains", @@ -775,7 +946,7 @@ "summary": "What Is XanaNode? explains Protocol Artifacts." }, { - "id": "xananode.example:rel/start-here-explains-xananode-87", + "id": "xananode.example:rel/start-here-explains-xananode-106", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/xananode", "type": "explains", @@ -784,7 +955,7 @@ "summary": "Start Here explains XanaNode." }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-88", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/knowledge-substrate", "type": "explains", @@ -793,7 +964,7 @@ "summary": "Start Here explains Knowledge Substrate." }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-89", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "explains", @@ -802,7 +973,7 @@ "summary": "Start Here explains Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-90", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/single-source-of-truth", "type": "contrasts_with", @@ -811,7 +982,7 @@ "summary": "Start Here contrasts with Single Source of Truth." }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-91", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", "source": "xananode.example:essay/start-here", "target": "xananode.example:trail/xananode-core-trail", "type": "continues_to", @@ -820,7 +991,7 @@ "summary": "Start Here continues to XanaNode Core Trail." }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-92", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", "source": "xananode.example:essay/start-here", "target": "xananode.example:trail/protocol-artifacts-trail", "type": "continues_to", @@ -829,7 +1000,7 @@ "summary": "Start Here continues to Protocol Artifacts Trail." }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-93", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/knowledge-substrate", "type": "defines", @@ -838,7 +1009,7 @@ "summary": "XanaNode defines Knowledge Substrate." }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-94", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "explains", @@ -847,7 +1018,7 @@ "summary": "XanaNode explains Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-95", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", "source": "xananode.example:concept/xananode", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -856,7 +1027,7 @@ "summary": "XanaNode requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-preserves-provenance-96", + "id": "xananode.example:rel/xananode-preserves-provenance-115", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -865,7 +1036,7 @@ "summary": "XanaNode preserves Provenance." }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-97", + "id": "xananode.example:rel/xananode-extends-project-xanadu-116", "source": "xananode.example:concept/xananode", "target": "xananode.example:project/project-xanadu", "type": "extends", @@ -874,7 +1045,7 @@ "summary": "XanaNode extends Project Xanadu." }, { - "id": "xananode.example:rel/xananode-extends-memex-98", + "id": "xananode.example:rel/xananode-extends-memex-117", "source": "xananode.example:concept/xananode", "target": "xananode.example:project/memex", "type": "extends", @@ -883,7 +1054,7 @@ "summary": "XanaNode extends Memex." }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-99", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", "source": "xananode.example:concept/unlabeled-hyperlink", "target": "xananode.example:concept/provenance", "type": "threatens", @@ -892,7 +1063,7 @@ "summary": "Unlabeled Hyperlink threatens Provenance." }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-100", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -901,7 +1072,7 @@ "summary": "Typed Relationships contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-101", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -910,7 +1081,7 @@ "summary": "Typed Relationships supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-102", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/transclusion", "type": "enables", @@ -919,7 +1090,7 @@ "summary": "Tumbler Addressing enables Transclusion." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-103", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/deep-linking", "type": "enables", @@ -928,7 +1099,7 @@ "summary": "Tumbler Addressing enables Deep Linking." }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-104", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -937,7 +1108,7 @@ "summary": "Tumbler Addressing preserves Provenance." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-105", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/fragment-node", "type": "enables", @@ -946,7 +1117,7 @@ "summary": "Tumbler Addressing enables Fragment Node." }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-106", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/tumbler-addressing", "type": "extends", @@ -955,7 +1126,7 @@ "summary": "XanaNode extends Tumbler Addressing." }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-107", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:source/as-we-may-think", "type": "deep_links_to", @@ -964,7 +1135,7 @@ "summary": "Tumbler Addressing deep links to As We May Think." }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-108", + "id": "xananode.example:rel/transclusion-preserves-provenance-127", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -973,7 +1144,7 @@ "summary": "Transclusion preserves Provenance." }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-109", + "id": "xananode.example:rel/transclusion-uses-fragment-node-128", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/fragment-node", "type": "uses", @@ -982,7 +1153,7 @@ "summary": "Transclusion uses Fragment Node." }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-110", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", "source": "xananode.example:concept/substrate-relationship-list", "target": "xananode.example:schema/xananode-relationship-types", "type": "uses", @@ -991,7 +1162,7 @@ "summary": "Substrate Relationship List uses XanaNode Relationship Types." }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-111", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", "source": "xananode.example:concept/substrate-relationship-list", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1000,7 +1171,7 @@ "summary": "Substrate Relationship List preserves Provenance." }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-112", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", "source": "xananode.example:concept/substrate-node-record", "target": "xananode.example:schema/xananode-node-types", "type": "uses", @@ -1009,7 +1180,7 @@ "summary": "Substrate Node Record uses XanaNode Node Types." }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-113", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", "source": "xananode.example:concept/substrate-node-record", "target": "xananode.example:concept/fragment-node", "type": "contains", @@ -1018,7 +1189,7 @@ "summary": "Substrate Node Record contains Fragment Node." }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-114", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", "source": "xananode.example:concept/substrate-manifest", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1027,7 +1198,7 @@ "summary": "Substrate Manifest requires Namespacing." }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-115", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "contrasts_with", @@ -1036,7 +1207,7 @@ "summary": "Single Source of Truth contrasts with Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-116", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/independent-moderation", "type": "threatens", @@ -1045,7 +1216,7 @@ "summary": "Single Source of Truth threatens Independent Moderation." }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-117", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/knowledge-substrate", "type": "alternative_to", @@ -1054,7 +1225,7 @@ "summary": "Single Source of Truth alternative to Knowledge Substrate." }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-118", + "id": "xananode.example:rel/namespacing-enables-schema-extension-137", "source": "xananode.example:concept/namespacing", "target": "xananode.example:concept/schema-extension", "type": "enables", @@ -1063,7 +1234,7 @@ "summary": "Namespacing enables Schema Extension." }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-119", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -1072,7 +1243,7 @@ "summary": "Schema Extension requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-120", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/schema-extension", "type": "requires", @@ -1081,7 +1252,7 @@ "summary": "Federated Knowledge Substrates requires Schema Extension." }, { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-121", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", "source": "xananode.example:concept/review-suggestions", "target": "xananode.example:concept/typed-relationships", "type": "uses", @@ -1090,7 +1261,7 @@ "summary": "Review Suggestions uses Typed Relationships." }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-122", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", "source": "xananode.example:concept/review-suggestions", "target": "xananode.example:concept/transclusion", "type": "uses", @@ -1099,7 +1270,7 @@ "summary": "Review Suggestions uses Transclusion." }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-123", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", "source": "xananode.example:claim/claim-relationships-preserve-context", "target": "xananode.example:concept/provenance", "type": "evidence_for", @@ -1108,7 +1279,7 @@ "summary": "Typed relationships preserve context that hyperlinks lose evidence for Provenance." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-124", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/protocol-artifacts", "type": "defines", @@ -1117,7 +1288,7 @@ "summary": "XanaNode Core Schema defines Protocol Artifacts." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-125", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-manifest", "type": "contains", @@ -1126,7 +1297,7 @@ "summary": "Protocol Artifacts contains Substrate Manifest." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-126", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-node-record", "type": "contains", @@ -1135,7 +1306,7 @@ "summary": "Protocol Artifacts contains Substrate Node Record." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-127", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-relationship-list", "type": "contains", @@ -1144,7 +1315,7 @@ "summary": "Protocol Artifacts contains Substrate Relationship List." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-128", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/review-suggestions", "type": "contains", @@ -1153,7 +1324,7 @@ "summary": "Protocol Artifacts contains Review Suggestions." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-129", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/protocol-artifacts", "type": "requires", @@ -1162,7 +1333,7 @@ "summary": "Federated Knowledge Substrates requires Protocol Artifacts." }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-130", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", "source": "xananode.example:concept/namespacing", "target": "xananode.example:concept/schema-extension", "type": "clarifies", @@ -1171,7 +1342,7 @@ "summary": "Namespacing clarifies Schema Extension." }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-131", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", "source": "xananode.example:concept/namespace-registry", "target": "xananode.example:concept/namespacing", "type": "implements", @@ -1180,7 +1351,7 @@ "summary": "Namespace Registry implements Namespacing." }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-132", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:concept/namespace-registry", "type": "requires", @@ -1189,7 +1360,7 @@ "summary": "Schema Extension requires Namespace Registry." }, { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-133", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", "source": "xananode.example:concept/moderation-model", "target": "xananode.example:concept/independent-moderation", "type": "defines", @@ -1198,7 +1369,7 @@ "summary": "Moderation Model defines Independent Moderation." }, { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-134", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/moderation-model", "type": "requires", @@ -1207,7 +1378,7 @@ "summary": "Federation Rules requires Moderation Model." }, { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-135", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", "source": "xananode.example:concept/moderation-model", "target": "xananode.example:concept/dispute-resolution", "type": "context_for", @@ -1216,7 +1387,7 @@ "summary": "Moderation Model context for Dispute Resolution." }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-136", + "id": "xananode.example:rel/merge-validation-requires-namespacing-155", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1225,7 +1396,7 @@ "summary": "Merge Validation requires Namespacing." }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-137", + "id": "xananode.example:rel/merge-validation-requires-provenance-156", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1234,7 +1405,7 @@ "summary": "Merge Validation requires Provenance." }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-138", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/schema-extension", "type": "requires", @@ -1243,7 +1414,7 @@ "summary": "Merge Validation requires Schema Extension." }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-139", + "id": "xananode.example:rel/merge-validation-uses-merge-report-158", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/merge-report", "type": "uses", @@ -1252,7 +1423,7 @@ "summary": "Merge Validation uses Merge Report." }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-140", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1261,7 +1432,7 @@ "summary": "Merge Validation uses Compatibility Report." }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-141", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "arrives_at", @@ -1270,7 +1441,7 @@ "summary": "Merge Validation arrives at Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-142", + "id": "xananode.example:rel/merge-report-documents-merge-validation-161", "source": "xananode.example:concept/merge-report", "target": "xananode.example:concept/merge-validation", "type": "documents", @@ -1279,7 +1450,7 @@ "summary": "Merge Report documents Merge Validation." }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-143", + "id": "xananode.example:rel/merge-report-preserves-provenance-162", "source": "xananode.example:concept/merge-report", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1288,7 +1459,7 @@ "summary": "Merge Report preserves Provenance." }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-144", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", "source": "xananode.example:concept/merge-report", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1297,7 +1468,7 @@ "summary": "Merge Report supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-145", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", "source": "xananode.example:concept/known-implementations-registry", "target": "xananode.example:project/xananode-hugo-theme", "type": "documents", @@ -1306,7 +1477,7 @@ "summary": "Known Implementations Registry documents XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-146", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", "source": "xananode.example:concept/known-implementations-registry", "target": "xananode.example:concept/compatibility-levels", "type": "supports", @@ -1315,7 +1486,7 @@ "summary": "Known Implementations Registry supports Compatibility Levels." }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-147", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "has_claim", @@ -1324,7 +1495,7 @@ "summary": "Knowledge Substrate has claim A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-148", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1333,7 +1504,7 @@ "summary": "Knowledge Substrate requires Provenance." }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-149", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:concept/typed-relationships", "type": "requires", @@ -1342,7 +1513,7 @@ "summary": "Knowledge Substrate requires Typed Relationships." }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-150", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/knowledge-substrate", "type": "enables", @@ -1351,7 +1522,7 @@ "summary": "XanaNode Core Schema enables Knowledge Substrate." }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-151", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", "source": "xananode.example:concept/independent-moderation", "target": "xananode.example:concept/single-source-of-truth", "type": "contrasts_with", @@ -1360,7 +1531,7 @@ "summary": "Independent Moderation contrasts with Single Source of Truth." }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-152", + "id": "xananode.example:rel/independent-moderation-requires-provenance-171", "source": "xananode.example:concept/independent-moderation", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1369,7 +1540,7 @@ "summary": "Independent Moderation requires Provenance." }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-153", + "id": "xananode.example:rel/transclusion-requires-fragment-node-172", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/fragment-node", "type": "requires", @@ -1378,7 +1549,7 @@ "summary": "Transclusion requires Fragment Node." }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-154", + "id": "xananode.example:rel/fragment-node-preserves-provenance-173", "source": "xananode.example:concept/fragment-node", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1387,7 +1558,7 @@ "summary": "Fragment Node preserves Provenance." }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-155", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", "source": "xananode.example:concept/fragment-node", "target": "xananode.example:source/mother-of-all-demos", "type": "deep_links_to", @@ -1396,7 +1567,7 @@ "summary": "Fragment Node deep links to Mother of All Demos." }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-156", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "defines", @@ -1405,7 +1576,7 @@ "summary": "Federation Rules defines Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-157", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1414,7 +1585,7 @@ "summary": "Federation Rules preserves Independent Moderation." }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-158", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/compatibility-report", "type": "requires", @@ -1423,7 +1594,7 @@ "summary": "Federation Rules requires Compatibility Report." }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-159", + "id": "xananode.example:rel/federation-rules-requires-merge-report-178", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/merge-report", "type": "requires", @@ -1432,7 +1603,7 @@ "summary": "Federation Rules requires Merge Report." }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-160", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "demonstrates", @@ -1441,7 +1612,7 @@ "summary": "Federation Example demonstrates Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-161", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1450,7 +1621,7 @@ "summary": "Federation Example uses Compatibility Report." }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-162", + "id": "xananode.example:rel/federation-example-uses-merge-report-181", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/merge-report", "type": "uses", @@ -1459,7 +1630,7 @@ "summary": "Federation Example uses Merge Report." }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-163", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1468,7 +1639,7 @@ "summary": "Federation Example preserves Independent Moderation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-164", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1477,7 +1648,7 @@ "summary": "Federated Knowledge Substrates requires Namespacing." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-165", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/merge-validation", "type": "requires", @@ -1486,7 +1657,7 @@ "summary": "Federated Knowledge Substrates requires Merge Validation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-166", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/federation-rules", "type": "requires", @@ -1495,7 +1666,7 @@ "summary": "Federated Knowledge Substrates requires Federation Rules." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-167", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1504,7 +1675,7 @@ "summary": "Federated Knowledge Substrates preserves Independent Moderation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-168", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/single-source-of-truth", "type": "alternative_to", @@ -1513,7 +1684,7 @@ "summary": "Federated Knowledge Substrates alternative to Single Source of Truth." }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-169", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1522,7 +1693,7 @@ "summary": "Dispute Resolution requires Provenance." }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-170", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1531,7 +1702,7 @@ "summary": "Dispute Resolution supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-171", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:concept/merge-report", "type": "context_for", @@ -1540,7 +1711,7 @@ "summary": "Dispute Resolution context for Merge Report." }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-172", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/dispute-resolution", "type": "requires", @@ -1549,7 +1720,7 @@ "summary": "Federation Rules requires Dispute Resolution." }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-173", + "id": "xananode.example:rel/deep-linking-enables-transclusion-192", "source": "xananode.example:concept/deep-linking", "target": "xananode.example:concept/transclusion", "type": "enables", @@ -1558,7 +1729,7 @@ "summary": "Deep Linking enables Transclusion." }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-174", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", "source": "xananode.example:concept/deep-linking", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -1567,7 +1738,7 @@ "summary": "Deep Linking contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-175", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/schema-extension", "type": "demonstrates", @@ -1576,7 +1747,7 @@ "summary": "Custom Extension Substrate demonstrates Schema Extension." }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-176", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/namespace-registry", "type": "requires", @@ -1585,7 +1756,7 @@ "summary": "Custom Extension Substrate requires Namespace Registry." }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-177", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/substrate-manifest", "type": "uses", @@ -1594,7 +1765,7 @@ "summary": "Custom Extension Substrate uses Substrate Manifest." }, { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-178", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/canonical-type-policy", "type": "features", @@ -1603,7 +1774,7 @@ "summary": "Custom Extension Substrate features Canonical Type Policy." }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-179", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", "source": "xananode.example:concept/compatibility-report", "target": "xananode.example:concept/compatibility-levels", "type": "documents", @@ -1612,7 +1783,7 @@ "summary": "Compatibility Report documents Compatibility Levels." }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-180", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/compatibility-report", "type": "requires", @@ -1621,7 +1792,7 @@ "summary": "Merge Validation requires Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-181", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", "source": "xananode.example:concept/compatibility-levels", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1630,7 +1801,7 @@ "summary": "Compatibility Levels uses Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-182", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", "source": "xananode.example:concept/compatibility-levels", "target": "xananode.example:concept/substrate-manifest", "type": "requires", @@ -1639,7 +1810,7 @@ "summary": "Compatibility Levels requires Substrate Manifest." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/compatibility-levels", "type": "requires", @@ -1648,7 +1819,7 @@ "summary": "Federated Knowledge Substrates requires Compatibility Levels." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-184", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/civilizational-memory", "type": "enables", @@ -1657,7 +1828,7 @@ "summary": "Federated Knowledge Substrates enables Civilizational Memory." }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-185", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/knowledge-substrate", "type": "requires", @@ -1666,7 +1837,7 @@ "summary": "Civilizational Memory requires Knowledge Substrate." }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-186", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1675,7 +1846,7 @@ "summary": "Civilizational Memory requires Provenance." }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-187", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/merge-validation", "type": "requires", @@ -1684,7 +1855,7 @@ "summary": "Civilizational Memory requires Merge Validation." }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-188", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", "source": "xananode.example:concept/canonical-type-policy", "target": "xananode.example:concept/schema-extension", "type": "context_for", @@ -1693,7 +1864,7 @@ "summary": "Canonical Type Policy context for Schema Extension." }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-189", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", "source": "xananode.example:concept/canonical-type-policy", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1702,7 +1873,7 @@ "summary": "Canonical Type Policy requires Namespacing." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-190", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "supports", @@ -1711,7 +1882,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use supports A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-191", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "has_claim", @@ -1720,7 +1891,7 @@ "summary": "Typed Relationships has claim Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-192", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", "source": "xananode.example:claim/claim-relationships-preserve-context", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -1729,7 +1900,7 @@ "summary": "Typed relationships preserve context that hyperlinks lose contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-193", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "has_claim", @@ -1738,7 +1909,7 @@ "summary": "Merge Validation has claim Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-194", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1747,7 +1918,7 @@ "summary": "XanaNode Core Schema supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-195", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", "source": "xananode.example:claim/claim-merge-without-collapse", "target": "xananode.example:concept/single-source-of-truth", "type": "contradicts", diff --git a/exampleSite/static/xananode-fragments.json b/exampleSite/static/xananode-fragments.json index 4c28342a..5873e95c 100644 --- a/exampleSite/static/xananode-fragments.json +++ b/exampleSite/static/xananode-fragments.json @@ -1,6 +1,52 @@ { - "generated_at": "2026-06-18T03:17:03.791Z", + "generated_at": "2026-06-18T04:24:11.885Z", "nodes": { + "xananode-implementation-stack-trail": { + "versions": { + "v1": { + "fragments": { + "1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.\n\nThe protocol repository defines the canonical rules.\n\nThe Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.\n\nThe Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.\n\nThe Workspace repository manages multiple local substrates and their operational workflows.\n\nThe Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.\n\n{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.2": "The protocol repository defines the canonical rules.", + "1.2.1": "The protocol repository defines the canonical rules.", + "1.3": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.3.1": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.4": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.4.1": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.5": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.5.1": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.6": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.6.1": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.7": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.7.1": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}" + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.\n\nThe protocol repository defines the canonical rules.\n\nThe Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.\n\nThe Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.\n\nThe Workspace repository manages multiple local substrates and their operational workflows.\n\nThe Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.\n\n{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.1.1": "This trail orders the active XanaNode implementation repositories by dependency and responsibility.", + "1.2": "The protocol repository defines the canonical rules.", + "1.2.1": "The protocol repository defines the canonical rules.", + "1.3": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.3.1": "The Core SDK repository consumes those rules and exposes reusable validation, fragment, graph, and artifact APIs.", + "1.4": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.4.1": "The Hugo repository adapts Hugo content and static publishing to Core-validated protocol artifacts.", + "1.5": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.5.1": "The Workspace repository manages multiple local substrates and their operational workflows.", + "1.6": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.6.1": "The Studio repository provides the desktop workbench for editing, previewing, validating, and navigating those substrates.", + "1.7": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}", + "1.7.1": "{{< node ref=\"xananode-protocol-repo\" >}} {{< node ref=\"xananode-core-sdk-repo\" >}} {{< node ref=\"xananode-hugo-repo\" >}} {{< node ref=\"xananode-workspace-repo\" >}} {{< node ref=\"xananode-studio-repo\" >}}" + }, + "metadata": {} + } + }, + "title": "XanaNode Implementation Stack Trail", + "type": "trail" + }, "xananode-core-trail": { "versions": { "v1": { @@ -153,6 +199,118 @@ "title": "Cytoscape.js", "type": "technology" }, + "xananode-workspace-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks.", + "1.1.1": "The Workspace repository manages multiple substrates and their operational lifecycle: folder layout, imports, Git state, builds, and health checks." + }, + "metadata": {} + } + }, + "title": "XanaNode Workspace Repository", + "type": "source" + }, + "xananode-studio-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows.", + "1.1.1": "The Studio repository provides the local-first desktop workbench for editing nodes, previewing Hugo output, validating substrates, and managing author workflows." + }, + "metadata": {} + } + }, + "title": "XanaNode Studio Repository", + "type": "source" + }, + "xananode-protocol-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals.", + "1.1.1": "The protocol repository is the source of truth for XanaNode schemas, registries, specs, examples, governance, and proposals." + }, + "metadata": {} + } + }, + "title": "XanaNode Protocol Repository", + "type": "source" + }, + "xananode-hugo-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1.1": "The Hugo repository is the static-site renderer and example substrate.", + "1.1.2": "It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1": "The Hugo repository is the static-site renderer and example substrate. It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts.", + "1.1.1": "The Hugo repository is the static-site renderer and example substrate.", + "1.1.2": "It adapts Hugo content, shortcodes, and assets into Core-validated XanaNode artifacts." + }, + "metadata": {} + } + }, + "title": "XanaNode Hugo Repository", + "type": "source" + }, + "xananode-core-sdk-repo": { + "versions": { + "v1": { + "fragments": { + "1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export." + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export.", + "1.1.1": "The Core SDK is the shared implementation layer for protocol validation, fragment handling, relationship normalization, graph construction, and artifact export." + }, + "metadata": {} + } + }, + "title": "XanaNode Core SDK Repository", + "type": "source" + }, "xanadu-document-interconnection": { "versions": { "v1": { diff --git a/exampleSite/static/xananode-suggestions.json b/exampleSite/static/xananode-suggestions.json index 79843744..7bbe23dc 100644 --- a/exampleSite/static/xananode-suggestions.json +++ b/exampleSite/static/xananode-suggestions.json @@ -1,7 +1,120 @@ { - "generated_at": "2026-06-18T03:17:03.848Z", + "generated_at": "2026-06-18T04:24:11.950Z", "status": "pending_user_approval", "note": "These suggestions are not auto-applied. Review each replacement before editing content.", - "autolinks": [], + "autolinks": [ + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 82, + "source_node": "xananode-implementation-stack-trail", + "target_node": "static-publishing", + "target_title": "Static Publishing", + "matched_text": "static publishing", + "matched_term": "Static Publishing", + "match_kind": "title", + "replacement": "[static publishing](/technology/static-publishing/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 65, + "source_node": "xananode-implementation-stack-trail", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 25, + "column": 30, + "source_node": "xananode-implementation-stack-trail", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\trails\\xananode-implementation-stack-trail.md", + "line": 31, + "column": 118, + "source_node": "xananode-implementation-stack-trail", + "target_node": "protocol-artifacts", + "target_title": "Protocol Artifacts", + "matched_text": "protocol artifacts", + "matched_term": "Protocol Artifacts", + "match_kind": "title", + "replacement": "[protocol artifacts](/concept/protocol-artifacts/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-studio-repo.md", + "line": 19, + "column": 96, + "source_node": "xananode-studio-repo", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-protocol-repo.md", + "line": 19, + "column": 52, + "source_node": "xananode-protocol-repo", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-hugo-repo.md", + "line": 19, + "column": 5, + "source_node": "xananode-hugo-repo", + "target_node": "hugo", + "target_title": "Hugo", + "matched_text": "Hugo", + "matched_term": "Hugo", + "match_kind": "title", + "replacement": "[Hugo](/technology/hugo/)", + "note": "Suggestion only. Review and apply manually if approved." + }, + { + "approved": false, + "file": "content\\sources\\xananode-hugo-repo.md", + "line": 19, + "column": 139, + "source_node": "xananode-hugo-repo", + "target_node": "xananode", + "target_title": "XanaNode", + "matched_text": "XanaNode", + "matched_term": "XanaNode", + "match_kind": "title", + "replacement": "[XanaNode](/concept/xananode/)", + "note": "Suggestion only. Review and apply manually if approved." + } + ], "transclusions": [] } diff --git a/exampleSite/static/xananode-suggestions.md b/exampleSite/static/xananode-suggestions.md index ce082254..7f7b253f 100644 --- a/exampleSite/static/xananode-suggestions.md +++ b/exampleSite/static/xananode-suggestions.md @@ -4,12 +4,58 @@ Status: pending user approval These suggestions are not auto-applied. Review each replacement before editing content. -Autolinks: 0 +Autolinks: 8 Transclusions: 0 ## Autolinks -No autolink suggestions. +1. content\trails\xananode-implementation-stack-trail.md:31:82 + - Match: static publishing + - Target: Static Publishing (static-publishing) + - Replacement: [static publishing](/technology/static-publishing/) + - Approved: false + +2. content\trails\xananode-implementation-stack-trail.md:31:65 + - Match: Hugo + - Target: Hugo (hugo) + - Replacement: [Hugo](/technology/hugo/) + - Approved: false + +3. content\trails\xananode-implementation-stack-trail.md:25:30 + - Match: XanaNode + - Target: XanaNode (xananode) + - Replacement: [XanaNode](/concept/xananode/) + - Approved: false + +4. content\trails\xananode-implementation-stack-trail.md:31:118 + - Match: protocol artifacts + - Target: Protocol Artifacts (protocol-artifacts) + - Replacement: [protocol artifacts](/concept/protocol-artifacts/) + - Approved: false + +5. content\sources\xananode-studio-repo.md:19:96 + - Match: Hugo + - Target: Hugo (hugo) + - Replacement: [Hugo](/technology/hugo/) + - Approved: false + +6. content\sources\xananode-protocol-repo.md:19:52 + - Match: XanaNode + - Target: XanaNode (xananode) + - Replacement: [XanaNode](/concept/xananode/) + - Approved: false + +7. content\sources\xananode-hugo-repo.md:19:5 + - Match: Hugo + - Target: Hugo (hugo) + - Replacement: [Hugo](/technology/hugo/) + - Approved: false + +8. content\sources\xananode-hugo-repo.md:19:139 + - Match: XanaNode + - Target: XanaNode (xananode) + - Replacement: [XanaNode](/concept/xananode/) + - Approved: false ## Transclusions diff --git a/layouts/404.html b/layouts/404.html index f1fc147b..77057d97 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -1,261 +1,23 @@ - {{ partial "head.html" . }} - 404 - Node Not Found | {{ site.Title }} - + {{ partial "head.html" . }} + Resolve XanaNode Reference | {{ site.Title }} -
    -
    - -
    -
    +
    +
    +
    + + +
    + + +
    diff --git a/layouts/index.json b/layouts/index.json index 37cecaa3..6f5a203a 100644 --- a/layouts/index.json +++ b/layouts/index.json @@ -14,6 +14,7 @@ "type": {{ $nodeType | jsonify }}, "section": {{ $p.Section | jsonify }}, "importance": {{ ($p.Params.importance | default 3) | jsonify }}, + "trail_nodes": {{ ($p.Params.nodes | default slice) | jsonify }}, "url": {{ $p.RelPermalink | jsonify }}, "summary": {{ ($p.Params.summary | default "") | jsonify }}, diff --git a/static/js/xananode.js b/static/js/xananode.js index afd83701..c3fd9aa3 100644 --- a/static/js/xananode.js +++ b/static/js/xananode.js @@ -49,7 +49,14 @@ ttsDetail: "full" }); - const SEARCH_VERBS = ["Explore", "Map", "Trace", "Search", "Navigate", "Follow", "Question", "Compare"]; + const SEARCH_PROMPTS = [ + "explore the knowledge substrate", + "trace an idea across sources", + "follow a claim to evidence", + "compare connected nodes", + "search for provenance", + "map a trail through context" + ]; const DEFAULT_TYPES = [ "essay", @@ -215,16 +222,17 @@ return res.json(); }), fetch("/schemas/xananode-node-types.json").then((r) => r.json()).catch(() => null), - fetch("/schemas/xananode-relationship-types.json").then((r) => r.json()).catch(() => null) + fetch("/schemas/xananode-relationship-types.json").then((r) => r.json()).catch(() => null), + fetch("/xananode-fragments.json").then((r) => r.json()).catch(() => null) ])) - .then(([data, nodeSchema, relSchema]) => { + .then(([data, nodeSchema, relSchema, fragmentsData]) => { if (nodeSchema?.node_types) { VALID_NODE_TYPES = new Set(nodeSchema.node_types.map((t) => t.type)); } if (relSchema?.relationship_types) { VALID_RELATIONSHIP_TYPES = new Set(relSchema.relationship_types.map((t) => t.type)); } - init(data, nodeSchema); + init(data, nodeSchema, fragmentsData); }) .catch((err) => { graphEl.innerHTML = `

    ${escapeHtml(err.message)}

    `; @@ -288,7 +296,7 @@ `; } - function init(data, nodeTypesData) { + function init(data, nodeTypesData, fragmentsData) { const allNodes = Array.isArray(data.nodes) ? data.nodes : []; const nodeTypeColors = buildTypeColorMap(nodeTypesData); const nodeIds = new Set(allNodes.map((node) => node.id)); @@ -362,14 +370,32 @@ tourIndex: 0, tourVisited: new Set(), tourRecent: [], + activeTrail: null, cy: null, allNodes, nodeIds, allEdges, allEdgesRaw, + fragmentsData: fragmentsData || {}, + pendingFragmentHighlight: null, displaySettings }; + if (rawRequested && !requestedNode) { + const protocolTarget = resolveProtocolAddress(rawRequested, state); + if (protocolTarget) { + state.focusId = protocolTarget.nodeId; + state.pendingFragmentHighlight = protocolTarget.fragmentId + ? { + nodeId: protocolTarget.nodeId, + fragmentId: protocolTarget.fragmentId, + fragment: protocolTarget.fragment + } + : null; + state.pathExplorer.sourceQuery = protocolTarget.nodeId; + } + } + if (state.focusId) { updateUrl(state.focusId, true); } @@ -418,10 +444,18 @@ window.addEventListener("popstate", () => { const nodeFromUrl = nodeIdFromUrl(allNodes); + const protocolTarget = nodeFromUrl ? resolveProtocolAddress(nodeFromUrl, state) : null; - if (nodeFromUrl && allNodes.some((node) => node.id === nodeFromUrl)) { + if (protocolTarget || (nodeFromUrl && allNodes.some((node) => node.id === nodeFromUrl))) { state.previousFocusId = state.focusId; - state.focusId = nodeFromUrl; + state.focusId = protocolTarget?.nodeId || nodeFromUrl; + state.pendingFragmentHighlight = protocolTarget?.fragmentId + ? { + nodeId: protocolTarget.nodeId, + fragmentId: protocolTarget.fragmentId, + fragment: protocolTarget.fragment + } + : null; renderVisibleGraph(state, { updateUrl: false, stagedReveal: true, @@ -483,7 +517,7 @@ type="search" autocomplete="off" spellcheck="false" - placeholder="${escapeHtml(SEARCH_VERBS[0])} the knowledge substrate..." + placeholder="${escapeHtml(SEARCH_PROMPTS[0])}" value="${escapeHtml(state.searchQuery)}" > + { + startInterfaceTour(state); + }); + graphEl.querySelectorAll("[data-display-setting]").forEach((button) => { button.addEventListener("click", () => { const key = button.getAttribute("data-display-setting"); @@ -1112,6 +1152,53 @@ ].filter(Boolean).join(" ")); } + function resolveProtocolAddress(value, state) { + const raw = decodeURIComponent(String(value || "").trim()).replace(/^xana:\/\//, ""); + if (!raw) return null; + + const nodes = state.allNodes || []; + const fragmentMatch = raw.match(/^(.*?)(?:@[^#]+)?#fragment\/([A-Za-z0-9._-]+)(?:@.+)?$/); + const nodeAddress = fragmentMatch ? fragmentMatch[1] : raw.replace(/@[^/#]+$/, ""); + const fragmentId = fragmentMatch?.[2] || ""; + + const node = nodes.find((candidate) => { + return candidate.id === nodeAddress || + candidate.protocol_id === nodeAddress || + candidate.tumbler === nodeAddress; + }); + + if (!node) return null; + if (!fragmentId) return { nodeId: node.id, fragmentId: "", fragment: null }; + + const fragment = findFragmentRecord(node.id, fragmentId, raw, state); + return { nodeId: node.id, fragmentId, fragment }; + } + + function findFragmentRecord(nodeId, fragmentId, rawAddress, state) { + const versions = state.fragmentsData?.nodes?.[nodeId]?.versions || {}; + for (const version of Object.values(versions)) { + const metadata = version?.metadata || {}; + for (const fragment of Object.values(metadata)) { + if (!fragment) continue; + const tumblerNoVersion = String(fragment.tumbler || "").replace(/@[^#]+(?=#fragment\/)/, "").replace(/@[^@#]+$/, ""); + const rawNoVersion = rawAddress.replace(/@[^#]+(?=#fragment\/)/, "").replace(/@[^@#]+$/, ""); + if ( + fragment.id === fragmentId || + fragment.fragment_id === fragmentId || + fragment.protocol_id === rawAddress || + fragment.tumbler === rawAddress || + (tumblerNoVersion && tumblerNoVersion === rawNoVersion) + ) { + return { + ...fragment, + text: version.fragments?.[fragment.id || fragmentId] || "" + }; + } + } + } + return null; + } + function scoreSearchResult(node, haystack, normalizedQuery, queryTokens) { let score = 0; @@ -1683,6 +1770,7 @@ state.tourIndex = 0; state.tourVisited = new Set([state.focusId].filter(Boolean)); state.tourRecent = [state.focusId].filter(Boolean); + state.activeTrail = buildActiveTrail(state); graphEl.dataset.tourActive = "1"; updateTourButton(); panelEl.scrollTop = 0; @@ -1694,6 +1782,7 @@ function stopTour(state) { state.tourActive = false; + state.activeTrail = null; graphEl.dataset.tourActive = "0"; clearTourTimers(); stopNarration(); @@ -1734,6 +1823,9 @@ } function pickNextTourNode(state) { + const trailNext = pickNextTrailNode(state); + if (trailNext) return trailNext; + const cy = state.cy; if (!cy) return null; @@ -1761,6 +1853,34 @@ return nextId; } + function buildActiveTrail(state) { + const focusNode = state.allNodes.find((node) => node.id === state.focusId); + const trailNodes = Array.isArray(focusNode?.trail_nodes) + ? focusNode.trail_nodes.filter((id) => state.nodeIds.has(id)) + : []; + if (!trailNodes.length) return null; + return { + trailId: focusNode.id, + nodes: trailNodes, + index: 0 + }; + } + + function pickNextTrailNode(state) { + const trail = state.activeTrail; + if (!trail?.nodes?.length) return null; + const currentIndex = trail.nodes.indexOf(state.focusId); + const nextIndex = currentIndex >= 0 ? currentIndex + 1 : trail.index; + const nextId = trail.nodes[nextIndex]; + trail.index = nextIndex + 1; + if (!nextId) { + state.activeTrail = null; + return null; + } + rememberTourVisit(nextId, state); + return nextId; + } + function rememberTourVisit(nodeId, state) { state.tourVisited = state.tourVisited || new Set(); state.tourRecent = state.tourRecent || []; @@ -1912,6 +2032,10 @@ ${renderSourceInfo(node)} + ${renderProtocolFooter(node)} + + ${renderTrailPlaylist(node, state)} +
    Connections @@ -1940,6 +2064,8 @@ } normalizePanelLinks(state); + bindTrailPlaylist(state); + highlightPendingFragment(state); // Tour: reset scroll and restart both the panel-scroll loop and the // countdown ring animation so both are in sync with the new node's dwell. @@ -1952,13 +2078,127 @@ } } + function renderTrailPlaylist(node, state) { + if (!Array.isArray(node.trail_nodes) || !node.trail_nodes.length) return ""; + const items = node.trail_nodes + .map((id, index) => { + const target = state.allNodes.find((candidate) => candidate.id === id); + if (!target) return ""; + return ` + + `; + }) + .filter(Boolean) + .join(""); + + if (!items) return ""; + return ` +
    +
    + Trail playlist + +
    +
    ${items}
    +
    + `; + } + + function bindTrailPlaylist(state) { + panelEl.querySelectorAll("[data-trail-jump]").forEach((button) => { + button.addEventListener("click", () => { + const id = button.getAttribute("data-trail-jump"); + state.activeTrail = { + trailId: state.focusId, + nodes: [...(state.allNodes.find((node) => node.id === state.focusId)?.trail_nodes || [])], + index: 0 + }; + travelToNode(id, state, true); + }); + }); + + panelEl.querySelector("[data-trail-start]")?.addEventListener("click", () => { + state.activeTrail = buildActiveTrail(state); + const nextId = pickNextTrailNode(state); + if (nextId) travelToNode(nextId, state, true); + }); + } + + function renderProtocolFooter(node) { + const rows = [ + node.protocol_id ? ["Protocol", node.protocol_id] : null, + node.tumbler ? ["Tumbler", node.tumbler] : null + ].filter(Boolean); + + if (!rows.length) return ""; + + return ` +
    + ${rows.map(([label, value]) => ` +
    + ${escapeHtml(label)} + ${escapeHtml(value)} +
    + `).join("")} +
    + `; + } + + function highlightPendingFragment(state) { + const pending = state.pendingFragmentHighlight; + if (!pending || pending.nodeId !== state.focusId) return; + + panelEl.querySelectorAll(".xana-fragment-highlight").forEach((el) => { + el.classList.remove("xana-fragment-highlight"); + }); + panelEl.querySelectorAll(".xana-fragment-note").forEach((el) => el.remove()); + + const text = normalizeFragmentText(pending.fragment?.text || ""); + const candidates = [...panelEl.querySelectorAll(".xana-node-content p, .xana-node-content li, .xana-node-content blockquote, .xana-node-content pre")]; + const target = candidates.find((el) => { + const candidate = normalizeFragmentText(el.textContent || ""); + if (!candidate || !text) return false; + return candidate.includes(text) || text.includes(candidate) || candidate.includes(text.slice(0, 80)); + }); + + if (target) { + target.classList.add("xana-fragment-highlight"); + target.scrollIntoView({ block: "center", behavior: "smooth" }); + state.pendingFragmentHighlight = null; + return; + } + + const note = document.createElement("aside"); + note.className = "xana-fragment-note"; + note.setAttribute("data-tts-skip", ""); + note.setAttribute("aria-hidden", "true"); + note.innerHTML = ` + Fragment address + ${escapeHtml(pending.fragment?.tumbler || `${state.allNodes.find((node) => node.id === pending.nodeId)?.protocol_id || pending.nodeId}#fragment/${pending.fragmentId}`)} + `; + const content = panelEl.querySelector(".xana-node-content"); + if (content) content.prepend(note); + note.scrollIntoView({ block: "center", behavior: "smooth" }); + state.pendingFragmentHighlight = null; + } + + function normalizeFragmentText(value) { + return stripHtml(value) + .replace(/\s+/g, " ") + .trim() + .toLowerCase(); + } + function narrateNode(node, state) { if (!node || !state?.displaySettings?.ttsNarrator) return false; if (!canNarrate()) return false; const title = node.title || node.id || "Untitled node"; const summary = stripHtml(node.summary || "").replace(/\s+/g, " ").trim(); - const content = stripHtml(node.content || node.html || "").replace(/\s+/g, " ").trim(); + const content = stripHtml(node.html || node.content || "").replace(/\s+/g, " ").trim(); const wantsFull = state.displaySettings.ttsDetail !== "summary"; const readableContent = wantsFull && content && content !== summary ? content @@ -2026,6 +2266,94 @@ } } + function startInterfaceTour(state) { + const steps = [ + { + selector: ".xana-searcher", + title: "Start anywhere", + body: "Search is the front door. Type a person, claim, source, idea, or protocol address and the graph will pull matching nodes into view." + }, + { + selector: ".xana-depth-row", + title: "Choose your focus", + body: "Near, mid, and deep change how much neighborhood context you see around the selected node." + }, + { + selector: "#xana-stage", + title: "Navigate the substrate", + body: "Each node is a typed knowledge object. Click one to travel through meaning, not just pages." + }, + { + selector: ".xana-controls-strip", + title: "Graph tools", + body: "These controls zoom, fit, filter, audit, compare paths, run the node tour, and open display or narration settings." + }, + { + selector: "#xana-panel", + title: "Read with context", + body: "The content panel shows the selected node, media, source metadata, stable addresses, and typed relationships." + }, + { + selector: ".xana-connections", + title: "Follow relationships", + body: "Connections explain why nodes are linked. This is where evidence, disagreement, lineage, and trails become navigable." + }, + { + selector: "[data-settings-toggle]", + title: "Make it yours", + body: "Settings let readers choose theme, density, graph atmosphere, and narrated tours." + } + ]; + + let index = 0; + renderInterfaceTourStep(); + + function renderInterfaceTourStep() { + graphEl.querySelectorAll(".xana-interface-tour, .xana-tour-spotlight").forEach((el) => el.remove()); + document.querySelectorAll(".xana-tour-target").forEach((el) => el.classList.remove("xana-tour-target")); + + const step = steps[index]; + const target = document.querySelector(step.selector); + if (target) target.classList.add("xana-tour-target"); + + const overlay = document.createElement("div"); + overlay.className = "xana-interface-tour"; + overlay.setAttribute("data-tts-skip", ""); + overlay.innerHTML = ` +
    +
    ${index + 1} / ${steps.length}
    +

    ${escapeHtml(step.title)}

    +

    ${escapeHtml(step.body)}

    +
    + + + +
    +
    + `; + graphEl.appendChild(overlay); + + overlay.querySelector("[data-tour-close]")?.addEventListener("click", closeInterfaceTour); + overlay.querySelector("[data-tour-prev]")?.addEventListener("click", () => { + index = Math.max(0, index - 1); + renderInterfaceTourStep(); + }); + overlay.querySelector("[data-tour-next]")?.addEventListener("click", () => { + if (index >= steps.length - 1) { + closeInterfaceTour(); + return; + } + index += 1; + renderInterfaceTourStep(); + }); + } + + function closeInterfaceTour() { + graphEl.querySelectorAll(".xana-interface-tour").forEach((el) => el.remove()); + document.querySelectorAll(".xana-tour-target").forEach((el) => el.classList.remove("xana-tour-target")); + } + } + function renderPanelImage(node, state) { if (!node.image) return ""; @@ -2828,6 +3156,32 @@ if (!href || href.startsWith("#")) return; if (link.hasAttribute("data-node-jump")) return; + const protocolTarget = resolveProtocolAddress(href, state); + if (protocolTarget) { + link.setAttribute("href", nodeHref(protocolTarget.nodeId, state)); + link.dataset.nodeJump = protocolTarget.nodeId; + if (protocolTarget.fragmentId) { + link.dataset.fragmentJump = protocolTarget.fragmentId; + } + + link.addEventListener("click", (event) => { + event.preventDefault(); + closeTransientUi(state, { clearSearch: true }); + state.pendingFragmentHighlight = protocolTarget.fragmentId + ? { + nodeId: protocolTarget.nodeId, + fragmentId: protocolTarget.fragmentId, + fragment: protocolTarget.fragment + } + : null; + travelToNode(protocolTarget.nodeId, state, true); + if (protocolTarget.nodeId === state.focusId) { + highlightPendingFragment(state); + } + }); + return; + } + // Primary match: compare normalized URL paths (works for absolute hrefs). let matchingNode = state.allNodes.find((node) => { return normalizePath(node.url) === normalizePath(href); @@ -3056,6 +3410,10 @@ function nodeIdFromUrl(allNodes = []) { const pathname = window.location.pathname.replace(/\/$/, ""); + const protocolPath = pathname.replace(/^\//, ""); + if (/^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)*:[a-z][a-z0-9_-]*\/.+/i.test(protocolPath)) { + return `${protocolPath}${window.location.hash || ""}`; + } const match = pathname.match(/^\/node\/(.+)$/); if (match) return decodeURIComponent(match[1]); const matchingNode = allNodes.find((node) => normalizePath(node.url) === normalizePath(pathname)); @@ -3072,7 +3430,8 @@ } } - return new URLSearchParams(window.location.search).get("node"); + const params = new URLSearchParams(window.location.search); + return params.get("node") || params.get("ref"); } function getFitPadding() { @@ -3280,12 +3639,29 @@ if (!input || input.dataset.verbRotation === "1") return; input.dataset.verbRotation = "1"; - let index = 0; + let promptIndex = 0; + let charIndex = SEARCH_PROMPTS[0].length; + let direction = -1; + let pauseUntil = performance.now() + 1500; window.setInterval(() => { if (document.activeElement === input || input.value.trim()) return; - index = (index + 1) % SEARCH_VERBS.length; - input.setAttribute("placeholder", `${SEARCH_VERBS[index]} the knowledge substrate...`); - }, 2400); + + const now = performance.now(); + if (now < pauseUntil) return; + + const prompt = SEARCH_PROMPTS[promptIndex]; + charIndex += direction; + input.setAttribute("placeholder", prompt.slice(0, Math.max(0, charIndex))); + + if (charIndex <= 0) { + direction = 1; + promptIndex = (promptIndex + 1) % SEARCH_PROMPTS.length; + pauseUntil = now + 260; + } else if (charIndex >= SEARCH_PROMPTS[promptIndex].length) { + direction = -1; + pauseUntil = now + 1600; + } + }, 48); } function escapeHtml(value) { From 7c05c9b29d3c0d968de5dc114ce6581520f06f7e Mon Sep 17 00:00:00 2001 From: csiefen Date: Thu, 18 Jun 2026 00:38:30 -0400 Subject: [PATCH 04/11] Fix trail tour overlays and fragment highlights --- assets/css/style.css | 152 ++++++- .../trails/branching-orientation-trail.md | 45 ++ exampleSite/data/xananode_fragments.json | 28 +- exampleSite/static/nodes/as-we-may-think.json | 10 +- .../nodes/branching-orientation-trail.json | 33 ++ .../static/nodes/canonical-type-policy.json | 6 +- .../static/nodes/civilizational-memory.json | 8 +- .../nodes/claim-merge-without-collapse.json | 14 +- .../claim-relationships-preserve-context.json | 12 +- .../nodes/claim-substrate-is-structure.json | 6 +- .../static/nodes/compatibility-levels.json | 12 +- .../nodes/compatibility-report-schema.json | 6 +- .../static/nodes/compatibility-report.json | 16 +- .../nodes/custom-extension-substrate.json | 8 +- exampleSite/static/nodes/cytoscape-js.json | 4 +- exampleSite/static/nodes/deep-linking.json | 6 +- .../static/nodes/dispute-resolution.json | 10 +- .../static/nodes/douglas-engelbart.json | 6 +- .../nodes/federated-knowledge-substrates.json | 34 +- .../static/nodes/federation-example.json | 12 +- .../static/nodes/federation-rules.json | 14 +- exampleSite/static/nodes/fragment-node.json | 12 +- exampleSite/static/nodes/hugo.json | 6 +- .../static/nodes/independent-moderation.json | 14 +- .../static/nodes/knowledge-substrate.json | 28 +- .../nodes/known-implementations-registry.json | 4 +- exampleSite/static/nodes/link-rot.json | 10 +- exampleSite/static/nodes/memex.json | 10 +- .../static/nodes/merge-report-schema.json | 6 +- exampleSite/static/nodes/merge-report.json | 16 +- .../static/nodes/merge-validation.json | 24 +- .../static/nodes/moderation-model.json | 6 +- .../static/nodes/mother-of-all-demos.json | 10 +- .../static/nodes/namespace-registry.json | 8 +- .../static/nodes/namespace-schema.json | 6 +- exampleSite/static/nodes/namespacing.json | 16 +- exampleSite/static/nodes/nls.json | 8 +- exampleSite/static/nodes/project-xanadu.json | 10 +- .../nodes/protocol-artifacts-trail.json | 2 +- .../static/nodes/protocol-artifacts.json | 16 +- exampleSite/static/nodes/provenance.json | 28 +- .../static/nodes/review-suggestions.json | 6 +- .../static/nodes/schema-extension.json | 20 +- .../static/nodes/single-source-of-truth.json | 14 +- .../nodes/source-code-link-decay-study.json | 6 +- exampleSite/static/nodes/start-here.json | 18 +- .../static/nodes/static-publishing.json | 4 +- .../nodes/substrate-manifest-schema.json | 8 +- .../static/nodes/substrate-manifest.json | 10 +- .../static/nodes/substrate-node-record.json | 10 +- .../static/nodes/substrate-node-schema.json | 8 +- .../nodes/substrate-relationship-list.json | 10 +- .../nodes/substrate-relationships-schema.json | 8 +- exampleSite/static/nodes/ted-nelson.json | 8 +- exampleSite/static/nodes/transclusion.json | 18 +- .../static/nodes/tumbler-addressing.json | 12 +- .../static/nodes/typed-relationships.json | 12 +- .../static/nodes/unlabeled-hyperlink.json | 10 +- exampleSite/static/nodes/vannevar-bush.json | 12 +- .../static/nodes/what-is-xananode.json | 10 +- .../xanadu-document-interconnection.json | 10 +- .../static/nodes/xananode-core-schema.json | 40 +- .../static/nodes/xananode-core-sdk-repo.json | 6 +- .../static/nodes/xananode-core-trail.json | 2 +- .../static/nodes/xananode-hugo-repo.json | 6 +- .../static/nodes/xananode-hugo-theme.json | 22 +- exampleSite/static/nodes/xananode-icon.json | 6 +- .../static/nodes/xananode-node-types.json | 8 +- .../static/nodes/xananode-protocol-repo.json | 12 +- .../nodes/xananode-relationship-types.json | 8 +- .../static/nodes/xananode-studio-repo.json | 6 +- .../static/nodes/xananode-workspace-repo.json | 4 +- exampleSite/static/nodes/xananode.json | 42 +- exampleSite/static/relationships.json | 424 ++++++++++-------- exampleSite/static/xananode-fragments.json | 28 +- layouts/index.json | 1 + static/js/xananode.js | 190 ++++++-- 77 files changed, 1069 insertions(+), 632 deletions(-) create mode 100644 exampleSite/content/trails/branching-orientation-trail.md create mode 100644 exampleSite/static/nodes/branching-orientation-trail.json diff --git a/assets/css/style.css b/assets/css/style.css index e19a5306..69a2de08 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -411,9 +411,7 @@ body, } .xana-search-wrap { - display: flex; - flex-wrap: wrap; - align-items: center; + display: block; background: rgba(5, 7, 10, 0.82); border: 1px solid rgba(255, 255, 255, 0.13); border-radius: 1.5rem; @@ -432,10 +430,20 @@ body, display: flex; align-items: center; gap: 0.4rem; - flex: 1 1 calc(100% - 1rem); min-width: 0; } +.xana-search-form::after { + content: ""; + flex: 0 0 auto; + width: 1px; + height: 1.15em; + margin-left: 0.05rem; + background: var(--xana-accent); + opacity: 0.75; + animation: xana-caret-blink 900ms steps(2, start) infinite; +} + .xana-search-form input { flex: 1; min-width: 0; @@ -453,18 +461,8 @@ body, font-style: normal; } -.xana-search-wrap::after { - content: ""; - display: inline-block; - width: 1px; - height: 1.15em; - margin-left: 0.15rem; - background: var(--xana-accent); - opacity: 0.75; - animation: xana-caret-blink 900ms steps(2, start) infinite; -} - -.xana-search-wrap:focus-within::after { +.xana-search-wrap:focus-within .xana-search-form::after, +.xana-search-wrap:has(input:not(:placeholder-shown)) .xana-search-form::after { display: none; } @@ -884,14 +882,16 @@ body, } .xana-interface-tour { - position: absolute; + position: fixed; inset: 0; - z-index: 70; + z-index: 2147483000; pointer-events: none; + background: rgba(2, 6, 10, 0.28); } .xana-interface-tour-card { position: absolute; + z-index: 1; right: 1.5rem; top: 1.5rem; width: min(360px, calc(100% - 3rem)); @@ -954,11 +954,11 @@ body, .xana-tour-target { position: relative; - z-index: 72 !important; + z-index: 2147482999 !important; outline: 3px solid rgba(85, 214, 190, 0.72); outline-offset: 5px; border-radius: 0.9rem; - box-shadow: 0 0 0 9999px rgba(2, 6, 10, 0.38), 0 0 34px rgba(85, 214, 190, 0.34); + box-shadow: 0 0 34px rgba(85, 214, 190, 0.34); } html[data-xana-density="compact"] .xana-panel { @@ -1628,9 +1628,25 @@ a.xana-type-badge-link:focus-visible { .xana-fragment-highlight { position: relative; border-radius: 0.55rem; - outline: 2px solid rgba(255, 209, 102, 0.9); - background: rgba(255, 209, 102, 0.14); - box-shadow: 0 0 0 6px rgba(255, 209, 102, 0.08); + outline: 3px solid rgba(255, 209, 102, 0.95); + outline-offset: 4px; + background: linear-gradient(90deg, rgba(255, 209, 102, 0.22), rgba(85, 214, 190, 0.1)); + box-shadow: 0 0 0 7px rgba(255, 209, 102, 0.1), 0 0 28px rgba(255, 209, 102, 0.22); +} + +.xana-fragment-highlight::before { + content: attr(data-fragment-label); + display: inline-block; + margin: 0 0 0.55rem; + padding: 0.25rem 0.45rem; + border: 1px solid rgba(255, 209, 102, 0.55); + border-radius: 0.4rem; + background: rgba(255, 209, 102, 0.16); + color: #ffd166; + font-size: 0.68rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; } .xana-fragment-note { @@ -1745,6 +1761,96 @@ a.xana-type-badge-link:focus-visible { background: rgba(30, 41, 59, 0.8); } +.xana-trail-choice { + position: fixed; + inset: 0; + z-index: 2147483000; + display: grid; + place-items: center; + padding: 1rem; + background: rgba(2, 6, 10, 0.62); + backdrop-filter: blur(10px); +} + +.xana-trail-choice-card { + width: min(520px, 100%); + max-height: min(680px, calc(100svh - 2rem)); + overflow: auto; + padding: 1rem; + border: 1px solid var(--xana-accent-border); + border-radius: 0.9rem; + background: var(--xana-panel-bg); + color: var(--xana-text); + box-shadow: 0 26px 80px rgba(0, 0, 0, 0.45); +} + +.xana-trail-choice-kicker { + color: var(--xana-accent); + font-size: 0.68rem; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.xana-trail-choice-card h2 { + margin: 0.35rem 0 0.85rem; + font-size: 1.3rem; +} + +.xana-trail-choice-options { + display: grid; + gap: 0.65rem; +} + +.xana-trail-choice-options button { + display: grid; + grid-template-columns: 34px minmax(0, 1fr); + gap: 0.25rem 0.7rem; + align-items: start; + width: 100%; + min-height: 58px; + padding: 0.75rem; + border: 1px solid var(--xana-panel-border); + border-radius: 0.75rem; + background: var(--xana-surface-elevated); + color: var(--xana-text); + cursor: pointer; + text-align: left; +} + +.xana-trail-choice-options button span { + display: grid; + grid-row: 1 / span 2; + place-items: center; + width: 30px; + height: 30px; + border-radius: 999px; + background: var(--xana-accent-soft); + color: var(--xana-accent); + font-weight: 900; +} + +.xana-trail-choice-options button strong, +.xana-trail-choice-options button em { + min-width: 0; +} + +.xana-trail-choice-options button strong { + font-size: 0.98rem; +} + +.xana-trail-choice-options button em { + color: var(--xana-text-muted); + font-size: 0.84rem; + font-style: normal; + line-height: 1.35; +} + +.xana-trail-choice-options button:hover { + border-color: var(--xana-accent-border); + background: var(--xana-accent-soft); +} + .xana-media-warning { margin-top: 12px; padding: 10px 12px; diff --git a/exampleSite/content/trails/branching-orientation-trail.md b/exampleSite/content/trails/branching-orientation-trail.md new file mode 100644 index 00000000..c77f94bc --- /dev/null +++ b/exampleSite/content/trails/branching-orientation-trail.md @@ -0,0 +1,45 @@ +--- +title: "Branching Orientation Trail" +type: "trail" +importance: 5 +summary: "A choose-your-path trail used to test mobile-friendly branch choices in guided tours." +nodes: + - start-here + - xananode +branches: + - after: xananode + prompt: "Which path do you want to follow next?" + choices: + - label: "Historical lineage" + summary: "Bush, Engelbart, Nelson, Xanadu, and the ideas XanaNode extends." + nodes: + - vannevar-bush + - as-we-may-think + - douglas-engelbart + - nls + - ted-nelson + - project-xanadu + - transclusion + - label: "Protocol implementation" + summary: "The active XanaNode repositories in dependency order." + nodes: + - xananode-protocol-repo + - xananode-core-sdk-repo + - xananode-hugo-repo + - xananode-workspace-repo + - xananode-studio-repo +relationships: + - type: "starts_with" + target: "start-here" + - type: "continues_to" + target: "xananode" + - type: "continues_to" + target: "vannevar-bush" + - type: "continues_to" + target: "xananode-protocol-repo" +--- + +This trail deliberately branches after [XanaNode](/concept/xananode/) so the viewer can test a guided choose-your-path experience. + +{{< node ref="start-here" >}} +{{< node ref="xananode" >}} diff --git a/exampleSite/data/xananode_fragments.json b/exampleSite/data/xananode_fragments.json index 5873e95c..7c76b073 100644 --- a/exampleSite/data/xananode_fragments.json +++ b/exampleSite/data/xananode_fragments.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-06-18T04:24:11.885Z", + "generated_at": "2026-06-18T04:37:16.672Z", "nodes": { "xananode-implementation-stack-trail": { "versions": { @@ -129,6 +129,32 @@ "title": "Historical Lineage Trail", "type": "trail" }, + "branching-orientation-trail": { + "versions": { + "v1": { + "fragments": { + "1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.\n\n{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.2": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.2.1": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}" + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.\n\n{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.2": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.2.1": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}" + }, + "metadata": {} + } + }, + "title": "Branching Orientation Trail", + "type": "trail" + }, "static-publishing": { "versions": { "v1": { diff --git a/exampleSite/static/nodes/as-we-may-think.json b/exampleSite/static/nodes/as-we-may-think.json index e816c398..d91b94c4 100644 --- a/exampleSite/static/nodes/as-we-may-think.json +++ b/exampleSite/static/nodes/as-we-may-think.json @@ -8,31 +8,31 @@ "rights_status": "copyrighted", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-documents-memex-45", + "id": "xananode.example:rel/as-we-may-think-documents-memex-49", "type": "documents", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-50", "type": "supports", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-86", "type": "introduced_in", "source": "xananode.example:project/memex", "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-88", "type": "authored", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-130", "type": "deep_links_to", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" diff --git a/exampleSite/static/nodes/branching-orientation-trail.json b/exampleSite/static/nodes/branching-orientation-trail.json new file mode 100644 index 00000000..c237db13 --- /dev/null +++ b/exampleSite/static/nodes/branching-orientation-trail.json @@ -0,0 +1,33 @@ +{ + "id": "xananode.example:trail/branching-orientation-trail", + "title": "Branching Orientation Trail", + "type": "trail", + "importance": 5, + "summary": "A choose-your-path trail used to test mobile-friendly branch choices in guided tours.", + "relationships": [ + { + "id": "xananode.example:rel/branching-orientation-trail-starts_with-start-here-21", + "type": "starts_with", + "target": "xananode.example:essay/start-here", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-22", + "type": "continues_to", + "target": "xananode.example:concept/xananode", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-vannevar-bush-23", + "type": "continues_to", + "target": "xananode.example:person/vannevar-bush", + "direction": "outgoing" + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-protocol-repo-24", + "type": "continues_to", + "target": "xananode.example:source/xananode-protocol-repo", + "direction": "outgoing" + } + ] +} diff --git a/exampleSite/static/nodes/canonical-type-policy.json b/exampleSite/static/nodes/canonical-type-policy.json index d73cfd46..d4770414 100644 --- a/exampleSite/static/nodes/canonical-type-policy.json +++ b/exampleSite/static/nodes/canonical-type-policy.json @@ -6,19 +6,19 @@ "summary": "The governance rule that separates shared core node and relationship types from namespaced extension types.", "relationships": [ { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-201", "type": "features", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-211", "type": "context_for", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-212", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" diff --git a/exampleSite/static/nodes/civilizational-memory.json b/exampleSite/static/nodes/civilizational-memory.json index 541224f9..27174842 100644 --- a/exampleSite/static/nodes/civilizational-memory.json +++ b/exampleSite/static/nodes/civilizational-memory.json @@ -12,25 +12,25 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-207", "type": "enables", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-208", "type": "requires", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-209", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-210", "type": "requires", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-merge-without-collapse.json b/exampleSite/static/nodes/claim-merge-without-collapse.json index a9a6a1da..74fbe1ad 100644 --- a/exampleSite/static/nodes/claim-merge-without-collapse.json +++ b/exampleSite/static/nodes/claim-merge-without-collapse.json @@ -7,43 +7,43 @@ "summary": "Federated substrates should preserve authorship, provenance, and disagreement rather than forcing one merged source of truth.", "relationships": [ { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-107", "type": "arrives_at", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-164", "type": "arrives_at", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-167", "type": "supports", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-193", "type": "supports", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-216", "type": "has_claim", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-217", "type": "supports", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-218", "type": "contradicts", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-relationships-preserve-context.json b/exampleSite/static/nodes/claim-relationships-preserve-context.json index a3287446..3e4de005 100644 --- a/exampleSite/static/nodes/claim-relationships-preserve-context.json +++ b/exampleSite/static/nodes/claim-relationships-preserve-context.json @@ -7,37 +7,37 @@ "summary": "Typed relationships preserve why nodes are connected, while ordinary hyperlinks usually preserve only that a connection exists.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-44", "type": "supports", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-46", "type": "supports", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-124", "type": "supports", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-146", "type": "evidence_for", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-214", "type": "has_claim", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-215", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" diff --git a/exampleSite/static/nodes/claim-substrate-is-structure.json b/exampleSite/static/nodes/claim-substrate-is-structure.json index 10433c1d..1b32ab3b 100644 --- a/exampleSite/static/nodes/claim-substrate-is-structure.json +++ b/exampleSite/static/nodes/claim-substrate-is-structure.json @@ -7,19 +7,19 @@ "summary": "A knowledge substrate is not the information itself; it is the structure that determines how information relates, persists, and can be understood.", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-50", "type": "supports", "source": "xananode.example:source/as-we-may-think", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-170", "type": "has_claim", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-213", "type": "supports", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-levels.json b/exampleSite/static/nodes/compatibility-levels.json index eceb6356..7f53e3a9 100644 --- a/exampleSite/static/nodes/compatibility-levels.json +++ b/exampleSite/static/nodes/compatibility-levels.json @@ -12,37 +12,37 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-76", "type": "documents", "source": "xananode.example:schema/compatibility-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-169", "type": "supports", "source": "xananode.example:concept/known-implementations-registry", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-202", "type": "documents", "source": "xananode.example:concept/compatibility-report", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-204", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-205", "type": "requires", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-206", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-report-schema.json b/exampleSite/static/nodes/compatibility-report-schema.json index df365220..e0da849e 100644 --- a/exampleSite/static/nodes/compatibility-report-schema.json +++ b/exampleSite/static/nodes/compatibility-report-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema that validates compatibility reports between tools and substrates.", "relationships": [ { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-75", "type": "defines", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-76", "type": "documents", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-77", "type": "requires", "source": "xananode.example:concept/federation-example", "direction": "incoming" diff --git a/exampleSite/static/nodes/compatibility-report.json b/exampleSite/static/nodes/compatibility-report.json index 5c1c17f9..55d6c9eb 100644 --- a/exampleSite/static/nodes/compatibility-report.json +++ b/exampleSite/static/nodes/compatibility-report.json @@ -6,49 +6,49 @@ "summary": "A report that records how one substrate or tool understands another substrate, including compatibility level, supported schemas, warnings, and blocking issues.", "relationships": [ { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-68", "type": "requires", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-75", "type": "defines", "source": "xananode.example:schema/compatibility-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-163", "type": "uses", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-181", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-184", "type": "uses", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-202", "type": "documents", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-203", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-204", "type": "uses", "source": "xananode.example:concept/compatibility-levels", "direction": "incoming" diff --git a/exampleSite/static/nodes/custom-extension-substrate.json b/exampleSite/static/nodes/custom-extension-substrate.json index 4eb4cb17..0d264e3b 100644 --- a/exampleSite/static/nodes/custom-extension-substrate.json +++ b/exampleSite/static/nodes/custom-extension-substrate.json @@ -6,25 +6,25 @@ "summary": "An example substrate that defines namespaced domain-specific node and relationship types while preserving compatibility with XanaNode Core.", "relationships": [ { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-198", "type": "demonstrates", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-199", "type": "requires", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-200", "type": "uses", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-201", "type": "features", "target": "xananode.example:concept/canonical-type-policy", "direction": "outgoing" diff --git a/exampleSite/static/nodes/cytoscape-js.json b/exampleSite/static/nodes/cytoscape-js.json index cee22815..d4f570dc 100644 --- a/exampleSite/static/nodes/cytoscape-js.json +++ b/exampleSite/static/nodes/cytoscape-js.json @@ -6,13 +6,13 @@ "summary": "A JavaScript graph visualization library used by the reference viewer to render nodes and relationships.", "relationships": [ { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-27", "type": "represents", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-80", "type": "uses", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" diff --git a/exampleSite/static/nodes/deep-linking.json b/exampleSite/static/nodes/deep-linking.json index d347c7ad..bf8fcd0a 100644 --- a/exampleSite/static/nodes/deep-linking.json +++ b/exampleSite/static/nodes/deep-linking.json @@ -6,19 +6,19 @@ "summary": "Pointing to a specific addressable fragment rather than only to a whole document or node.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-126", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-192", + "id": "xananode.example:rel/deep-linking-enables-transclusion-196", "type": "enables", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-197", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" diff --git a/exampleSite/static/nodes/dispute-resolution.json b/exampleSite/static/nodes/dispute-resolution.json index 43693395..b71cc45c 100644 --- a/exampleSite/static/nodes/dispute-resolution.json +++ b/exampleSite/static/nodes/dispute-resolution.json @@ -6,31 +6,31 @@ "summary": "A governance process for preserving contested claims, identity matches, relationships, and moderation decisions without pretending disagreement has disappeared.", "relationships": [ { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-158", "type": "context_for", "source": "xananode.example:concept/moderation-model", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-192", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-193", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-194", "type": "context_for", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-195", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" diff --git a/exampleSite/static/nodes/douglas-engelbart.json b/exampleSite/static/nodes/douglas-engelbart.json index 92983d11..6bad7d86 100644 --- a/exampleSite/static/nodes/douglas-engelbart.json +++ b/exampleSite/static/nodes/douglas-engelbart.json @@ -12,19 +12,19 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-91", + "id": "xananode.example:rel/douglas-engelbart-created-nls-95", "type": "created", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-96", "type": "presented", "target": "xananode.example:source/mother-of-all-demos", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-97", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/federated-knowledge-substrates.json b/exampleSite/static/nodes/federated-knowledge-substrates.json index d4f9e3ad..ad89377d 100644 --- a/exampleSite/static/nodes/federated-knowledge-substrates.json +++ b/exampleSite/static/nodes/federated-knowledge-substrates.json @@ -6,103 +6,103 @@ "summary": "Independently authored XanaNode substrates that can interoperate, merge, compare, and preserve disagreement without a central authority.", "relationships": [ { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-29", "type": "requires", "target": "xananode.example:source/xananode-workspace-repo", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-58", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-108", "type": "context_for", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-112", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-117", "type": "explains", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-138", "type": "contrasts_with", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-143", "type": "requires", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-152", "type": "requires", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-179", "type": "defines", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-183", "type": "demonstrates", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-187", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-188", "type": "requires", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-189", "type": "requires", "target": "xananode.example:concept/federation-rules", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-190", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-191", "type": "alternative_to", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-206", "type": "requires", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-207", "type": "enables", "target": "xananode.example:concept/civilizational-memory", "direction": "outgoing" diff --git a/exampleSite/static/nodes/federation-example.json b/exampleSite/static/nodes/federation-example.json index 5cdf7f44..b00b2234 100644 --- a/exampleSite/static/nodes/federation-example.json +++ b/exampleSite/static/nodes/federation-example.json @@ -12,37 +12,37 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-74", "type": "requires", "target": "xananode.example:schema/merge-report-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-77", "type": "requires", "target": "xananode.example:schema/compatibility-report-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-183", "type": "demonstrates", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-184", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-181", + "id": "xananode.example:rel/federation-example-uses-merge-report-185", "type": "uses", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-186", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" diff --git a/exampleSite/static/nodes/federation-rules.json b/exampleSite/static/nodes/federation-rules.json index 9bb988e0..b82b3737 100644 --- a/exampleSite/static/nodes/federation-rules.json +++ b/exampleSite/static/nodes/federation-rules.json @@ -6,43 +6,43 @@ "summary": "The rules for exchanging, comparing, and preserving independently governed substrates without collapsing them into one authority.", "relationships": [ { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-157", "type": "requires", "target": "xananode.example:concept/moderation-model", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-179", "type": "defines", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-180", "type": "preserves", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-181", "type": "requires", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-178", + "id": "xananode.example:rel/federation-rules-requires-merge-report-182", "type": "requires", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-189", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-195", "type": "requires", "target": "xananode.example:concept/dispute-resolution", "direction": "outgoing" diff --git a/exampleSite/static/nodes/fragment-node.json b/exampleSite/static/nodes/fragment-node.json index 11a2db15..9dcb1bac 100644 --- a/exampleSite/static/nodes/fragment-node.json +++ b/exampleSite/static/nodes/fragment-node.json @@ -6,37 +6,37 @@ "summary": "A node representing a stable addressable portion of another source, publication, media object, or node.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-128", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-128", + "id": "xananode.example:rel/transclusion-uses-fragment-node-132", "type": "uses", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-136", "type": "contains", "source": "xananode.example:concept/substrate-node-record", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-172", + "id": "xananode.example:rel/transclusion-requires-fragment-node-176", "type": "requires", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-173", + "id": "xananode.example:rel/fragment-node-preserves-provenance-177", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-178", "type": "deep_links_to", "target": "xananode.example:source/mother-of-all-demos", "direction": "outgoing" diff --git a/exampleSite/static/nodes/hugo.json b/exampleSite/static/nodes/hugo.json index daf94f0e..b3d67e72 100644 --- a/exampleSite/static/nodes/hugo.json +++ b/exampleSite/static/nodes/hugo.json @@ -6,19 +6,19 @@ "summary": "A static site generator used by the example implementation to compile content into a public substrate viewer.", "relationships": [ { - "id": "xananode.example:rel/hugo-implements-static-publishing-22", + "id": "xananode.example:rel/hugo-implements-static-publishing-26", "type": "implements", "target": "xananode.example:technology/static-publishing", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-37", "type": "uses", "source": "xananode.example:source/xananode-hugo-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-79", "type": "uses", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" diff --git a/exampleSite/static/nodes/independent-moderation.json b/exampleSite/static/nodes/independent-moderation.json index a6235812..529715f1 100644 --- a/exampleSite/static/nodes/independent-moderation.json +++ b/exampleSite/static/nodes/independent-moderation.json @@ -6,43 +6,43 @@ "summary": "The principle that each substrate may govern its own content while still remaining interoperable with others.", "relationships": [ { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-139", "type": "threatens", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-156", "type": "defines", "source": "xananode.example:concept/moderation-model", "direction": "incoming" }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-174", "type": "contrasts_with", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-171", + "id": "xananode.example:rel/independent-moderation-requires-provenance-175", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-180", "type": "preserves", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-186", "type": "preserves", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-190", "type": "preserves", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/knowledge-substrate.json b/exampleSite/static/nodes/knowledge-substrate.json index 205810a1..c74f794f 100644 --- a/exampleSite/static/nodes/knowledge-substrate.json +++ b/exampleSite/static/nodes/knowledge-substrate.json @@ -12,85 +12,85 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-27", "type": "represents", "source": "xananode.example:technology/cytoscape-js", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-32", "type": "demonstrates", "source": "xananode.example:source/xananode-studio-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-48", "type": "supports", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-81", "type": "demonstrates", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-90", "type": "anticipated", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-101", "type": "explains", "target": "xananode.example:observation/link-rot", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-111", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-116", "type": "defines", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-140", "type": "alternative_to", "source": "xananode.example:concept/single-source-of-truth", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-170", "type": "has_claim", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-171", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-172", "type": "requires", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-173", "type": "enables", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-208", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" diff --git a/exampleSite/static/nodes/known-implementations-registry.json b/exampleSite/static/nodes/known-implementations-registry.json index 7ed38b9b..5e29d736 100644 --- a/exampleSite/static/nodes/known-implementations-registry.json +++ b/exampleSite/static/nodes/known-implementations-registry.json @@ -6,13 +6,13 @@ "summary": "A registry of tools, themes, validators, renderers, and substrates that claim some level of XanaNode compatibility.", "relationships": [ { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-168", "type": "documents", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-169", "type": "supports", "target": "xananode.example:concept/compatibility-levels", "direction": "outgoing" diff --git a/exampleSite/static/nodes/link-rot.json b/exampleSite/static/nodes/link-rot.json index 156b9df5..95d802ec 100644 --- a/exampleSite/static/nodes/link-rot.json +++ b/exampleSite/static/nodes/link-rot.json @@ -6,31 +6,31 @@ "summary": "A failure mode where references embedded in digital artifacts decay, move, disappear, or lose context over time.", "relationships": [ { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-45", "type": "documents", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-98", "type": "demonstrates", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" }, { - "id": "xananode.example:rel/link-rot-threatens-provenance-95", + "id": "xananode.example:rel/link-rot-threatens-provenance-99", "type": "threatens", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-100", "type": "supports", "source": "xananode.example:source/source-code-link-decay-study", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-101", "type": "explains", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" diff --git a/exampleSite/static/nodes/memex.json b/exampleSite/static/nodes/memex.json index 4bef5a7d..e207e58c 100644 --- a/exampleSite/static/nodes/memex.json +++ b/exampleSite/static/nodes/memex.json @@ -6,31 +6,31 @@ "summary": "Vannevar Bush's proposed associative memory device for navigating trails through recorded knowledge.", "relationships": [ { - "id": "xananode.example:rel/as-we-may-think-documents-memex-45", + "id": "xananode.example:rel/as-we-may-think-documents-memex-49", "type": "documents", "source": "xananode.example:source/as-we-may-think", "direction": "incoming" }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-86", "type": "introduced_in", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" }, { - "id": "xananode.example:rel/memex-anticipated-xananode-83", + "id": "xananode.example:rel/memex-anticipated-xananode-87", "type": "anticipated", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-89", "type": "proposed", "source": "xananode.example:person/vannevar-bush", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-memex-117", + "id": "xananode.example:rel/xananode-extends-memex-121", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-report-schema.json b/exampleSite/static/nodes/merge-report-schema.json index a5b7a8e2..3b1d30a9 100644 --- a/exampleSite/static/nodes/merge-report-schema.json +++ b/exampleSite/static/nodes/merge-report-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema that validates merge reports for substrate comparison and federation workflows.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-72", "type": "defines", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-73", "type": "documents", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-74", "type": "requires", "source": "xananode.example:concept/federation-example", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-report.json b/exampleSite/static/nodes/merge-report.json index e8632c91..d2aa727e 100644 --- a/exampleSite/static/nodes/merge-report.json +++ b/exampleSite/static/nodes/merge-report.json @@ -6,49 +6,49 @@ "summary": "A report that explains proposed mappings, conflicts, identity decisions, preserved disagreements, and unresolved issues when substrates are compared or merged.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-72", "type": "defines", "source": "xananode.example:schema/merge-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-158", + "id": "xananode.example:rel/merge-validation-uses-merge-report-162", "type": "uses", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-161", + "id": "xananode.example:rel/merge-report-documents-merge-validation-165", "type": "documents", "target": "xananode.example:concept/merge-validation", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-162", + "id": "xananode.example:rel/merge-report-preserves-provenance-166", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-167", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-178", + "id": "xananode.example:rel/federation-rules-requires-merge-report-182", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-181", + "id": "xananode.example:rel/federation-example-uses-merge-report-185", "type": "uses", "source": "xananode.example:concept/federation-example", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-194", "type": "context_for", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" diff --git a/exampleSite/static/nodes/merge-validation.json b/exampleSite/static/nodes/merge-validation.json index ba47932e..f316bcb6 100644 --- a/exampleSite/static/nodes/merge-validation.json +++ b/exampleSite/static/nodes/merge-validation.json @@ -6,73 +6,73 @@ "summary": "The process of safely combining or comparing substrates without destroying authorship, provenance, disagreement, or local moderation.", "relationships": [ { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-73", "type": "documents", "source": "xananode.example:schema/merge-report-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-155", + "id": "xananode.example:rel/merge-validation-requires-namespacing-159", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-156", + "id": "xananode.example:rel/merge-validation-requires-provenance-160", "type": "requires", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-161", "type": "requires", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-158", + "id": "xananode.example:rel/merge-validation-uses-merge-report-162", "type": "uses", "target": "xananode.example:concept/merge-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-163", "type": "uses", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-164", "type": "arrives_at", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-161", + "id": "xananode.example:rel/merge-report-documents-merge-validation-165", "type": "documents", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-188", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-203", "type": "requires", "target": "xananode.example:concept/compatibility-report", "direction": "outgoing" }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-210", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-216", "type": "has_claim", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" diff --git a/exampleSite/static/nodes/moderation-model.json b/exampleSite/static/nodes/moderation-model.json index ccd7447d..99589dad 100644 --- a/exampleSite/static/nodes/moderation-model.json +++ b/exampleSite/static/nodes/moderation-model.json @@ -6,19 +6,19 @@ "summary": "The governance model that lets each substrate decide its own trust, inclusion, review, and publication rules.", "relationships": [ { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-156", "type": "defines", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-157", "type": "requires", "source": "xananode.example:concept/federation-rules", "direction": "incoming" }, { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-158", "type": "context_for", "target": "xananode.example:concept/dispute-resolution", "direction": "outgoing" diff --git a/exampleSite/static/nodes/mother-of-all-demos.json b/exampleSite/static/nodes/mother-of-all-demos.json index 4b9ac1fb..cf8fc083 100644 --- a/exampleSite/static/nodes/mother-of-all-demos.json +++ b/exampleSite/static/nodes/mother-of-all-demos.json @@ -7,31 +7,31 @@ "source_url": "https://www.dougengelbart.org/content/view/209/", "relationships": [ { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-47", "type": "documents", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-48", "type": "supports", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-84", "type": "demonstrates", "target": "xananode.example:project/nls", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-96", "type": "presented", "source": "xananode.example:person/douglas-engelbart", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-178", "type": "deep_links_to", "source": "xananode.example:concept/fragment-node", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespace-registry.json b/exampleSite/static/nodes/namespace-registry.json index 91983c13..f2d62cd9 100644 --- a/exampleSite/static/nodes/namespace-registry.json +++ b/exampleSite/static/nodes/namespace-registry.json @@ -6,25 +6,25 @@ "summary": "A registry of known namespace identifiers used to avoid collisions and help tools recognize who owns a substrate, schema, or extension vocabulary.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-69", "type": "defines", "source": "xananode.example:schema/namespace-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-154", "type": "implements", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-155", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-199", "type": "requires", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespace-schema.json b/exampleSite/static/nodes/namespace-schema.json index c6832be8..60903485 100644 --- a/exampleSite/static/nodes/namespace-schema.json +++ b/exampleSite/static/nodes/namespace-schema.json @@ -7,19 +7,19 @@ "summary": "The JSON Schema for namespace registry entries.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-69", "type": "defines", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-70", "type": "supports", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-71", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" diff --git a/exampleSite/static/nodes/namespacing.json b/exampleSite/static/nodes/namespacing.json index 05625fb3..0a98fd30 100644 --- a/exampleSite/static/nodes/namespacing.json +++ b/exampleSite/static/nodes/namespacing.json @@ -6,49 +6,49 @@ "summary": "A way to identify which substrate or schema owns a node type, relationship type, node, or fragment.", "relationships": [ { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-70", "type": "supports", "source": "xananode.example:schema/namespace-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-137", "type": "requires", "source": "xananode.example:concept/substrate-manifest", "direction": "incoming" }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-137", + "id": "xananode.example:rel/namespacing-enables-schema-extension-141", "type": "enables", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-153", "type": "clarifies", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-154", "type": "implements", "source": "xananode.example:concept/namespace-registry", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-155", + "id": "xananode.example:rel/merge-validation-requires-namespacing-159", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-187", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-212", "type": "requires", "source": "xananode.example:concept/canonical-type-policy", "direction": "incoming" diff --git a/exampleSite/static/nodes/nls.json b/exampleSite/static/nodes/nls.json index 1890e716..34b68771 100644 --- a/exampleSite/static/nodes/nls.json +++ b/exampleSite/static/nodes/nls.json @@ -6,25 +6,25 @@ "summary": "Douglas Engelbart's oN-Line System, an early interactive computing environment for augmenting human intellect.", "relationships": [ { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-47", "type": "documents", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-84", "type": "demonstrates", "source": "xananode.example:source/mother-of-all-demos", "direction": "incoming" }, { - "id": "xananode.example:rel/nls-anticipated-xananode-81", + "id": "xananode.example:rel/nls-anticipated-xananode-85", "type": "anticipated", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-91", + "id": "xananode.example:rel/douglas-engelbart-created-nls-95", "type": "created", "source": "xananode.example:person/douglas-engelbart", "direction": "incoming" diff --git a/exampleSite/static/nodes/project-xanadu.json b/exampleSite/static/nodes/project-xanadu.json index afe9282b..040d4339 100644 --- a/exampleSite/static/nodes/project-xanadu.json +++ b/exampleSite/static/nodes/project-xanadu.json @@ -6,31 +6,31 @@ "summary": "Ted Nelson's long-running hypertext project focused on deep linking, transclusion, versioning, and visible interconnection.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-42", "type": "documents", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-82", "type": "defines", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-83", "type": "influenced", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-91", "type": "created", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-116", + "id": "xananode.example:rel/xananode-extends-project-xanadu-120", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" diff --git a/exampleSite/static/nodes/protocol-artifacts-trail.json b/exampleSite/static/nodes/protocol-artifacts-trail.json index 9f5ee8e9..0e0c8d24 100644 --- a/exampleSite/static/nodes/protocol-artifacts-trail.json +++ b/exampleSite/static/nodes/protocol-artifacts-trail.json @@ -42,7 +42,7 @@ "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-115", "type": "continues_to", "source": "xananode.example:essay/start-here", "direction": "incoming" diff --git a/exampleSite/static/nodes/protocol-artifacts.json b/exampleSite/static/nodes/protocol-artifacts.json index 37dfa452..7e8247a5 100644 --- a/exampleSite/static/nodes/protocol-artifacts.json +++ b/exampleSite/static/nodes/protocol-artifacts.json @@ -18,49 +18,49 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-35", "type": "documents", "source": "xananode.example:source/xananode-protocol-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-109", "type": "explains", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-147", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-148", "type": "contains", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-149", "type": "contains", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-150", "type": "contains", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-151", "type": "contains", "target": "xananode.example:concept/review-suggestions", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-152", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/provenance.json b/exampleSite/static/nodes/provenance.json index 446de064..bdd0a18c 100644 --- a/exampleSite/static/nodes/provenance.json +++ b/exampleSite/static/nodes/provenance.json @@ -6,85 +6,85 @@ "summary": "The visible lineage of where information came from, how it changed, who asserted it, and what evidence it depends on.", "relationships": [ { - "id": "xananode.example:rel/link-rot-threatens-provenance-95", + "id": "xananode.example:rel/link-rot-threatens-provenance-99", "type": "threatens", "source": "xananode.example:observation/link-rot", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-preserves-provenance-115", + "id": "xananode.example:rel/xananode-preserves-provenance-119", "type": "preserves", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-122", "type": "threatens", "source": "xananode.example:concept/unlabeled-hyperlink", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-127", "type": "preserves", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-127", + "id": "xananode.example:rel/transclusion-preserves-provenance-131", "type": "preserves", "source": "xananode.example:concept/transclusion", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-134", "type": "preserves", "source": "xananode.example:concept/substrate-relationship-list", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-146", "type": "evidence_for", "source": "xananode.example:claim/claim-relationships-preserve-context", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-156", + "id": "xananode.example:rel/merge-validation-requires-provenance-160", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-162", + "id": "xananode.example:rel/merge-report-preserves-provenance-166", "type": "preserves", "source": "xananode.example:concept/merge-report", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-171", "type": "requires", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-171", + "id": "xananode.example:rel/independent-moderation-requires-provenance-175", "type": "requires", "source": "xananode.example:concept/independent-moderation", "direction": "incoming" }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-173", + "id": "xananode.example:rel/fragment-node-preserves-provenance-177", "type": "preserves", "source": "xananode.example:concept/fragment-node", "direction": "incoming" }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-192", "type": "requires", "source": "xananode.example:concept/dispute-resolution", "direction": "incoming" }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-209", "type": "requires", "source": "xananode.example:concept/civilizational-memory", "direction": "incoming" diff --git a/exampleSite/static/nodes/review-suggestions.json b/exampleSite/static/nodes/review-suggestions.json index 4c51bbca..a6f5405b 100644 --- a/exampleSite/static/nodes/review-suggestions.json +++ b/exampleSite/static/nodes/review-suggestions.json @@ -6,19 +6,19 @@ "summary": "Generated, user-approved suggestions for autolinking node titles, aliases, and repeated fragments without rewriting content automatically.", "relationships": [ { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-144", "type": "uses", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-145", "type": "uses", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-151", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/schema-extension.json b/exampleSite/static/nodes/schema-extension.json index 0735ef52..2cbbf15d 100644 --- a/exampleSite/static/nodes/schema-extension.json +++ b/exampleSite/static/nodes/schema-extension.json @@ -6,61 +6,61 @@ "summary": "The ability for a substrate to add custom node or relationship types while remaining compatible with XanaNode Core.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-59", "type": "enables", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-71", "type": "requires", "target": "xananode.example:schema/namespace-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-137", + "id": "xananode.example:rel/namespacing-enables-schema-extension-141", "type": "enables", "source": "xananode.example:concept/namespacing", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-142", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-143", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-153", "type": "clarifies", "source": "xananode.example:concept/namespacing", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-155", "type": "requires", "target": "xananode.example:concept/namespace-registry", "direction": "outgoing" }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-161", "type": "requires", "source": "xananode.example:concept/merge-validation", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-198", "type": "demonstrates", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-211", "type": "context_for", "source": "xananode.example:concept/canonical-type-policy", "direction": "incoming" diff --git a/exampleSite/static/nodes/single-source-of-truth.json b/exampleSite/static/nodes/single-source-of-truth.json index e3dea821..fea83a0b 100644 --- a/exampleSite/static/nodes/single-source-of-truth.json +++ b/exampleSite/static/nodes/single-source-of-truth.json @@ -6,43 +6,43 @@ "summary": "A centralized model where one canonical location or authority controls what is treated as valid.", "relationships": [ { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-113", "type": "contrasts_with", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-138", "type": "contrasts_with", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-139", "type": "threatens", "target": "xananode.example:concept/independent-moderation", "direction": "outgoing" }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-140", "type": "alternative_to", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-174", "type": "contrasts_with", "source": "xananode.example:concept/independent-moderation", "direction": "incoming" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-191", "type": "alternative_to", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-218", "type": "contradicts", "source": "xananode.example:claim/claim-merge-without-collapse", "direction": "incoming" diff --git a/exampleSite/static/nodes/source-code-link-decay-study.json b/exampleSite/static/nodes/source-code-link-decay-study.json index 877aadf0..b9810028 100644 --- a/exampleSite/static/nodes/source-code-link-decay-study.json +++ b/exampleSite/static/nodes/source-code-link-decay-study.json @@ -8,19 +8,19 @@ "rights_status": "open-access", "relationships": [ { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-45", "type": "documents", "target": "xananode.example:observation/link-rot", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-46", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-100", "type": "supports", "target": "xananode.example:observation/link-rot", "direction": "outgoing" diff --git a/exampleSite/static/nodes/start-here.json b/exampleSite/static/nodes/start-here.json index ff4eaa78..dd0f12e5 100644 --- a/exampleSite/static/nodes/start-here.json +++ b/exampleSite/static/nodes/start-here.json @@ -12,37 +12,43 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-xananode-106", + "id": "xananode.example:rel/branching-orientation-trail-starts_with-start-here-21", + "type": "starts_with", + "source": "xananode.example:trail/branching-orientation-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/start-here-explains-xananode-110", "type": "explains", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-111", "type": "explains", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-112", "type": "explains", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-113", "type": "contrasts_with", "target": "xananode.example:concept/single-source-of-truth", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-114", "type": "continues_to", "target": "xananode.example:trail/xananode-core-trail", "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-115", "type": "continues_to", "target": "xananode.example:trail/protocol-artifacts-trail", "direction": "outgoing" diff --git a/exampleSite/static/nodes/static-publishing.json b/exampleSite/static/nodes/static-publishing.json index af702801..8f8c4fb7 100644 --- a/exampleSite/static/nodes/static-publishing.json +++ b/exampleSite/static/nodes/static-publishing.json @@ -6,13 +6,13 @@ "summary": "Publishing files that can be hosted without a dynamic application server.", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-25", "type": "enables", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/hugo-implements-static-publishing-22", + "id": "xananode.example:rel/hugo-implements-static-publishing-26", "type": "implements", "source": "xananode.example:technology/hugo", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-manifest-schema.json b/exampleSite/static/nodes/substrate-manifest-schema.json index a0b71d90..8e851aa1 100644 --- a/exampleSite/static/nodes/substrate-manifest-schema.json +++ b/exampleSite/static/nodes/substrate-manifest-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates a XanaNode substrate manifest.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-55", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-66", "type": "defines", "target": "xananode.example:concept/substrate-manifest", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-67", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-68", "type": "requires", "source": "xananode.example:concept/compatibility-report", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-manifest.json b/exampleSite/static/nodes/substrate-manifest.json index d3381b49..c031d4d8 100644 --- a/exampleSite/static/nodes/substrate-manifest.json +++ b/exampleSite/static/nodes/substrate-manifest.json @@ -12,31 +12,31 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-66", "type": "defines", "source": "xananode.example:schema/substrate-manifest-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-137", "type": "requires", "target": "xananode.example:concept/namespacing", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-148", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-200", "type": "uses", "source": "xananode.example:concept/custom-extension-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-205", "type": "requires", "source": "xananode.example:concept/compatibility-levels", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-node-record.json b/exampleSite/static/nodes/substrate-node-record.json index 4eb43a28..c8dc93ab 100644 --- a/exampleSite/static/nodes/substrate-node-record.json +++ b/exampleSite/static/nodes/substrate-node-record.json @@ -12,31 +12,31 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-40", "type": "uses", "source": "xananode.example:source/xananode-core-sdk-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-63", "type": "defines", "source": "xananode.example:schema/substrate-node-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-135", "type": "uses", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-136", "type": "contains", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-149", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-node-schema.json b/exampleSite/static/nodes/substrate-node-schema.json index f26b0357..8e9afb50 100644 --- a/exampleSite/static/nodes/substrate-node-schema.json +++ b/exampleSite/static/nodes/substrate-node-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates machine-readable XanaNode node records.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-56", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-63", "type": "defines", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-64", "type": "uses", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-65", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-relationship-list.json b/exampleSite/static/nodes/substrate-relationship-list.json index 1706d380..274c84ac 100644 --- a/exampleSite/static/nodes/substrate-relationship-list.json +++ b/exampleSite/static/nodes/substrate-relationship-list.json @@ -12,31 +12,31 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-41", "type": "uses", "source": "xananode.example:source/xananode-core-sdk-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-60", "type": "defines", "source": "xananode.example:schema/substrate-relationships-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-133", "type": "uses", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-134", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-150", "type": "contains", "source": "xananode.example:concept/protocol-artifacts", "direction": "incoming" diff --git a/exampleSite/static/nodes/substrate-relationships-schema.json b/exampleSite/static/nodes/substrate-relationships-schema.json index d2cbb73a..adb02c0d 100644 --- a/exampleSite/static/nodes/substrate-relationships-schema.json +++ b/exampleSite/static/nodes/substrate-relationships-schema.json @@ -7,25 +7,25 @@ "summary": "The JSON Schema that validates the protocol relationship list for a substrate.", "relationships": [ { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-57", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-60", "type": "defines", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-61", "type": "uses", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-62", "type": "contains", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" diff --git a/exampleSite/static/nodes/ted-nelson.json b/exampleSite/static/nodes/ted-nelson.json index 5391e602..75e5d133 100644 --- a/exampleSite/static/nodes/ted-nelson.json +++ b/exampleSite/static/nodes/ted-nelson.json @@ -12,25 +12,25 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-91", "type": "created", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-92", "type": "introduced", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-93", "type": "authored", "target": "xananode.example:source/xanadu-document-interconnection", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-94", "type": "influenced", "target": "xananode.example:concept/xananode", "direction": "outgoing" diff --git a/exampleSite/static/nodes/transclusion.json b/exampleSite/static/nodes/transclusion.json index 24d8b6b7..ae5d0f79 100644 --- a/exampleSite/static/nodes/transclusion.json +++ b/exampleSite/static/nodes/transclusion.json @@ -6,55 +6,55 @@ "summary": "Including a specific versioned fragment by reference rather than copying it, preserving identity, attribution, and revision lineage.", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-43", "type": "defines", "source": "xananode.example:source/xanadu-document-interconnection", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-82", "type": "defines", "source": "xananode.example:project/project-xanadu", "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-92", "type": "introduced", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-125", "type": "enables", "source": "xananode.example:concept/tumbler-addressing", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-127", + "id": "xananode.example:rel/transclusion-preserves-provenance-131", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-128", + "id": "xananode.example:rel/transclusion-uses-fragment-node-132", "type": "uses", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-145", "type": "uses", "source": "xananode.example:concept/review-suggestions", "direction": "incoming" }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-172", + "id": "xananode.example:rel/transclusion-requires-fragment-node-176", "type": "requires", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-192", + "id": "xananode.example:rel/deep-linking-enables-transclusion-196", "type": "enables", "source": "xananode.example:concept/deep-linking", "direction": "incoming" diff --git a/exampleSite/static/nodes/tumbler-addressing.json b/exampleSite/static/nodes/tumbler-addressing.json index 2c2517bf..8ca25b41 100644 --- a/exampleSite/static/nodes/tumbler-addressing.json +++ b/exampleSite/static/nodes/tumbler-addressing.json @@ -6,37 +6,37 @@ "summary": "Persistent, location-independent addressing for nodes, relationships, revisions, and fragments inside a substrate.", "relationships": [ { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-125", "type": "enables", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-126", "type": "enables", "target": "xananode.example:concept/deep-linking", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-127", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-128", "type": "enables", "target": "xananode.example:concept/fragment-node", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-129", "type": "extends", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-130", "type": "deep_links_to", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" diff --git a/exampleSite/static/nodes/typed-relationships.json b/exampleSite/static/nodes/typed-relationships.json index 1b323099..cf71c614 100644 --- a/exampleSite/static/nodes/typed-relationships.json +++ b/exampleSite/static/nodes/typed-relationships.json @@ -6,37 +6,37 @@ "summary": "Explicit relationship meanings that explain why two nodes are connected.", "relationships": [ { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-51", "type": "defines", "source": "xananode.example:schema/xananode-relationship-types", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-123", "type": "contrasts_with", "target": "xananode.example:concept/unlabeled-hyperlink", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-124", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-144", "type": "uses", "source": "xananode.example:concept/review-suggestions", "direction": "incoming" }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-172", "type": "requires", "source": "xananode.example:concept/knowledge-substrate", "direction": "incoming" }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-214", "type": "has_claim", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" diff --git a/exampleSite/static/nodes/unlabeled-hyperlink.json b/exampleSite/static/nodes/unlabeled-hyperlink.json index 70b64747..92982565 100644 --- a/exampleSite/static/nodes/unlabeled-hyperlink.json +++ b/exampleSite/static/nodes/unlabeled-hyperlink.json @@ -6,31 +6,31 @@ "summary": "A link that connects two resources without preserving why the connection matters.", "relationships": [ { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-98", "type": "demonstrates", "source": "xananode.example:observation/link-rot", "direction": "incoming" }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-122", "type": "threatens", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-123", "type": "contrasts_with", "source": "xananode.example:concept/typed-relationships", "direction": "incoming" }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-197", "type": "contrasts_with", "source": "xananode.example:concept/deep-linking", "direction": "incoming" }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-215", "type": "contrasts_with", "source": "xananode.example:claim/claim-relationships-preserve-context", "direction": "incoming" diff --git a/exampleSite/static/nodes/vannevar-bush.json b/exampleSite/static/nodes/vannevar-bush.json index 7d0af01c..34966cf6 100644 --- a/exampleSite/static/nodes/vannevar-bush.json +++ b/exampleSite/static/nodes/vannevar-bush.json @@ -12,19 +12,25 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", + "id": "xananode.example:rel/branching-orientation-trail-continues_to-vannevar-bush-23", + "type": "continues_to", + "source": "xananode.example:trail/branching-orientation-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-88", "type": "authored", "target": "xananode.example:source/as-we-may-think", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-89", "type": "proposed", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-90", "type": "anticipated", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" diff --git a/exampleSite/static/nodes/what-is-xananode.json b/exampleSite/static/nodes/what-is-xananode.json index 76eb5c6b..6a4d0271 100644 --- a/exampleSite/static/nodes/what-is-xananode.json +++ b/exampleSite/static/nodes/what-is-xananode.json @@ -6,31 +6,31 @@ "summary": "XanaNode is a protocol for interoperable knowledge substrates, not merely a graph viewer or static site theme.", "relationships": [ { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-105", "type": "defines", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-106", "type": "explains", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-107", "type": "arrives_at", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-108", "type": "context_for", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-109", "type": "explains", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xanadu-document-interconnection.json b/exampleSite/static/nodes/xanadu-document-interconnection.json index 3007f2ed..5ec5a3fa 100644 --- a/exampleSite/static/nodes/xanadu-document-interconnection.json +++ b/exampleSite/static/nodes/xanadu-document-interconnection.json @@ -8,31 +8,31 @@ "rights_status": "copyrighted", "relationships": [ { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-42", "type": "documents", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-43", "type": "defines", "target": "xananode.example:concept/transclusion", "direction": "outgoing" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-44", "type": "supports", "target": "xananode.example:claim/claim-relationships-preserve-context", "direction": "outgoing" }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-93", "type": "authored", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-213", "type": "supports", "target": "xananode.example:claim/claim-substrate-is-structure", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-core-schema.json b/exampleSite/static/nodes/xananode-core-schema.json index 75d06096..9244f0b3 100644 --- a/exampleSite/static/nodes/xananode-core-schema.json +++ b/exampleSite/static/nodes/xananode-core-schema.json @@ -7,121 +7,121 @@ "summary": "The canonical core node and relationship vocabulary used to make independent substrates interoperable.", "relationships": [ { - "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-28", "type": "uses", "source": "xananode.example:source/xananode-workspace-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-30", "type": "uses", "source": "xananode.example:source/xananode-studio-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-34", "type": "defines", "source": "xananode.example:source/xananode-protocol-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-38", "type": "uses", "source": "xananode.example:source/xananode-hugo-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-39", "type": "implements", "source": "xananode.example:source/xananode-core-sdk-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-53", "type": "defines", "target": "xananode.example:schema/xananode-node-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-54", "type": "defines", "target": "xananode.example:schema/xananode-relationship-types", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-55", "type": "defines", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-56", "type": "defines", "target": "xananode.example:schema/substrate-node-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-57", "type": "defines", "target": "xananode.example:schema/substrate-relationships-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-58", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-59", "type": "enables", "target": "xananode.example:concept/schema-extension", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-62", "type": "contains", "target": "xananode.example:schema/substrate-relationships-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-65", "type": "contains", "target": "xananode.example:schema/substrate-node-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-67", "type": "contains", "target": "xananode.example:schema/substrate-manifest-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-118", "type": "requires", "source": "xananode.example:concept/xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-142", "type": "requires", "source": "xananode.example:concept/schema-extension", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-147", "type": "defines", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-173", "type": "enables", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-217", "type": "supports", "target": "xananode.example:claim/claim-merge-without-collapse", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-core-sdk-repo.json b/exampleSite/static/nodes/xananode-core-sdk-repo.json index 3d6c7780..6a191073 100644 --- a/exampleSite/static/nodes/xananode-core-sdk-repo.json +++ b/exampleSite/static/nodes/xananode-core-sdk-repo.json @@ -14,19 +14,19 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-39", "type": "implements", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-40", "type": "uses", "target": "xananode.example:concept/substrate-node-record", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-41", "type": "uses", "target": "xananode.example:concept/substrate-relationship-list", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-core-trail.json b/exampleSite/static/nodes/xananode-core-trail.json index f649f4af..3f0b9f04 100644 --- a/exampleSite/static/nodes/xananode-core-trail.json +++ b/exampleSite/static/nodes/xananode-core-trail.json @@ -36,7 +36,7 @@ "direction": "outgoing" }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-114", "type": "continues_to", "source": "xananode.example:essay/start-here", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-hugo-repo.json b/exampleSite/static/nodes/xananode-hugo-repo.json index d38ec314..42b35900 100644 --- a/exampleSite/static/nodes/xananode-hugo-repo.json +++ b/exampleSite/static/nodes/xananode-hugo-repo.json @@ -14,19 +14,19 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-36", "type": "implements", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-37", "type": "uses", "target": "xananode.example:technology/hugo", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-38", "type": "uses", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-hugo-theme.json b/exampleSite/static/nodes/xananode-hugo-theme.json index cbb252a6..8b09c205 100644 --- a/exampleSite/static/nodes/xananode-hugo-theme.json +++ b/exampleSite/static/nodes/xananode-hugo-theme.json @@ -8,67 +8,67 @@ "primary_media": "xananode.example:media/xananode-icon", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-25", "type": "enables", "target": "xananode.example:technology/static-publishing", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-31", "type": "uses", "source": "xananode.example:source/xananode-studio-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-36", "type": "implements", "source": "xananode.example:source/xananode-hugo-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-78", "type": "implements", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-79", "type": "uses", "target": "xananode.example:technology/hugo", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-80", "type": "uses", "target": "xananode.example:technology/cytoscape-js", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-81", "type": "demonstrates", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-102", "type": "has_primary_media", "target": "xananode.example:media/xananode-icon", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-103", "type": "depicts", "source": "xananode.example:media/xananode-icon", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-106", "type": "explains", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-168", "type": "documents", "source": "xananode.example:concept/known-implementations-registry", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-icon.json b/exampleSite/static/nodes/xananode-icon.json index 93c3add8..14130e3c 100644 --- a/exampleSite/static/nodes/xananode-icon.json +++ b/exampleSite/static/nodes/xananode-icon.json @@ -8,19 +8,19 @@ "rights_status": "open-source", "relationships": [ { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-102", "type": "has_primary_media", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-103", "type": "depicts", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-100", + "id": "xananode.example:rel/xananode-icon-represents-xananode-104", "type": "represents", "target": "xananode.example:concept/xananode", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-node-types.json b/exampleSite/static/nodes/xananode-node-types.json index 75ce3bda..5d1756d5 100644 --- a/exampleSite/static/nodes/xananode-node-types.json +++ b/exampleSite/static/nodes/xananode-node-types.json @@ -7,25 +7,25 @@ "summary": "The canonical node type registry for XanaNode substrates.", "relationships": [ { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", + "id": "xananode.example:rel/xananode-node-types-defines-xananode-52", "type": "defines", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-53", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-64", "type": "uses", "source": "xananode.example:schema/substrate-node-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-135", "type": "uses", "source": "xananode.example:concept/substrate-node-record", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-protocol-repo.json b/exampleSite/static/nodes/xananode-protocol-repo.json index 0fd6646e..7acf7198 100644 --- a/exampleSite/static/nodes/xananode-protocol-repo.json +++ b/exampleSite/static/nodes/xananode-protocol-repo.json @@ -14,19 +14,25 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-protocol-repo-24", + "type": "continues_to", + "source": "xananode.example:trail/branching-orientation-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-33", "type": "defines", "target": "xananode.example:concept/xananode", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-34", "type": "defines", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-35", "type": "documents", "target": "xananode.example:concept/protocol-artifacts", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-relationship-types.json b/exampleSite/static/nodes/xananode-relationship-types.json index 7c68a43f..55f6a388 100644 --- a/exampleSite/static/nodes/xananode-relationship-types.json +++ b/exampleSite/static/nodes/xananode-relationship-types.json @@ -7,25 +7,25 @@ "summary": "The canonical relationship type registry for XanaNode substrates.", "relationships": [ { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-51", "type": "defines", "target": "xananode.example:concept/typed-relationships", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-54", "type": "defines", "source": "xananode.example:schema/xananode-core-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-61", "type": "uses", "source": "xananode.example:schema/substrate-relationships-schema", "direction": "incoming" }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-133", "type": "uses", "source": "xananode.example:concept/substrate-relationship-list", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode-studio-repo.json b/exampleSite/static/nodes/xananode-studio-repo.json index 2397ef3d..435637d7 100644 --- a/exampleSite/static/nodes/xananode-studio-repo.json +++ b/exampleSite/static/nodes/xananode-studio-repo.json @@ -14,19 +14,19 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-30", "type": "uses", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-31", "type": "uses", "target": "xananode.example:project/xananode-hugo-theme", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-32", "type": "demonstrates", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" diff --git a/exampleSite/static/nodes/xananode-workspace-repo.json b/exampleSite/static/nodes/xananode-workspace-repo.json index 7b4d49b9..c634c9a6 100644 --- a/exampleSite/static/nodes/xananode-workspace-repo.json +++ b/exampleSite/static/nodes/xananode-workspace-repo.json @@ -14,13 +14,13 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-28", "type": "uses", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-29", "type": "requires", "source": "xananode.example:concept/federated-knowledge-substrates", "direction": "incoming" diff --git a/exampleSite/static/nodes/xananode.json b/exampleSite/static/nodes/xananode.json index 355ee70c..63ee9ba0 100644 --- a/exampleSite/static/nodes/xananode.json +++ b/exampleSite/static/nodes/xananode.json @@ -19,109 +19,115 @@ "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-22", + "type": "continues_to", + "source": "xananode.example:trail/branching-orientation-trail", + "direction": "incoming" + }, + { + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-33", "type": "defines", "source": "xananode.example:source/xananode-protocol-repo", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", + "id": "xananode.example:rel/xananode-node-types-defines-xananode-52", "type": "defines", "source": "xananode.example:schema/xananode-node-types", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-78", "type": "implements", "source": "xananode.example:project/xananode-hugo-theme", "direction": "incoming" }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-83", "type": "influenced", "source": "xananode.example:project/project-xanadu", "direction": "incoming" }, { - "id": "xananode.example:rel/nls-anticipated-xananode-81", + "id": "xananode.example:rel/nls-anticipated-xananode-85", "type": "anticipated", "source": "xananode.example:project/nls", "direction": "incoming" }, { - "id": "xananode.example:rel/memex-anticipated-xananode-83", + "id": "xananode.example:rel/memex-anticipated-xananode-87", "type": "anticipated", "source": "xananode.example:project/memex", "direction": "incoming" }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-94", "type": "influenced", "source": "xananode.example:person/ted-nelson", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-97", "type": "extends", "target": "xananode.example:person/douglas-engelbart", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-100", + "id": "xananode.example:rel/xananode-icon-represents-xananode-104", "type": "represents", "source": "xananode.example:media/xananode-icon", "direction": "incoming" }, { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-105", "type": "defines", "source": "xananode.example:essay/what-is-xananode", "direction": "incoming" }, { - "id": "xananode.example:rel/start-here-explains-xananode-106", + "id": "xananode.example:rel/start-here-explains-xananode-110", "type": "explains", "source": "xananode.example:essay/start-here", "direction": "incoming" }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-116", "type": "defines", "target": "xananode.example:concept/knowledge-substrate", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-117", "type": "explains", "target": "xananode.example:concept/federated-knowledge-substrates", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-118", "type": "requires", "target": "xananode.example:schema/xananode-core-schema", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-preserves-provenance-115", + "id": "xananode.example:rel/xananode-preserves-provenance-119", "type": "preserves", "target": "xananode.example:concept/provenance", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-116", + "id": "xananode.example:rel/xananode-extends-project-xanadu-120", "type": "extends", "target": "xananode.example:project/project-xanadu", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-memex-117", + "id": "xananode.example:rel/xananode-extends-memex-121", "type": "extends", "target": "xananode.example:project/memex", "direction": "outgoing" }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-129", "type": "extends", "target": "xananode.example:concept/tumbler-addressing", "direction": "outgoing" diff --git a/exampleSite/static/relationships.json b/exampleSite/static/relationships.json index 67876e9d..4ec8a2e2 100644 --- a/exampleSite/static/relationships.json +++ b/exampleSite/static/relationships.json @@ -181,7 +181,43 @@ "summary": "Historical Lineage Trail arrives at XanaNode." }, { - "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-21", + "id": "xananode.example:rel/branching-orientation-trail-starts_with-start-here-21", + "source": "xananode.example:trail/branching-orientation-trail", + "target": "xananode.example:essay/start-here", + "type": "starts_with", + "weight": 3, + "visibility": "secondary", + "summary": "Branching Orientation Trail starts with Start Here." + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-22", + "source": "xananode.example:trail/branching-orientation-trail", + "target": "xananode.example:concept/xananode", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "Branching Orientation Trail continues to XanaNode." + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-vannevar-bush-23", + "source": "xananode.example:trail/branching-orientation-trail", + "target": "xananode.example:person/vannevar-bush", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "Branching Orientation Trail continues to Vannevar Bush." + }, + { + "id": "xananode.example:rel/branching-orientation-trail-continues_to-xananode-protocol-repo-24", + "source": "xananode.example:trail/branching-orientation-trail", + "target": "xananode.example:source/xananode-protocol-repo", + "type": "continues_to", + "weight": 3, + "visibility": "secondary", + "summary": "Branching Orientation Trail continues to XanaNode Protocol Repository." + }, + { + "id": "xananode.example:rel/xananode-hugo-theme-enables-static-publishing-25", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/static-publishing", "type": "enables", @@ -190,7 +226,7 @@ "summary": "XanaNode Hugo Theme enables Static Publishing." }, { - "id": "xananode.example:rel/hugo-implements-static-publishing-22", + "id": "xananode.example:rel/hugo-implements-static-publishing-26", "source": "xananode.example:technology/hugo", "target": "xananode.example:technology/static-publishing", "type": "implements", @@ -199,7 +235,7 @@ "summary": "Hugo implements Static Publishing." }, { - "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-23", + "id": "xananode.example:rel/cytoscape-js-represents-knowledge-substrate-27", "source": "xananode.example:technology/cytoscape-js", "target": "xananode.example:concept/knowledge-substrate", "type": "represents", @@ -208,7 +244,7 @@ "summary": "Cytoscape.js represents Knowledge Substrate." }, { - "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-24", + "id": "xananode.example:rel/xananode-workspace-repo-uses-xananode-core-schema-28", "source": "xananode.example:source/xananode-workspace-repo", "target": "xananode.example:schema/xananode-core-schema", "type": "uses", @@ -217,7 +253,7 @@ "summary": "XanaNode Workspace Repository uses XanaNode Core Schema." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-25", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-workspace-repo-29", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:source/xananode-workspace-repo", "type": "requires", @@ -226,7 +262,7 @@ "summary": "Federated Knowledge Substrates requires XanaNode Workspace Repository." }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-26", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-core-schema-30", "source": "xananode.example:source/xananode-studio-repo", "target": "xananode.example:schema/xananode-core-schema", "type": "uses", @@ -235,7 +271,7 @@ "summary": "XanaNode Studio Repository uses XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-27", + "id": "xananode.example:rel/xananode-studio-repo-uses-xananode-hugo-theme-31", "source": "xananode.example:source/xananode-studio-repo", "target": "xananode.example:project/xananode-hugo-theme", "type": "uses", @@ -244,7 +280,7 @@ "summary": "XanaNode Studio Repository uses XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-28", + "id": "xananode.example:rel/xananode-studio-repo-demonstrates-knowledge-substrate-32", "source": "xananode.example:source/xananode-studio-repo", "target": "xananode.example:concept/knowledge-substrate", "type": "demonstrates", @@ -253,7 +289,7 @@ "summary": "XanaNode Studio Repository demonstrates Knowledge Substrate." }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-29", + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-33", "source": "xananode.example:source/xananode-protocol-repo", "target": "xananode.example:concept/xananode", "type": "defines", @@ -262,7 +298,7 @@ "summary": "XanaNode Protocol Repository defines XanaNode." }, { - "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-30", + "id": "xananode.example:rel/xananode-protocol-repo-defines-xananode-core-schema-34", "source": "xananode.example:source/xananode-protocol-repo", "target": "xananode.example:schema/xananode-core-schema", "type": "defines", @@ -271,7 +307,7 @@ "summary": "XanaNode Protocol Repository defines XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-31", + "id": "xananode.example:rel/xananode-protocol-repo-documents-protocol-artifacts-35", "source": "xananode.example:source/xananode-protocol-repo", "target": "xananode.example:concept/protocol-artifacts", "type": "documents", @@ -280,7 +316,7 @@ "summary": "XanaNode Protocol Repository documents Protocol Artifacts." }, { - "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-32", + "id": "xananode.example:rel/xananode-hugo-repo-implements-xananode-hugo-theme-36", "source": "xananode.example:source/xananode-hugo-repo", "target": "xananode.example:project/xananode-hugo-theme", "type": "implements", @@ -289,7 +325,7 @@ "summary": "XanaNode Hugo Repository implements XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-33", + "id": "xananode.example:rel/xananode-hugo-repo-uses-hugo-37", "source": "xananode.example:source/xananode-hugo-repo", "target": "xananode.example:technology/hugo", "type": "uses", @@ -298,7 +334,7 @@ "summary": "XanaNode Hugo Repository uses Hugo." }, { - "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-34", + "id": "xananode.example:rel/xananode-hugo-repo-uses-xananode-core-schema-38", "source": "xananode.example:source/xananode-hugo-repo", "target": "xananode.example:schema/xananode-core-schema", "type": "uses", @@ -307,7 +343,7 @@ "summary": "XanaNode Hugo Repository uses XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-35", + "id": "xananode.example:rel/xananode-core-sdk-repo-implements-xananode-core-schema-39", "source": "xananode.example:source/xananode-core-sdk-repo", "target": "xananode.example:schema/xananode-core-schema", "type": "implements", @@ -316,7 +352,7 @@ "summary": "XanaNode Core SDK Repository implements XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-36", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-node-record-40", "source": "xananode.example:source/xananode-core-sdk-repo", "target": "xananode.example:concept/substrate-node-record", "type": "uses", @@ -325,7 +361,7 @@ "summary": "XanaNode Core SDK Repository uses Substrate Node Record." }, { - "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-37", + "id": "xananode.example:rel/xananode-core-sdk-repo-uses-substrate-relationship-list-41", "source": "xananode.example:source/xananode-core-sdk-repo", "target": "xananode.example:concept/substrate-relationship-list", "type": "uses", @@ -334,7 +370,7 @@ "summary": "XanaNode Core SDK Repository uses Substrate Relationship List." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-38", + "id": "xananode.example:rel/xanadu-document-interconnection-documents-project-xanadu-42", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:project/project-xanadu", "type": "documents", @@ -343,7 +379,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use documents Project Xanadu." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-39", + "id": "xananode.example:rel/xanadu-document-interconnection-defines-transclusion-43", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:concept/transclusion", "type": "defines", @@ -352,7 +388,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use defines Transclusion." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-40", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-relationships-preserve-context-44", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -361,7 +397,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-41", + "id": "xananode.example:rel/source-code-link-decay-study-documents-link-rot-45", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:observation/link-rot", "type": "documents", @@ -370,7 +406,7 @@ "summary": "9.6 Million Links in Source Code Comments documents Link Rot." }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-42", + "id": "xananode.example:rel/source-code-link-decay-study-supports-claim-relationships-preserve-context-46", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -379,7 +415,7 @@ "summary": "9.6 Million Links in Source Code Comments supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/mother-of-all-demos-documents-nls-43", + "id": "xananode.example:rel/mother-of-all-demos-documents-nls-47", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:project/nls", "type": "documents", @@ -388,7 +424,7 @@ "summary": "Mother of All Demos documents NLS." }, { - "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-44", + "id": "xananode.example:rel/mother-of-all-demos-supports-knowledge-substrate-48", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:concept/knowledge-substrate", "type": "supports", @@ -397,7 +433,7 @@ "summary": "Mother of All Demos supports Knowledge Substrate." }, { - "id": "xananode.example:rel/as-we-may-think-documents-memex-45", + "id": "xananode.example:rel/as-we-may-think-documents-memex-49", "source": "xananode.example:source/as-we-may-think", "target": "xananode.example:project/memex", "type": "documents", @@ -406,7 +442,7 @@ "summary": "As We May Think documents Memex." }, { - "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-46", + "id": "xananode.example:rel/as-we-may-think-supports-claim-substrate-is-structure-50", "source": "xananode.example:source/as-we-may-think", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "supports", @@ -415,7 +451,7 @@ "summary": "As We May Think supports A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-47", + "id": "xananode.example:rel/xananode-relationship-types-defines-typed-relationships-51", "source": "xananode.example:schema/xananode-relationship-types", "target": "xananode.example:concept/typed-relationships", "type": "defines", @@ -424,7 +460,7 @@ "summary": "XanaNode Relationship Types defines Typed Relationships." }, { - "id": "xananode.example:rel/xananode-node-types-defines-xananode-48", + "id": "xananode.example:rel/xananode-node-types-defines-xananode-52", "source": "xananode.example:schema/xananode-node-types", "target": "xananode.example:concept/xananode", "type": "defines", @@ -433,7 +469,7 @@ "summary": "XanaNode Node Types defines XanaNode." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-49", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-node-types-53", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/xananode-node-types", "type": "defines", @@ -442,7 +478,7 @@ "summary": "XanaNode Core Schema defines XanaNode Node Types." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-50", + "id": "xananode.example:rel/xananode-core-schema-defines-xananode-relationship-types-54", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/xananode-relationship-types", "type": "defines", @@ -451,7 +487,7 @@ "summary": "XanaNode Core Schema defines XanaNode Relationship Types." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-51", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-manifest-schema-55", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-manifest-schema", "type": "defines", @@ -460,7 +496,7 @@ "summary": "XanaNode Core Schema defines Substrate Manifest Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-52", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-node-schema-56", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-node-schema", "type": "defines", @@ -469,7 +505,7 @@ "summary": "XanaNode Core Schema defines Substrate Node Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-53", + "id": "xananode.example:rel/xananode-core-schema-defines-substrate-relationships-schema-57", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-relationships-schema", "type": "defines", @@ -478,7 +514,7 @@ "summary": "XanaNode Core Schema defines Substrate Relationships Schema." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-54", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-xananode-core-schema-58", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -487,7 +523,7 @@ "summary": "Federated Knowledge Substrates requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-55", + "id": "xananode.example:rel/xananode-core-schema-enables-schema-extension-59", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/schema-extension", "type": "enables", @@ -496,7 +532,7 @@ "summary": "XanaNode Core Schema enables Schema Extension." }, { - "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-56", + "id": "xananode.example:rel/substrate-relationships-schema-defines-substrate-relationship-list-60", "source": "xananode.example:schema/substrate-relationships-schema", "target": "xananode.example:concept/substrate-relationship-list", "type": "defines", @@ -505,7 +541,7 @@ "summary": "Substrate Relationships Schema defines Substrate Relationship List." }, { - "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-57", + "id": "xananode.example:rel/substrate-relationships-schema-uses-xananode-relationship-types-61", "source": "xananode.example:schema/substrate-relationships-schema", "target": "xananode.example:schema/xananode-relationship-types", "type": "uses", @@ -514,7 +550,7 @@ "summary": "Substrate Relationships Schema uses XanaNode Relationship Types." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-58", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-relationships-schema-62", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-relationships-schema", "type": "contains", @@ -523,7 +559,7 @@ "summary": "XanaNode Core Schema contains Substrate Relationships Schema." }, { - "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-59", + "id": "xananode.example:rel/substrate-node-schema-defines-substrate-node-record-63", "source": "xananode.example:schema/substrate-node-schema", "target": "xananode.example:concept/substrate-node-record", "type": "defines", @@ -532,7 +568,7 @@ "summary": "Substrate Node Schema defines Substrate Node Record." }, { - "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-60", + "id": "xananode.example:rel/substrate-node-schema-uses-xananode-node-types-64", "source": "xananode.example:schema/substrate-node-schema", "target": "xananode.example:schema/xananode-node-types", "type": "uses", @@ -541,7 +577,7 @@ "summary": "Substrate Node Schema uses XanaNode Node Types." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-61", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-node-schema-65", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-node-schema", "type": "contains", @@ -550,7 +586,7 @@ "summary": "XanaNode Core Schema contains Substrate Node Schema." }, { - "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-62", + "id": "xananode.example:rel/substrate-manifest-schema-defines-substrate-manifest-66", "source": "xananode.example:schema/substrate-manifest-schema", "target": "xananode.example:concept/substrate-manifest", "type": "defines", @@ -559,7 +595,7 @@ "summary": "Substrate Manifest Schema defines Substrate Manifest." }, { - "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-63", + "id": "xananode.example:rel/xananode-core-schema-contains-substrate-manifest-schema-67", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:schema/substrate-manifest-schema", "type": "contains", @@ -568,7 +604,7 @@ "summary": "XanaNode Core Schema contains Substrate Manifest Schema." }, { - "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-64", + "id": "xananode.example:rel/compatibility-report-requires-substrate-manifest-schema-68", "source": "xananode.example:concept/compatibility-report", "target": "xananode.example:schema/substrate-manifest-schema", "type": "requires", @@ -577,7 +613,7 @@ "summary": "Compatibility Report requires Substrate Manifest Schema." }, { - "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-65", + "id": "xananode.example:rel/namespace-schema-defines-namespace-registry-69", "source": "xananode.example:schema/namespace-schema", "target": "xananode.example:concept/namespace-registry", "type": "defines", @@ -586,7 +622,7 @@ "summary": "Namespace Schema defines Namespace Registry." }, { - "id": "xananode.example:rel/namespace-schema-supports-namespacing-66", + "id": "xananode.example:rel/namespace-schema-supports-namespacing-70", "source": "xananode.example:schema/namespace-schema", "target": "xananode.example:concept/namespacing", "type": "supports", @@ -595,7 +631,7 @@ "summary": "Namespace Schema supports Namespacing." }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-schema-67", + "id": "xananode.example:rel/schema-extension-requires-namespace-schema-71", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:schema/namespace-schema", "type": "requires", @@ -604,7 +640,7 @@ "summary": "Schema Extension requires Namespace Schema." }, { - "id": "xananode.example:rel/merge-report-schema-defines-merge-report-68", + "id": "xananode.example:rel/merge-report-schema-defines-merge-report-72", "source": "xananode.example:schema/merge-report-schema", "target": "xananode.example:concept/merge-report", "type": "defines", @@ -613,7 +649,7 @@ "summary": "Merge Report Schema defines Merge Report." }, { - "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-69", + "id": "xananode.example:rel/merge-report-schema-documents-merge-validation-73", "source": "xananode.example:schema/merge-report-schema", "target": "xananode.example:concept/merge-validation", "type": "documents", @@ -622,7 +658,7 @@ "summary": "Merge Report Schema documents Merge Validation." }, { - "id": "xananode.example:rel/federation-example-requires-merge-report-schema-70", + "id": "xananode.example:rel/federation-example-requires-merge-report-schema-74", "source": "xananode.example:concept/federation-example", "target": "xananode.example:schema/merge-report-schema", "type": "requires", @@ -631,7 +667,7 @@ "summary": "Federation Example requires Merge Report Schema." }, { - "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-71", + "id": "xananode.example:rel/compatibility-report-schema-defines-compatibility-report-75", "source": "xananode.example:schema/compatibility-report-schema", "target": "xananode.example:concept/compatibility-report", "type": "defines", @@ -640,7 +676,7 @@ "summary": "Compatibility Report Schema defines Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-72", + "id": "xananode.example:rel/compatibility-report-schema-documents-compatibility-levels-76", "source": "xananode.example:schema/compatibility-report-schema", "target": "xananode.example:concept/compatibility-levels", "type": "documents", @@ -649,7 +685,7 @@ "summary": "Compatibility Report Schema documents Compatibility Levels." }, { - "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-73", + "id": "xananode.example:rel/federation-example-requires-compatibility-report-schema-77", "source": "xananode.example:concept/federation-example", "target": "xananode.example:schema/compatibility-report-schema", "type": "requires", @@ -658,7 +694,7 @@ "summary": "Federation Example requires Compatibility Report Schema." }, { - "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-74", + "id": "xananode.example:rel/xananode-hugo-theme-implements-xananode-78", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:concept/xananode", "type": "implements", @@ -667,7 +703,7 @@ "summary": "XanaNode Hugo Theme implements XanaNode." }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-75", + "id": "xananode.example:rel/xananode-hugo-theme-uses-hugo-79", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/hugo", "type": "uses", @@ -676,7 +712,7 @@ "summary": "XanaNode Hugo Theme uses Hugo." }, { - "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-76", + "id": "xananode.example:rel/xananode-hugo-theme-uses-cytoscape-js-80", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:technology/cytoscape-js", "type": "uses", @@ -685,7 +721,7 @@ "summary": "XanaNode Hugo Theme uses Cytoscape.js." }, { - "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-77", + "id": "xananode.example:rel/xananode-hugo-theme-demonstrates-knowledge-substrate-81", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:concept/knowledge-substrate", "type": "demonstrates", @@ -694,7 +730,7 @@ "summary": "XanaNode Hugo Theme demonstrates Knowledge Substrate." }, { - "id": "xananode.example:rel/project-xanadu-defines-transclusion-78", + "id": "xananode.example:rel/project-xanadu-defines-transclusion-82", "source": "xananode.example:project/project-xanadu", "target": "xananode.example:concept/transclusion", "type": "defines", @@ -703,7 +739,7 @@ "summary": "Project Xanadu defines Transclusion." }, { - "id": "xananode.example:rel/project-xanadu-influenced-xananode-79", + "id": "xananode.example:rel/project-xanadu-influenced-xananode-83", "source": "xananode.example:project/project-xanadu", "target": "xananode.example:concept/xananode", "type": "influenced", @@ -712,7 +748,7 @@ "summary": "Project Xanadu influenced XanaNode." }, { - "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-80", + "id": "xananode.example:rel/mother-of-all-demos-demonstrates-nls-84", "source": "xananode.example:source/mother-of-all-demos", "target": "xananode.example:project/nls", "type": "demonstrates", @@ -721,7 +757,7 @@ "summary": "Mother of All Demos demonstrates NLS." }, { - "id": "xananode.example:rel/nls-anticipated-xananode-81", + "id": "xananode.example:rel/nls-anticipated-xananode-85", "source": "xananode.example:project/nls", "target": "xananode.example:concept/xananode", "type": "anticipated", @@ -730,7 +766,7 @@ "summary": "NLS anticipated XanaNode." }, { - "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-82", + "id": "xananode.example:rel/memex-introduced_in-as-we-may-think-86", "source": "xananode.example:project/memex", "target": "xananode.example:source/as-we-may-think", "type": "introduced_in", @@ -739,7 +775,7 @@ "summary": "Memex introduced in As We May Think." }, { - "id": "xananode.example:rel/memex-anticipated-xananode-83", + "id": "xananode.example:rel/memex-anticipated-xananode-87", "source": "xananode.example:project/memex", "target": "xananode.example:concept/xananode", "type": "anticipated", @@ -748,7 +784,7 @@ "summary": "Memex anticipated XanaNode." }, { - "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-84", + "id": "xananode.example:rel/vannevar-bush-authored-as-we-may-think-88", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:source/as-we-may-think", "type": "authored", @@ -757,7 +793,7 @@ "summary": "Vannevar Bush authored As We May Think." }, { - "id": "xananode.example:rel/vannevar-bush-proposed-memex-85", + "id": "xananode.example:rel/vannevar-bush-proposed-memex-89", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:project/memex", "type": "proposed", @@ -766,7 +802,7 @@ "summary": "Vannevar Bush proposed Memex." }, { - "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-86", + "id": "xananode.example:rel/vannevar-bush-anticipated-knowledge-substrate-90", "source": "xananode.example:person/vannevar-bush", "target": "xananode.example:concept/knowledge-substrate", "type": "anticipated", @@ -775,7 +811,7 @@ "summary": "Vannevar Bush anticipated Knowledge Substrate." }, { - "id": "xananode.example:rel/ted-nelson-created-project-xanadu-87", + "id": "xananode.example:rel/ted-nelson-created-project-xanadu-91", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:project/project-xanadu", "type": "created", @@ -784,7 +820,7 @@ "summary": "Ted Nelson created Project Xanadu." }, { - "id": "xananode.example:rel/ted-nelson-introduced-transclusion-88", + "id": "xananode.example:rel/ted-nelson-introduced-transclusion-92", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:concept/transclusion", "type": "introduced", @@ -793,7 +829,7 @@ "summary": "Ted Nelson introduced Transclusion." }, { - "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-89", + "id": "xananode.example:rel/ted-nelson-authored-xanadu-document-interconnection-93", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:source/xanadu-document-interconnection", "type": "authored", @@ -802,7 +838,7 @@ "summary": "Ted Nelson authored Xanadu: Document Interconnection Enabling Re-use." }, { - "id": "xananode.example:rel/ted-nelson-influenced-xananode-90", + "id": "xananode.example:rel/ted-nelson-influenced-xananode-94", "source": "xananode.example:person/ted-nelson", "target": "xananode.example:concept/xananode", "type": "influenced", @@ -811,7 +847,7 @@ "summary": "Ted Nelson influenced XanaNode." }, { - "id": "xananode.example:rel/douglas-engelbart-created-nls-91", + "id": "xananode.example:rel/douglas-engelbart-created-nls-95", "source": "xananode.example:person/douglas-engelbart", "target": "xananode.example:project/nls", "type": "created", @@ -820,7 +856,7 @@ "summary": "Douglas Engelbart created NLS." }, { - "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-92", + "id": "xananode.example:rel/douglas-engelbart-presented-mother-of-all-demos-96", "source": "xananode.example:person/douglas-engelbart", "target": "xananode.example:source/mother-of-all-demos", "type": "presented", @@ -829,7 +865,7 @@ "summary": "Douglas Engelbart presented Mother of All Demos." }, { - "id": "xananode.example:rel/xananode-extends-douglas-engelbart-93", + "id": "xananode.example:rel/xananode-extends-douglas-engelbart-97", "source": "xananode.example:concept/xananode", "target": "xananode.example:person/douglas-engelbart", "type": "extends", @@ -838,7 +874,7 @@ "summary": "XanaNode extends Douglas Engelbart." }, { - "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-94", + "id": "xananode.example:rel/link-rot-demonstrates-unlabeled-hyperlink-98", "source": "xananode.example:observation/link-rot", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "demonstrates", @@ -847,7 +883,7 @@ "summary": "Link Rot demonstrates Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/link-rot-threatens-provenance-95", + "id": "xananode.example:rel/link-rot-threatens-provenance-99", "source": "xananode.example:observation/link-rot", "target": "xananode.example:concept/provenance", "type": "threatens", @@ -856,7 +892,7 @@ "summary": "Link Rot threatens Provenance." }, { - "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-96", + "id": "xananode.example:rel/source-code-link-decay-study-supports-link-rot-100", "source": "xananode.example:source/source-code-link-decay-study", "target": "xananode.example:observation/link-rot", "type": "supports", @@ -865,7 +901,7 @@ "summary": "9.6 Million Links in Source Code Comments supports Link Rot." }, { - "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-97", + "id": "xananode.example:rel/knowledge-substrate-explains-link-rot-101", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:observation/link-rot", "type": "explains", @@ -874,7 +910,7 @@ "summary": "Knowledge Substrate explains Link Rot." }, { - "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-98", + "id": "xananode.example:rel/xananode-hugo-theme-has_primary_media-xananode-icon-102", "source": "xananode.example:project/xananode-hugo-theme", "target": "xananode.example:media/xananode-icon", "type": "has_primary_media", @@ -883,7 +919,7 @@ "summary": "XanaNode Hugo Theme has primary media XanaNode Icon." }, { - "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-99", + "id": "xananode.example:rel/xananode-icon-depicts-xananode-hugo-theme-103", "source": "xananode.example:media/xananode-icon", "target": "xananode.example:project/xananode-hugo-theme", "type": "depicts", @@ -892,7 +928,7 @@ "summary": "XanaNode Icon depicts XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/xananode-icon-represents-xananode-100", + "id": "xananode.example:rel/xananode-icon-represents-xananode-104", "source": "xananode.example:media/xananode-icon", "target": "xananode.example:concept/xananode", "type": "represents", @@ -901,7 +937,7 @@ "summary": "XanaNode Icon represents XanaNode." }, { - "id": "xananode.example:rel/what-is-xananode-defines-xananode-101", + "id": "xananode.example:rel/what-is-xananode-defines-xananode-105", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/xananode", "type": "defines", @@ -910,7 +946,7 @@ "summary": "What Is XanaNode? defines XanaNode." }, { - "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-102", + "id": "xananode.example:rel/what-is-xananode-explains-xananode-hugo-theme-106", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:project/xananode-hugo-theme", "type": "explains", @@ -919,7 +955,7 @@ "summary": "What Is XanaNode? explains XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-103", + "id": "xananode.example:rel/what-is-xananode-arrives_at-claim-merge-without-collapse-107", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "arrives_at", @@ -928,7 +964,7 @@ "summary": "What Is XanaNode? arrives at Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-104", + "id": "xananode.example:rel/what-is-xananode-context_for-federated-knowledge-substrates-108", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "context_for", @@ -937,7 +973,7 @@ "summary": "What Is XanaNode? context for Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-105", + "id": "xananode.example:rel/what-is-xananode-explains-protocol-artifacts-109", "source": "xananode.example:essay/what-is-xananode", "target": "xananode.example:concept/protocol-artifacts", "type": "explains", @@ -946,7 +982,7 @@ "summary": "What Is XanaNode? explains Protocol Artifacts." }, { - "id": "xananode.example:rel/start-here-explains-xananode-106", + "id": "xananode.example:rel/start-here-explains-xananode-110", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/xananode", "type": "explains", @@ -955,7 +991,7 @@ "summary": "Start Here explains XanaNode." }, { - "id": "xananode.example:rel/start-here-explains-knowledge-substrate-107", + "id": "xananode.example:rel/start-here-explains-knowledge-substrate-111", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/knowledge-substrate", "type": "explains", @@ -964,7 +1000,7 @@ "summary": "Start Here explains Knowledge Substrate." }, { - "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-108", + "id": "xananode.example:rel/start-here-explains-federated-knowledge-substrates-112", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "explains", @@ -973,7 +1009,7 @@ "summary": "Start Here explains Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-109", + "id": "xananode.example:rel/start-here-contrasts_with-single-source-of-truth-113", "source": "xananode.example:essay/start-here", "target": "xananode.example:concept/single-source-of-truth", "type": "contrasts_with", @@ -982,7 +1018,7 @@ "summary": "Start Here contrasts with Single Source of Truth." }, { - "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-110", + "id": "xananode.example:rel/start-here-continues_to-xananode-core-trail-114", "source": "xananode.example:essay/start-here", "target": "xananode.example:trail/xananode-core-trail", "type": "continues_to", @@ -991,7 +1027,7 @@ "summary": "Start Here continues to XanaNode Core Trail." }, { - "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-111", + "id": "xananode.example:rel/start-here-continues_to-protocol-artifacts-trail-115", "source": "xananode.example:essay/start-here", "target": "xananode.example:trail/protocol-artifacts-trail", "type": "continues_to", @@ -1000,7 +1036,7 @@ "summary": "Start Here continues to Protocol Artifacts Trail." }, { - "id": "xananode.example:rel/xananode-defines-knowledge-substrate-112", + "id": "xananode.example:rel/xananode-defines-knowledge-substrate-116", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/knowledge-substrate", "type": "defines", @@ -1009,7 +1045,7 @@ "summary": "XanaNode defines Knowledge Substrate." }, { - "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-113", + "id": "xananode.example:rel/xananode-explains-federated-knowledge-substrates-117", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "explains", @@ -1018,7 +1054,7 @@ "summary": "XanaNode explains Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/xananode-requires-xananode-core-schema-114", + "id": "xananode.example:rel/xananode-requires-xananode-core-schema-118", "source": "xananode.example:concept/xananode", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -1027,7 +1063,7 @@ "summary": "XanaNode requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/xananode-preserves-provenance-115", + "id": "xananode.example:rel/xananode-preserves-provenance-119", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1036,7 +1072,7 @@ "summary": "XanaNode preserves Provenance." }, { - "id": "xananode.example:rel/xananode-extends-project-xanadu-116", + "id": "xananode.example:rel/xananode-extends-project-xanadu-120", "source": "xananode.example:concept/xananode", "target": "xananode.example:project/project-xanadu", "type": "extends", @@ -1045,7 +1081,7 @@ "summary": "XanaNode extends Project Xanadu." }, { - "id": "xananode.example:rel/xananode-extends-memex-117", + "id": "xananode.example:rel/xananode-extends-memex-121", "source": "xananode.example:concept/xananode", "target": "xananode.example:project/memex", "type": "extends", @@ -1054,7 +1090,7 @@ "summary": "XanaNode extends Memex." }, { - "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-118", + "id": "xananode.example:rel/unlabeled-hyperlink-threatens-provenance-122", "source": "xananode.example:concept/unlabeled-hyperlink", "target": "xananode.example:concept/provenance", "type": "threatens", @@ -1063,7 +1099,7 @@ "summary": "Unlabeled Hyperlink threatens Provenance." }, { - "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-119", + "id": "xananode.example:rel/typed-relationships-contrasts_with-unlabeled-hyperlink-123", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -1072,7 +1108,7 @@ "summary": "Typed Relationships contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-120", + "id": "xananode.example:rel/typed-relationships-supports-claim-relationships-preserve-context-124", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "supports", @@ -1081,7 +1117,7 @@ "summary": "Typed Relationships supports Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-121", + "id": "xananode.example:rel/tumbler-addressing-enables-transclusion-125", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/transclusion", "type": "enables", @@ -1090,7 +1126,7 @@ "summary": "Tumbler Addressing enables Transclusion." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-122", + "id": "xananode.example:rel/tumbler-addressing-enables-deep-linking-126", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/deep-linking", "type": "enables", @@ -1099,7 +1135,7 @@ "summary": "Tumbler Addressing enables Deep Linking." }, { - "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-123", + "id": "xananode.example:rel/tumbler-addressing-preserves-provenance-127", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1108,7 +1144,7 @@ "summary": "Tumbler Addressing preserves Provenance." }, { - "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-124", + "id": "xananode.example:rel/tumbler-addressing-enables-fragment-node-128", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:concept/fragment-node", "type": "enables", @@ -1117,7 +1153,7 @@ "summary": "Tumbler Addressing enables Fragment Node." }, { - "id": "xananode.example:rel/xananode-extends-tumbler-addressing-125", + "id": "xananode.example:rel/xananode-extends-tumbler-addressing-129", "source": "xananode.example:concept/xananode", "target": "xananode.example:concept/tumbler-addressing", "type": "extends", @@ -1126,7 +1162,7 @@ "summary": "XanaNode extends Tumbler Addressing." }, { - "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-126", + "id": "xananode.example:rel/tumbler-addressing-deep_links_to-as-we-may-think-130", "source": "xananode.example:concept/tumbler-addressing", "target": "xananode.example:source/as-we-may-think", "type": "deep_links_to", @@ -1135,7 +1171,7 @@ "summary": "Tumbler Addressing deep links to As We May Think." }, { - "id": "xananode.example:rel/transclusion-preserves-provenance-127", + "id": "xananode.example:rel/transclusion-preserves-provenance-131", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1144,7 +1180,7 @@ "summary": "Transclusion preserves Provenance." }, { - "id": "xananode.example:rel/transclusion-uses-fragment-node-128", + "id": "xananode.example:rel/transclusion-uses-fragment-node-132", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/fragment-node", "type": "uses", @@ -1153,7 +1189,7 @@ "summary": "Transclusion uses Fragment Node." }, { - "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-129", + "id": "xananode.example:rel/substrate-relationship-list-uses-xananode-relationship-types-133", "source": "xananode.example:concept/substrate-relationship-list", "target": "xananode.example:schema/xananode-relationship-types", "type": "uses", @@ -1162,7 +1198,7 @@ "summary": "Substrate Relationship List uses XanaNode Relationship Types." }, { - "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-130", + "id": "xananode.example:rel/substrate-relationship-list-preserves-provenance-134", "source": "xananode.example:concept/substrate-relationship-list", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1171,7 +1207,7 @@ "summary": "Substrate Relationship List preserves Provenance." }, { - "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-131", + "id": "xananode.example:rel/substrate-node-record-uses-xananode-node-types-135", "source": "xananode.example:concept/substrate-node-record", "target": "xananode.example:schema/xananode-node-types", "type": "uses", @@ -1180,7 +1216,7 @@ "summary": "Substrate Node Record uses XanaNode Node Types." }, { - "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-132", + "id": "xananode.example:rel/substrate-node-record-contains-fragment-node-136", "source": "xananode.example:concept/substrate-node-record", "target": "xananode.example:concept/fragment-node", "type": "contains", @@ -1189,7 +1225,7 @@ "summary": "Substrate Node Record contains Fragment Node." }, { - "id": "xananode.example:rel/substrate-manifest-requires-namespacing-133", + "id": "xananode.example:rel/substrate-manifest-requires-namespacing-137", "source": "xananode.example:concept/substrate-manifest", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1198,7 +1234,7 @@ "summary": "Substrate Manifest requires Namespacing." }, { - "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-134", + "id": "xananode.example:rel/single-source-of-truth-contrasts_with-federated-knowledge-substrates-138", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "contrasts_with", @@ -1207,7 +1243,7 @@ "summary": "Single Source of Truth contrasts with Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-135", + "id": "xananode.example:rel/single-source-of-truth-threatens-independent-moderation-139", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/independent-moderation", "type": "threatens", @@ -1216,7 +1252,7 @@ "summary": "Single Source of Truth threatens Independent Moderation." }, { - "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-136", + "id": "xananode.example:rel/single-source-of-truth-alternative_to-knowledge-substrate-140", "source": "xananode.example:concept/single-source-of-truth", "target": "xananode.example:concept/knowledge-substrate", "type": "alternative_to", @@ -1225,7 +1261,7 @@ "summary": "Single Source of Truth alternative to Knowledge Substrate." }, { - "id": "xananode.example:rel/namespacing-enables-schema-extension-137", + "id": "xananode.example:rel/namespacing-enables-schema-extension-141", "source": "xananode.example:concept/namespacing", "target": "xananode.example:concept/schema-extension", "type": "enables", @@ -1234,7 +1270,7 @@ "summary": "Namespacing enables Schema Extension." }, { - "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-138", + "id": "xananode.example:rel/schema-extension-requires-xananode-core-schema-142", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:schema/xananode-core-schema", "type": "requires", @@ -1243,7 +1279,7 @@ "summary": "Schema Extension requires XanaNode Core Schema." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-139", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-schema-extension-143", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/schema-extension", "type": "requires", @@ -1252,7 +1288,7 @@ "summary": "Federated Knowledge Substrates requires Schema Extension." }, { - "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-140", + "id": "xananode.example:rel/review-suggestions-uses-typed-relationships-144", "source": "xananode.example:concept/review-suggestions", "target": "xananode.example:concept/typed-relationships", "type": "uses", @@ -1261,7 +1297,7 @@ "summary": "Review Suggestions uses Typed Relationships." }, { - "id": "xananode.example:rel/review-suggestions-uses-transclusion-141", + "id": "xananode.example:rel/review-suggestions-uses-transclusion-145", "source": "xananode.example:concept/review-suggestions", "target": "xananode.example:concept/transclusion", "type": "uses", @@ -1270,7 +1306,7 @@ "summary": "Review Suggestions uses Transclusion." }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-142", + "id": "xananode.example:rel/claim-relationships-preserve-context-evidence_for-provenance-146", "source": "xananode.example:claim/claim-relationships-preserve-context", "target": "xananode.example:concept/provenance", "type": "evidence_for", @@ -1279,7 +1315,7 @@ "summary": "Typed relationships preserve context that hyperlinks lose evidence for Provenance." }, { - "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-143", + "id": "xananode.example:rel/xananode-core-schema-defines-protocol-artifacts-147", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/protocol-artifacts", "type": "defines", @@ -1288,7 +1324,7 @@ "summary": "XanaNode Core Schema defines Protocol Artifacts." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-144", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-manifest-148", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-manifest", "type": "contains", @@ -1297,7 +1333,7 @@ "summary": "Protocol Artifacts contains Substrate Manifest." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-145", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-node-record-149", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-node-record", "type": "contains", @@ -1306,7 +1342,7 @@ "summary": "Protocol Artifacts contains Substrate Node Record." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-146", + "id": "xananode.example:rel/protocol-artifacts-contains-substrate-relationship-list-150", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/substrate-relationship-list", "type": "contains", @@ -1315,7 +1351,7 @@ "summary": "Protocol Artifacts contains Substrate Relationship List." }, { - "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-147", + "id": "xananode.example:rel/protocol-artifacts-contains-review-suggestions-151", "source": "xananode.example:concept/protocol-artifacts", "target": "xananode.example:concept/review-suggestions", "type": "contains", @@ -1324,7 +1360,7 @@ "summary": "Protocol Artifacts contains Review Suggestions." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-148", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-protocol-artifacts-152", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/protocol-artifacts", "type": "requires", @@ -1333,7 +1369,7 @@ "summary": "Federated Knowledge Substrates requires Protocol Artifacts." }, { - "id": "xananode.example:rel/namespacing-clarifies-schema-extension-149", + "id": "xananode.example:rel/namespacing-clarifies-schema-extension-153", "source": "xananode.example:concept/namespacing", "target": "xananode.example:concept/schema-extension", "type": "clarifies", @@ -1342,7 +1378,7 @@ "summary": "Namespacing clarifies Schema Extension." }, { - "id": "xananode.example:rel/namespace-registry-implements-namespacing-150", + "id": "xananode.example:rel/namespace-registry-implements-namespacing-154", "source": "xananode.example:concept/namespace-registry", "target": "xananode.example:concept/namespacing", "type": "implements", @@ -1351,7 +1387,7 @@ "summary": "Namespace Registry implements Namespacing." }, { - "id": "xananode.example:rel/schema-extension-requires-namespace-registry-151", + "id": "xananode.example:rel/schema-extension-requires-namespace-registry-155", "source": "xananode.example:concept/schema-extension", "target": "xananode.example:concept/namespace-registry", "type": "requires", @@ -1360,7 +1396,7 @@ "summary": "Schema Extension requires Namespace Registry." }, { - "id": "xananode.example:rel/moderation-model-defines-independent-moderation-152", + "id": "xananode.example:rel/moderation-model-defines-independent-moderation-156", "source": "xananode.example:concept/moderation-model", "target": "xananode.example:concept/independent-moderation", "type": "defines", @@ -1369,7 +1405,7 @@ "summary": "Moderation Model defines Independent Moderation." }, { - "id": "xananode.example:rel/federation-rules-requires-moderation-model-153", + "id": "xananode.example:rel/federation-rules-requires-moderation-model-157", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/moderation-model", "type": "requires", @@ -1378,7 +1414,7 @@ "summary": "Federation Rules requires Moderation Model." }, { - "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-154", + "id": "xananode.example:rel/moderation-model-context_for-dispute-resolution-158", "source": "xananode.example:concept/moderation-model", "target": "xananode.example:concept/dispute-resolution", "type": "context_for", @@ -1387,7 +1423,7 @@ "summary": "Moderation Model context for Dispute Resolution." }, { - "id": "xananode.example:rel/merge-validation-requires-namespacing-155", + "id": "xananode.example:rel/merge-validation-requires-namespacing-159", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1396,7 +1432,7 @@ "summary": "Merge Validation requires Namespacing." }, { - "id": "xananode.example:rel/merge-validation-requires-provenance-156", + "id": "xananode.example:rel/merge-validation-requires-provenance-160", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1405,7 +1441,7 @@ "summary": "Merge Validation requires Provenance." }, { - "id": "xananode.example:rel/merge-validation-requires-schema-extension-157", + "id": "xananode.example:rel/merge-validation-requires-schema-extension-161", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/schema-extension", "type": "requires", @@ -1414,7 +1450,7 @@ "summary": "Merge Validation requires Schema Extension." }, { - "id": "xananode.example:rel/merge-validation-uses-merge-report-158", + "id": "xananode.example:rel/merge-validation-uses-merge-report-162", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/merge-report", "type": "uses", @@ -1423,7 +1459,7 @@ "summary": "Merge Validation uses Merge Report." }, { - "id": "xananode.example:rel/merge-validation-uses-compatibility-report-159", + "id": "xananode.example:rel/merge-validation-uses-compatibility-report-163", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1432,7 +1468,7 @@ "summary": "Merge Validation uses Compatibility Report." }, { - "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-160", + "id": "xananode.example:rel/merge-validation-arrives_at-claim-merge-without-collapse-164", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "arrives_at", @@ -1441,7 +1477,7 @@ "summary": "Merge Validation arrives at Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/merge-report-documents-merge-validation-161", + "id": "xananode.example:rel/merge-report-documents-merge-validation-165", "source": "xananode.example:concept/merge-report", "target": "xananode.example:concept/merge-validation", "type": "documents", @@ -1450,7 +1486,7 @@ "summary": "Merge Report documents Merge Validation." }, { - "id": "xananode.example:rel/merge-report-preserves-provenance-162", + "id": "xananode.example:rel/merge-report-preserves-provenance-166", "source": "xananode.example:concept/merge-report", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1459,7 +1495,7 @@ "summary": "Merge Report preserves Provenance." }, { - "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-163", + "id": "xananode.example:rel/merge-report-supports-claim-merge-without-collapse-167", "source": "xananode.example:concept/merge-report", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1468,7 +1504,7 @@ "summary": "Merge Report supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-164", + "id": "xananode.example:rel/known-implementations-registry-documents-xananode-hugo-theme-168", "source": "xananode.example:concept/known-implementations-registry", "target": "xananode.example:project/xananode-hugo-theme", "type": "documents", @@ -1477,7 +1513,7 @@ "summary": "Known Implementations Registry documents XanaNode Hugo Theme." }, { - "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-165", + "id": "xananode.example:rel/known-implementations-registry-supports-compatibility-levels-169", "source": "xananode.example:concept/known-implementations-registry", "target": "xananode.example:concept/compatibility-levels", "type": "supports", @@ -1486,7 +1522,7 @@ "summary": "Known Implementations Registry supports Compatibility Levels." }, { - "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-166", + "id": "xananode.example:rel/knowledge-substrate-has_claim-claim-substrate-is-structure-170", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "has_claim", @@ -1495,7 +1531,7 @@ "summary": "Knowledge Substrate has claim A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/knowledge-substrate-requires-provenance-167", + "id": "xananode.example:rel/knowledge-substrate-requires-provenance-171", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1504,7 +1540,7 @@ "summary": "Knowledge Substrate requires Provenance." }, { - "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-168", + "id": "xananode.example:rel/knowledge-substrate-requires-typed-relationships-172", "source": "xananode.example:concept/knowledge-substrate", "target": "xananode.example:concept/typed-relationships", "type": "requires", @@ -1513,7 +1549,7 @@ "summary": "Knowledge Substrate requires Typed Relationships." }, { - "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-169", + "id": "xananode.example:rel/xananode-core-schema-enables-knowledge-substrate-173", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:concept/knowledge-substrate", "type": "enables", @@ -1522,7 +1558,7 @@ "summary": "XanaNode Core Schema enables Knowledge Substrate." }, { - "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-170", + "id": "xananode.example:rel/independent-moderation-contrasts_with-single-source-of-truth-174", "source": "xananode.example:concept/independent-moderation", "target": "xananode.example:concept/single-source-of-truth", "type": "contrasts_with", @@ -1531,7 +1567,7 @@ "summary": "Independent Moderation contrasts with Single Source of Truth." }, { - "id": "xananode.example:rel/independent-moderation-requires-provenance-171", + "id": "xananode.example:rel/independent-moderation-requires-provenance-175", "source": "xananode.example:concept/independent-moderation", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1540,7 +1576,7 @@ "summary": "Independent Moderation requires Provenance." }, { - "id": "xananode.example:rel/transclusion-requires-fragment-node-172", + "id": "xananode.example:rel/transclusion-requires-fragment-node-176", "source": "xananode.example:concept/transclusion", "target": "xananode.example:concept/fragment-node", "type": "requires", @@ -1549,7 +1585,7 @@ "summary": "Transclusion requires Fragment Node." }, { - "id": "xananode.example:rel/fragment-node-preserves-provenance-173", + "id": "xananode.example:rel/fragment-node-preserves-provenance-177", "source": "xananode.example:concept/fragment-node", "target": "xananode.example:concept/provenance", "type": "preserves", @@ -1558,7 +1594,7 @@ "summary": "Fragment Node preserves Provenance." }, { - "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-174", + "id": "xananode.example:rel/fragment-node-deep_links_to-mother-of-all-demos-178", "source": "xananode.example:concept/fragment-node", "target": "xananode.example:source/mother-of-all-demos", "type": "deep_links_to", @@ -1567,7 +1603,7 @@ "summary": "Fragment Node deep links to Mother of All Demos." }, { - "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-175", + "id": "xananode.example:rel/federation-rules-defines-federated-knowledge-substrates-179", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "defines", @@ -1576,7 +1612,7 @@ "summary": "Federation Rules defines Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-176", + "id": "xananode.example:rel/federation-rules-preserves-independent-moderation-180", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1585,7 +1621,7 @@ "summary": "Federation Rules preserves Independent Moderation." }, { - "id": "xananode.example:rel/federation-rules-requires-compatibility-report-177", + "id": "xananode.example:rel/federation-rules-requires-compatibility-report-181", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/compatibility-report", "type": "requires", @@ -1594,7 +1630,7 @@ "summary": "Federation Rules requires Compatibility Report." }, { - "id": "xananode.example:rel/federation-rules-requires-merge-report-178", + "id": "xananode.example:rel/federation-rules-requires-merge-report-182", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/merge-report", "type": "requires", @@ -1603,7 +1639,7 @@ "summary": "Federation Rules requires Merge Report." }, { - "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-179", + "id": "xananode.example:rel/federation-example-demonstrates-federated-knowledge-substrates-183", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/federated-knowledge-substrates", "type": "demonstrates", @@ -1612,7 +1648,7 @@ "summary": "Federation Example demonstrates Federated Knowledge Substrates." }, { - "id": "xananode.example:rel/federation-example-uses-compatibility-report-180", + "id": "xananode.example:rel/federation-example-uses-compatibility-report-184", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1621,7 +1657,7 @@ "summary": "Federation Example uses Compatibility Report." }, { - "id": "xananode.example:rel/federation-example-uses-merge-report-181", + "id": "xananode.example:rel/federation-example-uses-merge-report-185", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/merge-report", "type": "uses", @@ -1630,7 +1666,7 @@ "summary": "Federation Example uses Merge Report." }, { - "id": "xananode.example:rel/federation-example-preserves-independent-moderation-182", + "id": "xananode.example:rel/federation-example-preserves-independent-moderation-186", "source": "xananode.example:concept/federation-example", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1639,7 +1675,7 @@ "summary": "Federation Example preserves Independent Moderation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-183", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-namespacing-187", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1648,7 +1684,7 @@ "summary": "Federated Knowledge Substrates requires Namespacing." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-184", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-merge-validation-188", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/merge-validation", "type": "requires", @@ -1657,7 +1693,7 @@ "summary": "Federated Knowledge Substrates requires Merge Validation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-185", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-federation-rules-189", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/federation-rules", "type": "requires", @@ -1666,7 +1702,7 @@ "summary": "Federated Knowledge Substrates requires Federation Rules." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-186", + "id": "xananode.example:rel/federated-knowledge-substrates-preserves-independent-moderation-190", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/independent-moderation", "type": "preserves", @@ -1675,7 +1711,7 @@ "summary": "Federated Knowledge Substrates preserves Independent Moderation." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-187", + "id": "xananode.example:rel/federated-knowledge-substrates-alternative_to-single-source-of-truth-191", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/single-source-of-truth", "type": "alternative_to", @@ -1684,7 +1720,7 @@ "summary": "Federated Knowledge Substrates alternative to Single Source of Truth." }, { - "id": "xananode.example:rel/dispute-resolution-requires-provenance-188", + "id": "xananode.example:rel/dispute-resolution-requires-provenance-192", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1693,7 +1729,7 @@ "summary": "Dispute Resolution requires Provenance." }, { - "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-189", + "id": "xananode.example:rel/dispute-resolution-supports-claim-merge-without-collapse-193", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1702,7 +1738,7 @@ "summary": "Dispute Resolution supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-190", + "id": "xananode.example:rel/dispute-resolution-context_for-merge-report-194", "source": "xananode.example:concept/dispute-resolution", "target": "xananode.example:concept/merge-report", "type": "context_for", @@ -1711,7 +1747,7 @@ "summary": "Dispute Resolution context for Merge Report." }, { - "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-191", + "id": "xananode.example:rel/federation-rules-requires-dispute-resolution-195", "source": "xananode.example:concept/federation-rules", "target": "xananode.example:concept/dispute-resolution", "type": "requires", @@ -1720,7 +1756,7 @@ "summary": "Federation Rules requires Dispute Resolution." }, { - "id": "xananode.example:rel/deep-linking-enables-transclusion-192", + "id": "xananode.example:rel/deep-linking-enables-transclusion-196", "source": "xananode.example:concept/deep-linking", "target": "xananode.example:concept/transclusion", "type": "enables", @@ -1729,7 +1765,7 @@ "summary": "Deep Linking enables Transclusion." }, { - "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-193", + "id": "xananode.example:rel/deep-linking-contrasts_with-unlabeled-hyperlink-197", "source": "xananode.example:concept/deep-linking", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -1738,7 +1774,7 @@ "summary": "Deep Linking contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-194", + "id": "xananode.example:rel/custom-extension-substrate-demonstrates-schema-extension-198", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/schema-extension", "type": "demonstrates", @@ -1747,7 +1783,7 @@ "summary": "Custom Extension Substrate demonstrates Schema Extension." }, { - "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-195", + "id": "xananode.example:rel/custom-extension-substrate-requires-namespace-registry-199", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/namespace-registry", "type": "requires", @@ -1756,7 +1792,7 @@ "summary": "Custom Extension Substrate requires Namespace Registry." }, { - "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-196", + "id": "xananode.example:rel/custom-extension-substrate-uses-substrate-manifest-200", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/substrate-manifest", "type": "uses", @@ -1765,7 +1801,7 @@ "summary": "Custom Extension Substrate uses Substrate Manifest." }, { - "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-197", + "id": "xananode.example:rel/custom-extension-substrate-features-canonical-type-policy-201", "source": "xananode.example:concept/custom-extension-substrate", "target": "xananode.example:concept/canonical-type-policy", "type": "features", @@ -1774,7 +1810,7 @@ "summary": "Custom Extension Substrate features Canonical Type Policy." }, { - "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-198", + "id": "xananode.example:rel/compatibility-report-documents-compatibility-levels-202", "source": "xananode.example:concept/compatibility-report", "target": "xananode.example:concept/compatibility-levels", "type": "documents", @@ -1783,7 +1819,7 @@ "summary": "Compatibility Report documents Compatibility Levels." }, { - "id": "xananode.example:rel/merge-validation-requires-compatibility-report-199", + "id": "xananode.example:rel/merge-validation-requires-compatibility-report-203", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:concept/compatibility-report", "type": "requires", @@ -1792,7 +1828,7 @@ "summary": "Merge Validation requires Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-200", + "id": "xananode.example:rel/compatibility-levels-uses-compatibility-report-204", "source": "xananode.example:concept/compatibility-levels", "target": "xananode.example:concept/compatibility-report", "type": "uses", @@ -1801,7 +1837,7 @@ "summary": "Compatibility Levels uses Compatibility Report." }, { - "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-201", + "id": "xananode.example:rel/compatibility-levels-requires-substrate-manifest-205", "source": "xananode.example:concept/compatibility-levels", "target": "xananode.example:concept/substrate-manifest", "type": "requires", @@ -1810,7 +1846,7 @@ "summary": "Compatibility Levels requires Substrate Manifest." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-202", + "id": "xananode.example:rel/federated-knowledge-substrates-requires-compatibility-levels-206", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/compatibility-levels", "type": "requires", @@ -1819,7 +1855,7 @@ "summary": "Federated Knowledge Substrates requires Compatibility Levels." }, { - "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-203", + "id": "xananode.example:rel/federated-knowledge-substrates-enables-civilizational-memory-207", "source": "xananode.example:concept/federated-knowledge-substrates", "target": "xananode.example:concept/civilizational-memory", "type": "enables", @@ -1828,7 +1864,7 @@ "summary": "Federated Knowledge Substrates enables Civilizational Memory." }, { - "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-204", + "id": "xananode.example:rel/civilizational-memory-requires-knowledge-substrate-208", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/knowledge-substrate", "type": "requires", @@ -1837,7 +1873,7 @@ "summary": "Civilizational Memory requires Knowledge Substrate." }, { - "id": "xananode.example:rel/civilizational-memory-requires-provenance-205", + "id": "xananode.example:rel/civilizational-memory-requires-provenance-209", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/provenance", "type": "requires", @@ -1846,7 +1882,7 @@ "summary": "Civilizational Memory requires Provenance." }, { - "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-206", + "id": "xananode.example:rel/civilizational-memory-requires-merge-validation-210", "source": "xananode.example:concept/civilizational-memory", "target": "xananode.example:concept/merge-validation", "type": "requires", @@ -1855,7 +1891,7 @@ "summary": "Civilizational Memory requires Merge Validation." }, { - "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-207", + "id": "xananode.example:rel/canonical-type-policy-context_for-schema-extension-211", "source": "xananode.example:concept/canonical-type-policy", "target": "xananode.example:concept/schema-extension", "type": "context_for", @@ -1864,7 +1900,7 @@ "summary": "Canonical Type Policy context for Schema Extension." }, { - "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-208", + "id": "xananode.example:rel/canonical-type-policy-requires-namespacing-212", "source": "xananode.example:concept/canonical-type-policy", "target": "xananode.example:concept/namespacing", "type": "requires", @@ -1873,7 +1909,7 @@ "summary": "Canonical Type Policy requires Namespacing." }, { - "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-209", + "id": "xananode.example:rel/xanadu-document-interconnection-supports-claim-substrate-is-structure-213", "source": "xananode.example:source/xanadu-document-interconnection", "target": "xananode.example:claim/claim-substrate-is-structure", "type": "supports", @@ -1882,7 +1918,7 @@ "summary": "Xanadu: Document Interconnection Enabling Re-use supports A knowledge substrate is structure, not information." }, { - "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-210", + "id": "xananode.example:rel/typed-relationships-has_claim-claim-relationships-preserve-context-214", "source": "xananode.example:concept/typed-relationships", "target": "xananode.example:claim/claim-relationships-preserve-context", "type": "has_claim", @@ -1891,7 +1927,7 @@ "summary": "Typed Relationships has claim Typed relationships preserve context that hyperlinks lose." }, { - "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-211", + "id": "xananode.example:rel/claim-relationships-preserve-context-contrasts_with-unlabeled-hyperlink-215", "source": "xananode.example:claim/claim-relationships-preserve-context", "target": "xananode.example:concept/unlabeled-hyperlink", "type": "contrasts_with", @@ -1900,7 +1936,7 @@ "summary": "Typed relationships preserve context that hyperlinks lose contrasts with Unlabeled Hyperlink." }, { - "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-212", + "id": "xananode.example:rel/merge-validation-has_claim-claim-merge-without-collapse-216", "source": "xananode.example:concept/merge-validation", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "has_claim", @@ -1909,7 +1945,7 @@ "summary": "Merge Validation has claim Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-213", + "id": "xananode.example:rel/xananode-core-schema-supports-claim-merge-without-collapse-217", "source": "xananode.example:schema/xananode-core-schema", "target": "xananode.example:claim/claim-merge-without-collapse", "type": "supports", @@ -1918,7 +1954,7 @@ "summary": "XanaNode Core Schema supports Substrates should merge without collapsing disagreement." }, { - "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-214", + "id": "xananode.example:rel/claim-merge-without-collapse-contradicts-single-source-of-truth-218", "source": "xananode.example:claim/claim-merge-without-collapse", "target": "xananode.example:concept/single-source-of-truth", "type": "contradicts", diff --git a/exampleSite/static/xananode-fragments.json b/exampleSite/static/xananode-fragments.json index 5873e95c..7c76b073 100644 --- a/exampleSite/static/xananode-fragments.json +++ b/exampleSite/static/xananode-fragments.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-06-18T04:24:11.885Z", + "generated_at": "2026-06-18T04:37:16.672Z", "nodes": { "xananode-implementation-stack-trail": { "versions": { @@ -129,6 +129,32 @@ "title": "Historical Lineage Trail", "type": "trail" }, + "branching-orientation-trail": { + "versions": { + "v1": { + "fragments": { + "1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.\n\n{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.2": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.2.1": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}" + }, + "metadata": {} + }, + "latest": { + "fragments": { + "1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.\n\n{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.1.1": "This trail deliberately branches after XanaNode so the viewer can test a guided choose-your-path experience.", + "1.2": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}", + "1.2.1": "{{< node ref=\"start-here\" >}} {{< node ref=\"xananode\" >}}" + }, + "metadata": {} + } + }, + "title": "Branching Orientation Trail", + "type": "trail" + }, "static-publishing": { "versions": { "v1": { diff --git a/layouts/index.json b/layouts/index.json index 6f5a203a..18ef41b8 100644 --- a/layouts/index.json +++ b/layouts/index.json @@ -15,6 +15,7 @@ "section": {{ $p.Section | jsonify }}, "importance": {{ ($p.Params.importance | default 3) | jsonify }}, "trail_nodes": {{ ($p.Params.nodes | default slice) | jsonify }}, + "trail_branches": {{ ($p.Params.branches | default slice) | jsonify }}, "url": {{ $p.RelPermalink | jsonify }}, "summary": {{ ($p.Params.summary | default "") | jsonify }}, diff --git a/static/js/xananode.js b/static/js/xananode.js index c3fd9aa3..bbd019b4 100644 --- a/static/js/xananode.js +++ b/static/js/xananode.js @@ -371,6 +371,7 @@ tourVisited: new Set(), tourRecent: [], activeTrail: null, + trailChoicePending: false, cy: null, allNodes, nodeIds, @@ -381,6 +382,10 @@ displaySettings }; + if (requestedNode && window.location.hash) { + state.pendingFragmentHighlight = fragmentHighlightFromHash(requestedNode.id, state); + } + if (rawRequested && !requestedNode) { const protocolTarget = resolveProtocolAddress(rawRequested, state); if (protocolTarget) { @@ -445,17 +450,18 @@ window.addEventListener("popstate", () => { const nodeFromUrl = nodeIdFromUrl(allNodes); const protocolTarget = nodeFromUrl ? resolveProtocolAddress(nodeFromUrl, state) : null; + const nextId = protocolTarget?.nodeId || nodeFromUrl; if (protocolTarget || (nodeFromUrl && allNodes.some((node) => node.id === nodeFromUrl))) { state.previousFocusId = state.focusId; - state.focusId = protocolTarget?.nodeId || nodeFromUrl; + state.focusId = nextId; state.pendingFragmentHighlight = protocolTarget?.fragmentId ? { nodeId: protocolTarget.nodeId, fragmentId: protocolTarget.fragmentId, fragment: protocolTarget.fragment } - : null; + : fragmentHighlightFromHash(nextId, state); renderVisibleGraph(state, { updateUrl: false, stagedReveal: true, @@ -1199,6 +1205,30 @@ return null; } + function fragmentHighlightFromHash(nodeId, state) { + return fragmentHighlightFromHref(nodeId, window.location.href, state); + } + + function fragmentHighlightFromHref(nodeId, href, state) { + const fragmentId = extractFragmentId(href); + if (!nodeId || !fragmentId) return null; + const node = state.allNodes.find((candidate) => candidate.id === nodeId); + const rawAddress = `${node?.protocol_id || nodeId}#fragment/${fragmentId}`; + return { + nodeId, + fragmentId, + fragment: findFragmentRecord(nodeId, fragmentId, rawAddress, state) + }; + } + + function extractFragmentId(value) { + try { + return decodeURIComponent(new URL(value, window.location.origin).hash || "").match(/^#fragment\/([A-Za-z0-9._-]+)/)?.[1] || ""; + } catch { + return decodeURIComponent(String(value || "")).match(/#fragment\/([A-Za-z0-9._-]+)/)?.[1] || ""; + } + } + function scoreSearchResult(node, haystack, normalizedQuery, queryTokens) { let score = 0; @@ -1783,8 +1813,10 @@ function stopTour(state) { state.tourActive = false; state.activeTrail = null; + state.trailChoicePending = false; graphEl.dataset.tourActive = "0"; clearTourTimers(); + closeTrailChoice(); stopNarration(); updateTourButton(); const tourBtn = graphEl.querySelector("[data-tour-toggle]"); @@ -1823,8 +1855,13 @@ } function pickNextTourNode(state) { - const trailNext = pickNextTrailNode(state); - if (trailNext) return trailNext; + if (state.activeTrail?.nodes?.length) { + const trailNext = pickNextTrailNode(state); + if (trailNext) return trailNext; + if (state.trailChoicePending) return null; + stopTour(state); + return null; + } const cy = state.cy; if (!cy) return null; @@ -1855,20 +1892,62 @@ function buildActiveTrail(state) { const focusNode = state.allNodes.find((node) => node.id === state.focusId); - const trailNodes = Array.isArray(focusNode?.trail_nodes) - ? focusNode.trail_nodes.filter((id) => state.nodeIds.has(id)) - : []; + const trailNodes = getTrailNodeIds(focusNode, state); if (!trailNodes.length) return null; return { trailId: focusNode.id, nodes: trailNodes, - index: 0 + index: 0, + branches: getTrailBranches(focusNode, state), + branchChoices: {} }; } + function getTrailNodeIds(node, state) { + if (!node) return []; + + const explicitNodes = Array.isArray(node.trail_nodes) + ? node.trail_nodes.filter((id) => state.nodeIds.has(id)) + : []; + if (explicitNodes.length) return explicitNodes; + + return (state.allEdgesRaw || []) + .filter((edge) => edge.source === node.id && edge.origin === "trail" && state.nodeIds.has(edge.target)) + .map((edge) => edge.target) + .filter((id, index, ids) => ids.indexOf(id) === index); + } + + function getTrailBranches(node, state) { + if (!Array.isArray(node?.trail_branches)) return []; + return node.trail_branches + .map((branch) => ({ + after: branch?.after || "", + prompt: branch?.prompt || "Choose the next path", + choices: Array.isArray(branch?.choices) + ? branch.choices + .map((choice) => ({ + label: choice?.label || "Continue", + summary: choice?.summary || "", + nodes: Array.isArray(choice?.nodes) + ? choice.nodes.filter((id) => state.nodeIds.has(id)) + : [] + })) + .filter((choice) => choice.nodes.length) + : [] + })) + .filter((branch) => branch.after && branch.choices.length); + } + function pickNextTrailNode(state) { const trail = state.activeTrail; if (!trail?.nodes?.length) return null; + const branch = trail.branches?.find((candidate) => { + return candidate.after === state.focusId && !trail.branchChoices?.[candidate.after]; + }); + if (branch) { + showTrailChoice(branch, state); + return null; + } const currentIndex = trail.nodes.indexOf(state.focusId); const nextIndex = currentIndex >= 0 ? currentIndex + 1 : trail.index; const nextId = trail.nodes[nextIndex]; @@ -1881,6 +1960,49 @@ return nextId; } + function showTrailChoice(branch, state) { + if (state.trailChoicePending) return; + state.trailChoicePending = true; + closeTrailChoice(); + + const overlay = document.createElement("div"); + overlay.className = "xana-trail-choice"; + overlay.setAttribute("data-tts-skip", ""); + overlay.innerHTML = ` + + `; + document.body.appendChild(overlay); + + overlay.querySelectorAll("[data-trail-choice]").forEach((button) => { + button.addEventListener("click", () => { + const choice = branch.choices[Number(button.getAttribute("data-trail-choice"))]; + if (!choice?.nodes?.length) return; + state.activeTrail.branchChoices[branch.after] = choice.label; + state.activeTrail.nodes = choice.nodes; + state.activeTrail.index = 0; + state.trailChoicePending = false; + closeTrailChoice(); + travelToNode(choice.nodes[0], state, !state.tourActive); + }); + }); + } + + function closeTrailChoice() { + document.querySelectorAll(".xana-trail-choice").forEach((el) => el.remove()); + } + function rememberTourVisit(nodeId, state) { state.tourVisited = state.tourVisited || new Set(); state.tourRecent = state.tourRecent || []; @@ -1902,7 +2024,7 @@ if (!state.tourActive) return; const nextId = pickNextTourNode(state); if (nextId) travelToNode(nextId, state, false); - scheduleTourAdvance(state); + if (state.tourActive && !state.trailChoicePending) scheduleTourAdvance(state); }, TOUR_DWELL_MS); } @@ -2079,8 +2201,9 @@ } function renderTrailPlaylist(node, state) { - if (!Array.isArray(node.trail_nodes) || !node.trail_nodes.length) return ""; - const items = node.trail_nodes + const trailNodes = getTrailNodeIds(node, state); + if (!trailNodes.length) return ""; + const items = trailNodes .map((id, index) => { const target = state.allNodes.find((candidate) => candidate.id === id); if (!target) return ""; @@ -2111,10 +2234,14 @@ panelEl.querySelectorAll("[data-trail-jump]").forEach((button) => { button.addEventListener("click", () => { const id = button.getAttribute("data-trail-jump"); + const trailNodes = getTrailNodeIds(state.allNodes.find((node) => node.id === state.focusId), state); + const trailNode = state.allNodes.find((node) => node.id === state.focusId); state.activeTrail = { trailId: state.focusId, - nodes: [...(state.allNodes.find((node) => node.id === state.focusId)?.trail_nodes || [])], - index: 0 + nodes: trailNodes, + index: Math.max(0, trailNodes.indexOf(id) + 1), + branches: getTrailBranches(trailNode, state), + branchChoices: {} }; travelToNode(id, state, true); }); @@ -2166,23 +2293,31 @@ if (target) { target.classList.add("xana-fragment-highlight"); + target.setAttribute("data-fragment-label", `Fragment ${pending.fragmentId}`); target.scrollIntoView({ block: "center", behavior: "smooth" }); + const note = buildFragmentNote(pending, state, "Highlighted fragment"); + target.insertAdjacentElement("beforebegin", note); state.pendingFragmentHighlight = null; return; } + const note = buildFragmentNote(pending, state, "Fragment address"); + const content = panelEl.querySelector(".xana-node-content"); + if (content) content.prepend(note); + note.scrollIntoView({ block: "center", behavior: "smooth" }); + state.pendingFragmentHighlight = null; + } + + function buildFragmentNote(pending, state, label) { const note = document.createElement("aside"); note.className = "xana-fragment-note"; note.setAttribute("data-tts-skip", ""); note.setAttribute("aria-hidden", "true"); note.innerHTML = ` - Fragment address + ${escapeHtml(label)} ${escapeHtml(pending.fragment?.tumbler || `${state.allNodes.find((node) => node.id === pending.nodeId)?.protocol_id || pending.nodeId}#fragment/${pending.fragmentId}`)} `; - const content = panelEl.querySelector(".xana-node-content"); - if (content) content.prepend(note); - note.scrollIntoView({ block: "center", behavior: "smooth" }); - state.pendingFragmentHighlight = null; + return note; } function normalizeFragmentText(value) { @@ -2222,10 +2357,11 @@ if (!state.tourActive) return; window.setTimeout(() => { if (!state.tourActive) return; - const nextId = pickNextTourNode(state); - if (nextId) travelToNode(nextId, state, false); - }, 450); - }; + const nextId = pickNextTourNode(state); + if (nextId) travelToNode(nextId, state, false); + if (!nextId && !state.trailChoicePending) stopTour(state); + }, 450); + }; utterance.onerror = () => { if (state.tourActive) scheduleTourAdvance(state, true); }; @@ -2309,7 +2445,7 @@ renderInterfaceTourStep(); function renderInterfaceTourStep() { - graphEl.querySelectorAll(".xana-interface-tour, .xana-tour-spotlight").forEach((el) => el.remove()); + document.querySelectorAll(".xana-interface-tour, .xana-tour-spotlight").forEach((el) => el.remove()); document.querySelectorAll(".xana-tour-target").forEach((el) => el.classList.remove("xana-tour-target")); const step = steps[index]; @@ -2331,7 +2467,7 @@
  • `; - graphEl.appendChild(overlay); + document.body.appendChild(overlay); overlay.querySelector("[data-tour-close]")?.addEventListener("click", closeInterfaceTour); overlay.querySelector("[data-tour-prev]")?.addEventListener("click", () => { @@ -2349,7 +2485,7 @@ } function closeInterfaceTour() { - graphEl.querySelectorAll(".xana-interface-tour").forEach((el) => el.remove()); + document.querySelectorAll(".xana-interface-tour").forEach((el) => el.remove()); document.querySelectorAll(".xana-tour-target").forEach((el) => el.classList.remove("xana-tour-target")); } } @@ -3202,7 +3338,11 @@ link.addEventListener("click", (event) => { event.preventDefault(); closeTransientUi(state, { clearSearch: true }); + state.pendingFragmentHighlight = fragmentHighlightFromHref(matchingNode.id, href, state); travelToNode(matchingNode.id, state, true); + if (matchingNode.id === state.focusId) { + highlightPendingFragment(state); + } }); return; From 5bc346edef53877b2afb17da045762d560ab6697 Mon Sep 17 00:00:00 2001 From: csiefen Date: Thu, 18 Jun 2026 00:54:25 -0400 Subject: [PATCH 05/11] Polish search branding and light themes --- assets/css/style.css | 109 ++++++++++++++++++++++++++++--------- exampleSite/hugo.yaml | 14 +++++ layouts/partials/head.html | 18 ++++++ static/js/xananode.js | 91 +++++++++++++++++++++++++++---- 4 files changed, 194 insertions(+), 38 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 69a2de08..e4368448 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -58,13 +58,13 @@ html[data-xana-theme="light"] { color-scheme: light; - --xana-bg: #f6f8fb; + --xana-bg: #f3f7fb; --xana-surface: #ffffff; - --xana-surface-elevated: #eef3f7; - --xana-panel-bg: rgba(255, 255, 255, 0.97); - --xana-panel-border: rgba(15, 23, 42, 0.12); - --xana-text: #111827; - --xana-text-muted: #526173; + --xana-surface-elevated: #f1f5f9; + --xana-panel-bg: rgba(255, 255, 255, 0.985); + --xana-panel-border: rgba(30, 41, 59, 0.18); + --xana-text: #0f172a; + --xana-text-muted: #475569; --xana-accent: #0f766e; --xana-accent-soft: rgba(15, 118, 110, 0.12); --xana-accent-border: rgba(15, 118, 110, 0.28); @@ -77,7 +77,7 @@ html[data-xana-theme="classic"] { color-scheme: light; --xana-bg: #f8f9fa; --xana-surface: #ffffff; - --xana-surface-elevated: #eaecf0; + --xana-surface-elevated: #f6f6f6; --xana-panel-bg: #ffffff; --xana-panel-border: #a2a9b1; --xana-text: #202122; @@ -412,6 +412,7 @@ body, .xana-search-wrap { display: block; + position: relative; background: rgba(5, 7, 10, 0.82); border: 1px solid rgba(255, 255, 255, 0.13); border-radius: 1.5rem; @@ -433,18 +434,9 @@ body, min-width: 0; } -.xana-search-form::after { - content: ""; - flex: 0 0 auto; - width: 1px; - height: 1.15em; - margin-left: 0.05rem; - background: var(--xana-accent); - opacity: 0.75; - animation: xana-caret-blink 900ms steps(2, start) infinite; -} - .xana-search-form input { + position: relative; + z-index: 1; flex: 1; min-width: 0; border: none; @@ -456,16 +448,46 @@ body, outline: none; } +.xana-search-prompt { + position: absolute; + z-index: 0; + top: 50%; + left: 1rem; + right: 3.2rem; + display: inline-flex; + align-items: center; + width: max-content; + max-width: calc(100% - 4.2rem); + transform: translateY(-50%); + color: rgba(176, 246, 233, 0.84); + font: inherit; + font-size: 0.95rem; + line-height: 1.2; + overflow: hidden; + white-space: nowrap; + pointer-events: none; +} + +.xana-search-caret { + flex: 0 0 auto; + width: 1px; + height: 1.15em; + margin-left: 0.18rem; + background: var(--xana-accent); + opacity: 0.8; + animation: xana-caret-blink 900ms steps(2, start) infinite; +} + +.xana-search-wrap.is-focused .xana-search-prompt, +.xana-search-wrap.has-value .xana-search-prompt { + opacity: 0; +} + .xana-search-form input::placeholder { color: rgba(176, 246, 233, 0.78); font-style: normal; } -.xana-search-wrap:focus-within .xana-search-form::after, -.xana-search-wrap:has(input:not(:placeholder-shown)) .xana-search-form::after { - display: none; -} - @keyframes xana-caret-blink { 50% { opacity: 0; } } @@ -1114,6 +1136,39 @@ html[data-xana-theme="classic"] .xana-filter-popover { box-shadow: 0 12px 30px rgba(15, 23, 42, 0.14); } +html[data-xana-theme="light"] .xana-search-prompt { + color: rgba(15, 118, 110, 0.74); +} + +html[data-xana-theme="classic"] .xana-search-prompt { + color: #3366cc; +} + +html[data-xana-theme="light"] .xana-panel, +html[data-xana-theme="classic"] .xana-panel { + color: var(--xana-text); +} + +html[data-xana-theme="light"] .xana-node-content, +html[data-xana-theme="classic"] .xana-node-content { + color: var(--xana-text); +} + +html[data-xana-theme="light"] .xana-inline-node, +html[data-xana-theme="light"] .xana-list-card { + background: #ffffff; + border-color: rgba(30, 41, 59, 0.16); + box-shadow: 0 12px 28px rgba(15, 23, 42, 0.1); +} + +html[data-xana-theme="classic"] .xana-inline-node, +html[data-xana-theme="classic"] .xana-list-card { + background: #ffffff; + border-color: #a2a9b1; + border-radius: 2px; + box-shadow: none; +} + html[data-xana-theme="light"] .xana-search-results button, html[data-xana-theme="classic"] .xana-search-results button { background: var(--xana-surface); @@ -1376,7 +1431,7 @@ a.xana-type-badge-link:focus-visible { .xana-node-content { line-height: 1.7; - color: #f8fafc; + color: var(--xana-text); overflow-wrap: anywhere; } @@ -1385,7 +1440,7 @@ a.xana-type-badge-link:focus-visible { } .xana-node-content a { - color: #55d6be; + color: var(--xana-accent); } .xana-node-content a[href^="http"]::after { @@ -1929,9 +1984,9 @@ a.xana-type-badge-link:focus-visible { .xana-inline-node, .xana-list-card { - border: 1px solid rgba(44, 52, 66, 0.95); + border: 1px solid var(--xana-panel-border); border-radius: 20px; - background: linear-gradient(180deg, rgba(19, 23, 31, 0.98), rgba(10, 14, 19, 0.98)); + background: linear-gradient(180deg, color-mix(in srgb, var(--xana-surface-elevated) 92%, transparent), color-mix(in srgb, var(--xana-surface) 96%, transparent)); box-shadow: 0 12px 34px rgba(0, 0, 0, 0.18); } diff --git a/exampleSite/hugo.yaml b/exampleSite/hugo.yaml index 5fc4e30d..ff477484 100644 --- a/exampleSite/hugo.yaml +++ b/exampleSite/hugo.yaml @@ -21,6 +21,20 @@ params: plausibleSrc: "https://plausible.io/js/script.js" xananode: namespace: "xananode.example" + brand: + name: "XanaNode" + tagline: "Relationships preserve knowledge" + icon: "xananode-icon.svg" + attributionLabel: "XanaNode" + attributionText: "xananode.com" + attributionUrl: "https://xananode.com" + searchPrompts: + - "explore the knowledge substrate" + - "trace an idea across sources" + - "follow a claim to evidence" + - "compare connected nodes" + - "search for provenance" + - "map a trail through context" markup: goldmark: diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 378b2629..f0531fc1 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -34,6 +34,24 @@ } catch (_) {} })(); +{{- $xanaParams := site.Params.xananode | default dict -}} +{{- $brandParams := index $xanaParams "brand" | default dict -}} +{{- $brandConfig := dict + "name" (index $brandParams "name" | default "XanaNode") + "tagline" (index $brandParams "tagline" | default (site.Params.tagline | default "Relationships preserve knowledge")) + "icon" (index $brandParams "icon" | default "xananode-icon.svg" | relURL) + "homeLabel" (index $brandParams "homeLabel" | default "Go to home node") + "attributionLabel" (index $brandParams "attributionLabel" | default "XanaNode") + "attributionText" (index $brandParams "attributionText" | default "xananode.com") + "attributionUrl" (index $brandParams "attributionUrl" | default "https://xananode.com") +-}} +{{- $themeConfig := dict + "brand" $brandConfig + "searchPrompts" (index $xanaParams "searchPrompts" | default slice) +-}} + diff --git a/static/js/xananode.js b/static/js/xananode.js index bbd019b4..9948f86e 100644 --- a/static/js/xananode.js +++ b/static/js/xananode.js @@ -49,7 +49,7 @@ ttsDetail: "full" }); - const SEARCH_PROMPTS = [ + const DEFAULT_SEARCH_PROMPTS = [ "explore the knowledge substrate", "trace an idea across sources", "follow a claim to evidence", @@ -58,6 +58,11 @@ "map a trail through context" ]; + const THEME_CONFIG = normalizeThemeConfig(window.XanaNodeTheme); + const SEARCH_PROMPTS = THEME_CONFIG.searchPrompts.length + ? THEME_CONFIG.searchPrompts + : DEFAULT_SEARCH_PROMPTS; + const DEFAULT_TYPES = [ "essay", "concept", @@ -80,6 +85,29 @@ "schema" ]; + function normalizeThemeConfig(config) { + const raw = config && typeof config === "object" ? config : {}; + const brand = raw.brand && typeof raw.brand === "object" ? raw.brand : {}; + const prompts = Array.isArray(raw.searchPrompts) + ? raw.searchPrompts + .map((prompt) => String(prompt || "").trim()) + .filter(Boolean) + : []; + + return { + brand: { + name: String(brand.name || "XanaNode"), + tagline: String(brand.tagline || "Relationships preserve knowledge"), + icon: String(brand.icon || "/xananode-icon.svg"), + homeLabel: String(brand.homeLabel || "Go to home node"), + attributionLabel: String(brand.attributionLabel || brand.name || "XanaNode"), + attributionText: String(brand.attributionText || "xananode.com"), + attributionUrl: String(brand.attributionUrl || "https://xananode.com") + }, + searchPrompts: prompts + }; + } + // Fallback valid types — overridden at runtime by /schemas/xananode-node-types.json // Note: "artifact" is intentionally absent — existing artifact nodes will be flagged. let VALID_NODE_TYPES = new Set([ @@ -223,7 +251,9 @@ }), fetch("/schemas/xananode-node-types.json").then((r) => r.json()).catch(() => null), fetch("/schemas/xananode-relationship-types.json").then((r) => r.json()).catch(() => null), - fetch("/xananode-fragments.json").then((r) => r.json()).catch(() => null) + fetch("/xananode-fragments.json") + .then((r) => r.ok ? r.json() : null) + .catch(() => null) ])) .then(([data, nodeSchema, relSchema, fragmentsData]) => { if (nodeSchema?.node_types) { @@ -488,6 +518,7 @@ const chk = (type) => t.has(type) ? "checked" : ""; const mchk = (type) => m.has(type) ? "checked" : ""; const dact = (n) => d === n ? "class=\"active\"" : ""; + const brand = THEME_CONFIG.brand; // Inject navbar into the .xana-app parent (runs once; guard against duplicates) const appEl = graphEl.closest(".xana-app") || graphEl.parentElement; @@ -496,11 +527,11 @@ nav.className = "xana-navbar"; nav.setAttribute("aria-label", "XanaNode navigation"); nav.innerHTML = ` - `; @@ -510,8 +541,8 @@ graphEl.innerHTML = `
    - - · xananode.com + + · ${escapeHtml(brand.attributionText)}
    @@ -523,9 +554,13 @@ type="search" autocomplete="off" spellcheck="false" - placeholder="${escapeHtml(SEARCH_PROMPTS[0])}" + placeholder="" + aria-label="${escapeHtml(SEARCH_PROMPTS[0])}" value="${escapeHtml(state.searchQuery)}" > +
    Density - + +
    +
    Graph - - + +