diff --git a/modules/rnetwork/mod.ts b/modules/rnetwork/mod.ts index 8c4d4cf..49cb79f 100644 --- a/modules/rnetwork/mod.ts +++ b/modules/rnetwork/mod.ts @@ -217,16 +217,100 @@ routes.get("/api/graph", async (c) => { if (!token) { isDemoData = true; + + // ── Demo DAO: 24 members with delegation-based trust ── + const daoId = "demo-dao"; + const spaceHubId = "demo-space"; nodes.push( - { id: "demo-1", label: "Alice", type: "person", data: {} }, - { id: "demo-2", label: "Bob", type: "person", data: {} }, - { id: "demo-3", label: "Acme Corp", type: "company", data: {} }, - ); - edges.push( - { source: "demo-1", target: "demo-3", type: "works_at" }, - { source: "demo-2", target: "demo-3", type: "works_at" }, - { source: "demo-1", target: "demo-2", type: "contact_of" }, + { id: daoId, label: "Demo DAO", type: "company", data: { role: "dao" } }, + { id: spaceHubId, label: "demo", type: "space" as any, data: {} }, ); + + // Members: id, name, role, delegatedWeight per authority (gov, fin, dev) + const members: Array<[string, string, string, number, number, number]> = [ + ["m01", "Alice Chen", "steward", 0.95, 0.60, 0.40], + ["m02", "Bob Martinez", "steward", 0.80, 0.85, 0.30], + ["m03", "Carol Okafor", "steward", 0.70, 0.45, 0.90], + ["m04", "David Kim", "council", 0.65, 0.70, 0.55], + ["m05", "Eve Nakamura", "council", 0.55, 0.50, 0.75], + ["m06", "Frank Osei", "council", 0.50, 0.80, 0.35], + ["m07", "Grace Liu", "contributor", 0.40, 0.35, 0.85], + ["m08", "Hassan Patel", "contributor", 0.35, 0.65, 0.45], + ["m09", "Ingrid Svensson", "contributor", 0.45, 0.30, 0.60], + ["m10", "Jorge Reyes", "contributor", 0.30, 0.55, 0.50], + ["m11", "Kaia Tanaka", "contributor", 0.25, 0.40, 0.70], + ["m12", "Leo Adeyemi", "contributor", 0.35, 0.25, 0.55], + ["m13", "Maya Johansson", "member", 0.20, 0.30, 0.40], + ["m14", "Nia Mensah", "member", 0.15, 0.45, 0.20], + ["m15", "Omar Farouk", "member", 0.25, 0.20, 0.35], + ["m16", "Priya Sharma", "member", 0.10, 0.35, 0.30], + ["m17", "Quinn O'Brien", "member", 0.20, 0.15, 0.25], + ["m18", "Rosa Gutierrez", "member", 0.15, 0.20, 0.15], + ["m19", "Sam Achebe", "member", 0.10, 0.10, 0.45], + ["m20", "Tara Singh", "member", 0.05, 0.25, 0.10], + ["m21", "Uri Goldberg", "member", 0.12, 0.08, 0.20], + ["m22", "Valentina Costa", "member", 0.08, 0.15, 0.12], + ["m23", "Wei Zhang", "member", 0.18, 0.12, 0.08], + ["m24", "Yuki Mori", "member", 0.06, 0.05, 0.18], + ]; + + for (const [id, name, role, govW, finW, devW] of members) { + const avgTrust = (govW + finW + devW) / 3; + nodes.push({ + id, label: name, type: "rspace_user" as any, + data: { + role, + trustScore: Math.round(avgTrust * 100) / 100, + delegatedWeight: Math.round(Math.max(govW, finW, devW) * 100) / 100, + trustScores: { "gov-ops": govW, "fin-ops": finW, "dev-ops": devW }, + }, + }); + edges.push({ source: id, target: spaceHubId, type: "member_of" }); + edges.push({ source: id, target: daoId, type: "works_at" }); + } + + // ── Delegation edges: who delegates to whom, per authority ── + // Governance delegations — Alice is top steward + const govDelegations: Array<[string, string, number]> = [ + ["m04", "m01", 0.8], ["m05", "m01", 0.6], ["m06", "m01", 0.5], + ["m07", "m04", 0.7], ["m08", "m02", 0.6], ["m09", "m01", 0.5], + ["m10", "m04", 0.4], ["m11", "m05", 0.5], ["m12", "m03", 0.6], + ["m13", "m02", 0.3], ["m14", "m06", 0.4], ["m15", "m01", 0.5], + ["m16", "m04", 0.3], ["m17", "m05", 0.4], ["m18", "m02", 0.3], + ["m19", "m03", 0.2], ["m20", "m06", 0.3], ["m21", "m01", 0.2], + ["m22", "m04", 0.2], ["m23", "m02", 0.4], ["m24", "m03", 0.1], + ]; + // Financial delegations — Bob is top steward + const finDelegations: Array<[string, string, number]> = [ + ["m04", "m02", 0.7], ["m05", "m06", 0.6], ["m03", "m02", 0.4], + ["m07", "m06", 0.5], ["m08", "m02", 0.8], ["m09", "m04", 0.3], + ["m10", "m02", 0.6], ["m11", "m06", 0.5], ["m12", "m08", 0.4], + ["m13", "m04", 0.3], ["m14", "m02", 0.7], ["m15", "m06", 0.3], + ["m16", "m08", 0.5], ["m17", "m04", 0.2], ["m18", "m02", 0.3], + ["m19", "m10", 0.2], ["m20", "m06", 0.4], ["m21", "m04", 0.1], + ["m22", "m02", 0.3], ["m23", "m08", 0.2], ["m24", "m14", 0.1], + ]; + // Dev-ops delegations — Carol is top steward + const devDelegations: Array<[string, string, number]> = [ + ["m04", "m03", 0.5], ["m05", "m03", 0.7], ["m01", "m03", 0.4], + ["m07", "m03", 0.9], ["m08", "m05", 0.4], ["m09", "m07", 0.6], + ["m10", "m05", 0.5], ["m11", "m03", 0.7], ["m12", "m07", 0.5], + ["m13", "m09", 0.4], ["m14", "m05", 0.2], ["m15", "m03", 0.3], + ["m16", "m07", 0.4], ["m17", "m11", 0.3], ["m18", "m09", 0.2], + ["m19", "m03", 0.6], ["m20", "m07", 0.2], ["m21", "m11", 0.3], + ["m22", "m05", 0.2], ["m23", "m09", 0.1], ["m24", "m03", 0.3], + ]; + + for (const [from, to, weight] of govDelegations) { + edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "gov-ops" } as any); + } + for (const [from, to, weight] of finDelegations) { + edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "fin-ops" } as any); + } + for (const [from, to, weight] of devDelegations) { + edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "dev-ops" } as any); + } + for (const n of nodes) nodeIds.add(n.id); } else { const data = await twentyQuery(`{