From 073a64fe56fd425a95d1031e9d27c76814d76977 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 12 Mar 2026 20:08:05 -0700 Subject: [PATCH] feat(rnetwork): expand demo CRM to 48 members with delegation-only flows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove Demo DAO and space hub placeholder nodes — members now connect only via trust delegation edges. Add 24 new members (m25–m48) with ops-vertical specializations and expand delegation arrays to 141 edges (47 per authority) with proper hierarchical flow patterns. Co-Authored-By: Claude Opus 4.6 --- modules/rnetwork/mod.ts | 174 ++++++++++++++++++++++++++-------------- 1 file changed, 116 insertions(+), 58 deletions(-) diff --git a/modules/rnetwork/mod.ts b/modules/rnetwork/mod.ts index 49cb79f..5e6c7ed 100644 --- a/modules/rnetwork/mod.ts +++ b/modules/rnetwork/mod.ts @@ -218,40 +218,61 @@ 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: daoId, label: "Demo DAO", type: "company", data: { role: "dao" } }, - { id: spaceHubId, label: "demo", type: "space" as any, data: {} }, - ); - + // ── Demo: 48 members with delegation-based trust flows ── // 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], + // Stewards — top-level, high trust across boards + ["m01", "Alice Chen", "steward", 0.95, 0.50, 0.40], + ["m02", "Bob Martinez", "steward", 0.45, 0.90, 0.35], + ["m03", "Carol Okafor", "steward", 0.40, 0.35, 0.95], + // Council — secondary hubs + ["m04", "David Kim", "council", 0.70, 0.40, 0.35], + ["m05", "Eve Nakamura", "council", 0.35, 0.30, 0.75], + ["m06", "Frank Osei", "council", 0.30, 0.80, 0.25], + ["m25", "Anika Bergström", "council", 0.65, 0.30, 0.25], + ["m26", "Rafael Oliveira", "council", 0.25, 0.75, 0.30], + ["m27", "Chen Wei", "council", 0.30, 0.25, 0.70], + // Contributors — mid-tier, specialize in one vertical + ["m07", "Grace Liu", "contributor", 0.50, 0.20, 0.65], + ["m08", "Hassan Patel", "contributor", 0.20, 0.60, 0.30], + ["m09", "Ingrid Svensson", "contributor", 0.55, 0.25, 0.30], + ["m10", "Jorge Reyes", "contributor", 0.20, 0.55, 0.25], + ["m11", "Kaia Tanaka", "contributor", 0.15, 0.20, 0.65], + ["m12", "Leo Adeyemi", "contributor", 0.20, 0.15, 0.60], + ["m28", "Fatima Al-Hassan", "contributor", 0.50, 0.20, 0.15], + ["m29", "Marcus Johnson", "contributor", 0.15, 0.55, 0.20], + ["m30", "Yuna Park", "contributor", 0.20, 0.15, 0.55], + ["m31", "Dmitri Volkov", "contributor", 0.45, 0.25, 0.20], + ["m32", "Amara Diallo", "contributor", 0.15, 0.50, 0.25], + ["m33", "Liam O'Connor", "contributor", 0.20, 0.20, 0.50], + ["m34", "Zara Hussain", "contributor", 0.45, 0.15, 0.20], + ["m35", "Tomás Herrera", "contributor", 0.20, 0.50, 0.15], + ["m36", "Sakura Ito", "contributor", 0.15, 0.15, 0.50], + // Members — base layer, delegate upward + ["m13", "Maya Johansson", "member", 0.15, 0.20, 0.30], + ["m14", "Nia Mensah", "member", 0.10, 0.40, 0.15], + ["m15", "Omar Farouk", "member", 0.30, 0.15, 0.20], + ["m16", "Priya Sharma", "member", 0.10, 0.30, 0.20], + ["m17", "Quinn O'Brien", "member", 0.20, 0.10, 0.15], + ["m18", "Rosa Gutierrez", "member", 0.15, 0.20, 0.10], + ["m19", "Sam Achebe", "member", 0.10, 0.10, 0.35], + ["m20", "Tara Singh", "member", 0.05, 0.25, 0.10], + ["m21", "Uri Goldberg", "member", 0.15, 0.08, 0.12], + ["m22", "Valentina Costa", "member", 0.08, 0.15, 0.10], + ["m23", "Wei Zhang", "member", 0.20, 0.10, 0.08], + ["m24", "Yuki Mori", "member", 0.06, 0.05, 0.18], + ["m37", "Eleni Papadopoulos", "member", 0.25, 0.10, 0.10], + ["m38", "Kwame Asante", "member", 0.10, 0.30, 0.08], + ["m39", "Astrid Lindgren", "member", 0.08, 0.10, 0.25], + ["m40", "Ravi Kapoor", "member", 0.22, 0.12, 0.10], + ["m41", "Nadia Petrov", "member", 0.10, 0.28, 0.12], + ["m42", "Javier Morales", "member", 0.12, 0.08, 0.22], + ["m43", "Asha Nair", "member", 0.20, 0.10, 0.08], + ["m44", "Pierre Dubois", "member", 0.08, 0.22, 0.10], + ["m45", "Hana Novak", "member", 0.10, 0.08, 0.20], + ["m46", "Kofi Mensah", "member", 0.18, 0.12, 0.06], + ["m47", "Isabella Romano", "member", 0.06, 0.20, 0.10], + ["m48", "Lars Eriksson", "member", 0.10, 0.06, 0.18], ]; for (const [id, name, role, govW, finW, devW] of members) { @@ -265,40 +286,77 @@ routes.get("/api/graph", async (c) => { 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 + // Gov-ops delegations — Alice (m01) is top target, m04/m25 are secondary hubs 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], + // Council → stewards + ["m04", "m01", 0.7], ["m05", "m01", 0.5], ["m06", "m01", 0.4], + ["m25", "m01", 0.8], ["m26", "m01", 0.3], ["m27", "m01", 0.3], + // Council cross-delegation + ["m06", "m04", 0.3], ["m26", "m25", 0.4], + // Contributors → council/stewards + ["m07", "m04", 0.6], ["m08", "m25", 0.4], ["m09", "m01", 0.6], + ["m10", "m04", 0.3], ["m11", "m25", 0.3], ["m12", "m04", 0.4], + ["m28", "m01", 0.5], ["m29", "m25", 0.3], ["m30", "m04", 0.3], + ["m31", "m01", 0.5], ["m32", "m25", 0.3], ["m33", "m04", 0.3], + ["m34", "m25", 0.5], ["m35", "m04", 0.3], ["m36", "m25", 0.3], + // Members → contributors/council + ["m13", "m09", 0.3], ["m14", "m28", 0.3], ["m15", "m01", 0.4], + ["m16", "m04", 0.2], ["m17", "m31", 0.3], ["m18", "m09", 0.2], + ["m19", "m34", 0.2], ["m20", "m25", 0.2], ["m21", "m28", 0.3], + ["m22", "m04", 0.2], ["m23", "m01", 0.4], ["m24", "m31", 0.1], + ["m37", "m01", 0.4], ["m38", "m25", 0.2], ["m39", "m04", 0.2], + ["m40", "m09", 0.3], ["m41", "m28", 0.2], ["m42", "m25", 0.2], + ["m43", "m01", 0.3], ["m44", "m04", 0.2], ["m45", "m34", 0.2], + ["m46", "m25", 0.3], ["m47", "m31", 0.1], ["m48", "m04", 0.2], ]; - // Financial delegations — Bob is top steward + // Fin-ops delegations — Bob (m02) is top target, m06/m26 are secondary hubs 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], + // Council → stewards + ["m04", "m02", 0.6], ["m05", "m06", 0.5], ["m06", "m02", 0.7], + ["m25", "m02", 0.3], ["m26", "m02", 0.8], ["m27", "m06", 0.3], + // Council cross-delegation + ["m04", "m06", 0.3], ["m25", "m26", 0.3], + // Contributors → council/stewards + ["m07", "m06", 0.4], ["m08", "m02", 0.7], ["m09", "m26", 0.3], + ["m10", "m02", 0.6], ["m11", "m06", 0.4], ["m12", "m26", 0.3], + ["m28", "m06", 0.3], ["m29", "m02", 0.6], ["m30", "m26", 0.3], + ["m31", "m06", 0.3], ["m32", "m02", 0.5], ["m33", "m26", 0.3], + ["m34", "m06", 0.2], ["m35", "m02", 0.6], ["m36", "m26", 0.3], + // Members → contributors/council + ["m13", "m06", 0.3], ["m14", "m02", 0.5], ["m15", "m26", 0.2], + ["m16", "m08", 0.4], ["m17", "m06", 0.2], ["m18", "m02", 0.3], + ["m19", "m10", 0.2], ["m20", "m26", 0.4], ["m21", "m06", 0.1], + ["m22", "m02", 0.3], ["m23", "m29", 0.2], ["m24", "m32", 0.1], + ["m37", "m26", 0.2], ["m38", "m02", 0.4], ["m39", "m06", 0.2], + ["m40", "m29", 0.2], ["m41", "m02", 0.4], ["m42", "m26", 0.1], + ["m43", "m06", 0.2], ["m44", "m02", 0.3], ["m45", "m32", 0.1], + ["m46", "m26", 0.2], ["m47", "m02", 0.3], ["m48", "m35", 0.1], ]; - // Dev-ops delegations — Carol is top steward + // Dev-ops delegations — Carol (m03) is top target, m05/m27 are secondary hubs 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], + // Council → stewards + ["m04", "m03", 0.4], ["m05", "m03", 0.7], ["m06", "m03", 0.3], + ["m25", "m03", 0.3], ["m26", "m27", 0.3], ["m27", "m03", 0.7], + // Council cross-delegation + ["m04", "m05", 0.3], ["m25", "m27", 0.3], + // Contributors → council/stewards + ["m07", "m03", 0.7], ["m08", "m05", 0.4], ["m09", "m27", 0.4], + ["m10", "m05", 0.4], ["m11", "m03", 0.7], ["m12", "m27", 0.6], + ["m28", "m05", 0.3], ["m29", "m27", 0.3], ["m30", "m03", 0.6], + ["m31", "m05", 0.3], ["m32", "m27", 0.3], ["m33", "m03", 0.5], + ["m34", "m27", 0.3], ["m35", "m05", 0.2], ["m36", "m03", 0.6], + // Members → contributors/council + ["m13", "m07", 0.4], ["m14", "m05", 0.2], ["m15", "m27", 0.3], + ["m16", "m11", 0.3], ["m17", "m07", 0.2], ["m18", "m30", 0.2], + ["m19", "m03", 0.5], ["m20", "m27", 0.2], ["m21", "m11", 0.2], + ["m22", "m05", 0.2], ["m23", "m33", 0.1], ["m24", "m03", 0.3], + ["m37", "m27", 0.2], ["m38", "m05", 0.1], ["m39", "m03", 0.3], + ["m40", "m30", 0.2], ["m41", "m27", 0.2], ["m42", "m03", 0.3], + ["m43", "m36", 0.1], ["m44", "m05", 0.2], ["m45", "m03", 0.3], + ["m46", "m33", 0.1], ["m47", "m27", 0.2], ["m48", "m03", 0.3], ]; for (const [from, to, weight] of govDelegations) {