System Graph
+Login Flow Map
+Cytoscape view of the login-side app graph, showing browser UI, scripts, datastores, and the relationships between them.
+diff --git a/specs/3_product_development_s/.gitkeep.md b/specs/3_product_development_s/.gitkeep.md deleted file mode 100644 index c693f13..0000000 --- a/specs/3_product_development_s/.gitkeep.md +++ /dev/null @@ -1 +0,0 @@ -keep \ No newline at end of file diff --git a/specs/3_product_development_s/system-ontology-framework/app.js b/specs/3_product_development_s/system-ontology-framework/app.js new file mode 100644 index 0000000..c461f67 --- /dev/null +++ b/specs/3_product_development_s/system-ontology-framework/app.js @@ -0,0 +1,286 @@ +console.log('APP.JS LOADED'); + +const GRAPH_URL = 'lod_graph_cytoscape.json'; + +function cleanValue(value) { + if (value == null) { + return null; + } + + if (typeof value === 'string') { + const trimmed = value.trim(); + if (!trimmed || trimmed.toLowerCase() === 'nan' || trimmed.toLowerCase() === 'undefined') { + return null; + } + return trimmed; + } + + if (typeof value === 'number' && Number.isNaN(value)) { + return null; + } + + return value; +} + +function normalizeId(value) { + const cleaned = cleanValue(value); + return cleaned == null ? null : String(cleaned).trim(); +} + +function pickNodeId(data, index) { + const rawId = normalizeId(data['node-id']) + || normalizeId(data.label) + || normalizeId(data.name) + || normalizeId(data.id); + + if (!rawId || rawId.startsWith('{')) { + return 'node-' + (index + 1); + } + + return rawId; +} + +function pickLabel(data, fallbackId) { + return normalizeId(data.label) + || normalizeId(data['node-id']) + || normalizeId(data.name) + || normalizeId(data['sub-module']) + || fallbackId; +} + +function normalizePayload(payload) { + if (Array.isArray(payload)) { + return payload; + } + + if (Array.isArray(payload && payload.elements)) { + return payload.elements; + } + + const nodes = Array.isArray(payload && payload.nodes) ? payload.nodes : []; + const edges = Array.isArray(payload && payload.edges) ? payload.edges : []; + return nodes.concat(edges); +} + +function buildGraph(rawItems) { + const nodes = []; + const edges = []; + const nodeIds = new Set(); + + rawItems.forEach(function (item, index) { + const data = (item && item.data) || item || {}; + const source = normalizeId(data.source || data.from); + const target = normalizeId(data.target || data.to); + + if (source && target) { + edges.push({ + data: { + id: normalizeId(data.id) || 'edge-' + (edges.length + 1), + source: source, + target: target, + label: normalizeId(data.label) || '', + 'edge-type': normalizeId(data['edge-type']) || normalizeId(data.label) || '', + entity: normalizeId(data.entity), + execution: normalizeId(data.execution), + schedule: normalizeId(data.schedule), + criticality: normalizeId(data.criticality) + } + }); + return; + } + + const id = pickNodeId(data, index); + if (!id || nodeIds.has(id)) { + return; + } + + nodeIds.add(id); + nodes.push({ + data: { + id: id, + label: pickLabel(data, id), + type: normalizeId(data.type), + module: normalizeId(data.module), + submodule: normalizeId(data['sub-module']), + codebase: normalizeId(data['code-base']), + environment: normalizeId(data['execution-environment']) + } + }); + }); + + const filteredEdges = edges.filter(function (edge) { + return nodeIds.has(edge.data.source) && nodeIds.has(edge.data.target); + }); + + return { nodes: nodes, edges: filteredEdges }; +} + +function setStatus(message, isError) { + const cyContainer = document.getElementById('cy'); + cyContainer.innerHTML = ''; + cyContainer.style.display = 'grid'; + cyContainer.style.placeItems = 'center'; + cyContainer.style.color = isError ? '#9f1239' : '#1f2937'; + cyContainer.style.font = '600 16px/1.4 system-ui, sans-serif'; + cyContainer.textContent = message; +} + +function colorForType(type) { + const normalized = (type || '').toLowerCase(); + + if (normalized === 'ui') { + return '#2563eb'; + } + + if (normalized === 'script') { + return '#0f766e'; + } + + if (normalized === 'datastore') { + return '#a16207'; + } + + return '#475569'; +} + +async function loadGraph() { + try { + const res = await fetch(GRAPH_URL, { cache: 'no-store' }); + if (!res.ok) { + throw new Error('Fetch failed: ' + res.status + ' ' + res.statusText); + } + + const rawText = await res.text(); + const sanitizedText = rawText.replace(/\bNaN\b/g, 'null'); + const payload = JSON.parse(sanitizedText); + const rawItems = normalizePayload(payload); + const graph = buildGraph(rawItems); + + console.log('GRAPH COUNTS:', { + rawItems: rawItems.length, + nodes: graph.nodes.length, + edges: graph.edges.length + }); + + if (!graph.nodes.length) { + setStatus('No valid nodes found in lod_graph_cytoscape.json', true); + return; + } + + document.getElementById('cy').style.display = 'block'; + + graph.nodes.forEach(function (node) { + node.data.color = colorForType(node.data.type); + }); + + const cy = cytoscape({ + container: document.getElementById('cy'), + elements: graph.nodes.concat(graph.edges), + style: [ + { + selector: 'node', + style: { + label: 'data(label)', + 'background-color': 'data(color)', + color: '#ffffff', + 'text-wrap': 'wrap', + 'text-max-width': 120, + 'text-valign': 'center', + 'text-halign': 'center', + 'font-size': 12, + 'font-weight': 700, + 'text-outline-width': 2, + 'text-outline-color': '#0f172a', + 'text-outline-opacity': 0.18, + width: 72, + height: 72, + 'border-width': 2, + 'border-color': '#0f172a', + 'border-opacity': 0.28, + 'overlay-opacity': 0, + 'shadow-blur': 18, + 'shadow-color': '#0f172a', + 'shadow-opacity': 0.12, + 'shadow-offset-x': 0, + 'shadow-offset-y': 6 + } + }, + { + selector: 'node[type = "UI"]', + style: { + shape: 'round-rectangle' + } + }, + { + selector: 'node[type = "Datastore"]', + style: { + shape: 'diamond' + } + }, + { + selector: 'node[type = "Script"]', + style: { + shape: 'ellipse' + } + }, + { + selector: 'edge', + style: { + width: 3, + label: 'data(label)', + color: '#334155', + 'font-size': 10, + 'font-weight': 600, + 'text-background-color': '#ffffff', + 'text-background-opacity': 0.9, + 'text-background-padding': 3, + 'text-rotation': 'autorotate', + 'curve-style': 'bezier', + 'line-color': '#64748b', + 'target-arrow-color': '#64748b', + 'target-arrow-shape': 'triangle', + 'arrow-scale': 1.1, + 'overlay-opacity': 0 + } + }, + { + selector: 'edge[edge-type = "writes"]', + style: { + 'line-style': 'dashed' + } + }, + { + selector: 'edge[edge-type = "returns"]', + style: { + 'line-color': '#7c3aed', + 'target-arrow-color': '#7c3aed' + } + }, + { + selector: 'edge[edge-type = "navigates"]', + style: { + 'line-color': '#db2777', + 'target-arrow-color': '#db2777' + } + } + ], + layout: { + name: 'breadthfirst', + directed: true, + spacingFactor: 1.15, + padding: 60, + fit: true, + animate: false + } + }); + + cy.ready(function () { + console.log('GRAPH READY:', cy.elements().length); + }); + } catch (error) { + console.error('GRAPH LOAD FAILED:', error); + setStatus('Graph load failed: ' + error.message, true); + } +} + +loadGraph(); diff --git a/specs/3_product_development_s/system-ontology-framework/graph_edges_nodes.json b/specs/3_product_development_s/system-ontology-framework/graph_edges_nodes.json new file mode 100644 index 0000000..47a0bac --- /dev/null +++ b/specs/3_product_development_s/system-ontology-framework/graph_edges_nodes.json @@ -0,0 +1,942 @@ +{ + "nodes": [ + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "file:login.js", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "js", + "type": "Script", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "file:login.html", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "html", + "type": "UI", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "login API", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "py", + "type": "Script", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "auth system", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "py", + "type": "Script", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "backend/vm", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "environment config", + "location": "srv/apps/lod-api/ui/static/", + "code-base": ".env", + "type": "Datastore", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "infrastructure", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "localStorage ", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "browser DOM (in memory)", + "type": "Datastore", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "file:dashboard.html", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "html", + "type": "UI", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": "DOM (#msg)", + "location": "srv/apps/lod-api/ui/static/", + "code-base": "browser DOM (in memory)", + "type": "Datastore", + "retry-policy": "no", + "indempotent": "yes", + "logging": "yes", + "metrics": NaN, + "alerts": NaN, + "execution-environment": "browser/client", + "vm-environment": "lod-dev-app, lod-prod-app", + "owner": "system", + "external-connections": NaN, + "system-version": "1.0.0", + "component-version": "1.0.0", + "script-version": "1.0.0" + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + }, + { + "module": "customer-db", + "sub-module": "login", + "active": "prod", + "node-id": NaN, + "location": NaN, + "code-base": NaN, + "type": NaN, + "retry-policy": NaN, + "indempotent": NaN, + "logging": NaN, + "metrics": NaN, + "alerts": NaN, + "execution-environment": NaN, + "vm-environment": NaN, + "owner": NaN, + "external-connections": NaN, + "system-version": NaN, + "component-version": NaN, + "script-version": NaN + } + ], + "edges": [ + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.html-login.js-calls", + "from-node": "login.html", + "to-node": "login.js", + "edge-type": "calls", + "entity": "user", + "execution": "user", + "schedule": "on submit", + "state-transition": "submitted", + "dependencies": "login.html", + "criticality": "high", + "execution-environment": "browser/client" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.js-login.js-validates", + "from-node": "login.js", + "to-node": "login.js", + "edge-type": "validates", + "entity": "user", + "execution": "event", + "schedule": "on submit", + "state-transition": "validated", + "dependencies": "login.html", + "criticality": "high", + "execution-environment": "browser/client" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.js-login API (/login) (API)-calls", + "from-node": "login.js", + "to-node": "login API (/login) (API)", + "edge-type": "calls", + "entity": "credentials", + "execution": "user", + "schedule": "on submit", + "state-transition": "validated", + "dependencies": "login.html", + "criticality": "high", + "execution-environment": "backend/vm" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login API (/login) (API)-environment config (DataStore / External)-reads", + "from-node": "login API (/login) (API)", + "to-node": "environment config (DataStore / External)", + "edge-type": "reads", + "entity": "credentials", + "execution": "user", + "schedule": "on submit", + "state-transition": "validated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "backend/vm" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login API (/login) (API)-auth system (Script / Backend logic)-validates", + "from-node": "login API (/login) (API)", + "to-node": "auth system (Script / Backend logic)", + "edge-type": "validates", + "entity": "credentials", + "execution": "user", + "schedule": "on submit", + "state-transition": "authenticated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "infrastructure" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login API (/login) (API)-login.js-returns", + "from-node": "login API (/login) (API)", + "to-node": "login.js", + "edge-type": "returns", + "entity": "token", + "execution": "user", + "schedule": "on submit", + "state-transition": "authenticated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "backend/vm" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.js-localStorage (DataStore)-writes", + "from-node": "login.js", + "to-node": "localStorage (DataStore)", + "edge-type": "writes", + "entity": "token", + "execution": "user", + "schedule": "on submit", + "state-transition": "authenticated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "browser/client" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.js-dashboard.html (UI)-navigates", + "from-node": "login.js", + "to-node": "dashboard.html (UI)", + "edge-type": "navigates", + "entity": "token, session", + "execution": "user", + "schedule": "on submit", + "state-transition": "authenticated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "browser/client" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": "login.js-DOM (#msg) (UI component, optional)-writes", + "from-node": "login.js", + "to-node": "DOM (#msg) (UI component, optional)", + "edge-type": "writes", + "entity": "error message", + "execution": "user", + "schedule": "on submit", + "state-transition": "authenticated", + "dependencies": "login.js", + "criticality": "high", + "execution-environment": "browser/client" + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + }, + { + "module": "customer-db", + "active": "prod", + "edge-id": NaN, + "from-node": NaN, + "to-node": NaN, + "edge-type": NaN, + "entity": NaN, + "execution": NaN, + "schedule": NaN, + "state-transition": NaN, + "dependencies": NaN, + "criticality": NaN, + "execution-environment": NaN + } + ] +} \ No newline at end of file diff --git a/specs/3_product_development_s/system-ontology-framework/index.html b/specs/3_product_development_s/system-ontology-framework/index.html new file mode 100644 index 0000000..6f5cfac --- /dev/null +++ b/specs/3_product_development_s/system-ontology-framework/index.html @@ -0,0 +1,170 @@ + + +
+ + +System Graph
+Cytoscape view of the login-side app graph, showing browser UI, scripts, datastores, and the relationships between them.
+