From 033d9bf8fda53229c7000e359f78dc11e99b2708 Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Sun, 4 Oct 2026 09:28:34 +0000 Subject: [PATCH] docs: refine organization connector entry and squad alignment --- .../organization-structure.architecture.json | 112 ++++++++++++------ scripts/portal.test.mjs | 7 +- 2 files changed, 79 insertions(+), 40 deletions(-) diff --git a/diagrams/organization-structure.architecture.json b/diagrams/organization-structure.architecture.json index 95494ae..7f9faed 100644 --- a/diagrams/organization-structure.architecture.json +++ b/diagrams/organization-structure.architecture.json @@ -121,11 +121,11 @@ "label": "Product Management", "sublabel": "Strategy, priorities and outcomes", "pos": [ - 40, + 100, 480 ], "size": [ - 280, + 220, 80 ] }, @@ -135,11 +135,11 @@ "label": "Product Design", "sublabel": "Research and experience design", "pos": [ - 40, + 100, 620 ], "size": [ - 280, + 220, 80 ] }, @@ -149,11 +149,11 @@ "label": "Product Engineering", "sublabel": "Marketplace software delivery", "pos": [ - 360, + 420, 480 ], "size": [ - 280, + 220, 80 ] }, @@ -163,11 +163,11 @@ "label": "Platform & IT", "sublabel": "Reliability and internal systems", "pos": [ - 360, + 420, 620 ], "size": [ - 280, + 220, 80 ] }, @@ -177,11 +177,11 @@ "label": "Architecture & Security", "sublabel": "Technical standards and protection", "pos": [ - 360, + 420, 760 ], "size": [ - 280, + 220, 80 ] }, @@ -191,11 +191,11 @@ "label": "Quality Engineering", "sublabel": "Testing and release quality", "pos": [ - 360, + 420, 900 ], "size": [ - 280, + 220, 80 ] }, @@ -205,11 +205,11 @@ "label": "Data & AI", "sublabel": "Analytics, ML and AI enablement", "pos": [ - 360, + 420, 1040 ], "size": [ - 280, + 220, 80 ] }, @@ -219,11 +219,11 @@ "label": "Operations Squad", "sublabel": "Service, resolution, risk and quality", "pos": [ - 680, + 740, 480 ], "size": [ - 280, + 220, 80 ] }, @@ -233,11 +233,11 @@ "label": "Marketing Squad", "sublabel": "Brand, acquisition and retention", "pos": [ - 1000, + 1060, 480 ], "size": [ - 280, + 220, 80 ] }, @@ -247,11 +247,11 @@ "label": "Finance & Accounting Squad", "sublabel": "Planning, controls and payments", "pos": [ - 1320, + 1380, 480 ], "size": [ - 280, + 220, 80 ] }, @@ -261,11 +261,11 @@ "label": "People & Administration Squad", "sublabel": "Talent, people and workplace", "pos": [ - 1640, + 1700, 480 ], "size": [ - 280, + 220, 80 ] } @@ -275,103 +275,137 @@ "id": "management-product", "from": "management", "to": "product", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "management-technology", "from": "management", "to": "technology", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "management-operations", "from": "management", "to": "operations", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "management-marketing", "from": "management", "to": "marketing", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "management-finance", "from": "management", "to": "finance", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "management-people", "from": "management", "to": "people", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "top" }, { "id": "product-1", "from": "product", "to": "product-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "product-2", "from": "product", "to": "product-team-2", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "technology-1", "from": "technology", "to": "technology-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "technology-2", "from": "technology", "to": "technology-team-2", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "technology-3", "from": "technology", "to": "technology-team-3", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "technology-4", "from": "technology", "to": "technology-team-4", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "technology-5", "from": "technology", "to": "technology-team-5", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "operations-1", "from": "operations", "to": "operations-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "marketing-1", "from": "marketing", "to": "marketing-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "finance-1", "from": "finance", "to": "finance-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" }, { "id": "people-1", "from": "people", "to": "people-team-1", - "variant": "default" + "variant": "default", + "fromSide": "bottom", + "toSide": "left" } ], "cards": [ diff --git a/scripts/portal.test.mjs b/scripts/portal.test.mjs index 268807d..58b81f6 100644 --- a/scripts/portal.test.mjs +++ b/scripts/portal.test.mjs @@ -89,7 +89,12 @@ test('departments share one row and each has delivery teams below it', () => { assert.equal(teams.length, i === 0 ? 2 : i === 1 ? 5 : 1); for (const team of teams) { assert(team.pos[1] > department.pos[1] + department.size[1]); - assert.equal(team.pos[0], department.pos[0]); + assert(team.size[0] < department.size[0]); + assert.equal(team.pos[0] + team.size[0], department.pos[0] + department.size[0]); + const edge = spec.connections.find(e => e.from === id && e.to === team.id); + assert.equal(edge.toSide, 'left'); + assert.equal(edge.fromSide, 'bottom'); + assert.equal(spec.connections.find(e => e.from === 'management' && e.to === id).toSide, 'top'); assert.deepEqual(spec.connections.filter(e => e.to === team.id).map(e => e.from), [id]); assert(page.includes(team.label)); }