From 9fbcb1cc73ea89d3328ac0422aef9131aaba9ab0 Mon Sep 17 00:00:00 2001 From: manager Date: Wed, 10 Jun 2026 17:37:10 +0000 Subject: [PATCH 01/12] feat(ai-atlas): add Reception node outside rings with public internet globe Co-Authored-By: Claude Opus 4.7 --- public/ai-atlas/data-ru.json | 25 +++++++++++ public/ai-atlas/data.json | 25 +++++++++++ src/pages/ai-atlas.tsx | 84 ++++++++++++++++++++++++++++++++++++ src/styles/ai-atlas.css | 16 +++++++ 4 files changed, 150 insertions(+) diff --git a/public/ai-atlas/data-ru.json b/public/ai-atlas/data-ru.json index ec7c9392..2d15f42a 100644 --- a/public/ai-atlas/data-ru.json +++ b/public/ai-atlas/data-ru.json @@ -34,6 +34,18 @@ } }, + "reception": { + "r": 1.13, + "globeR": 1.33, + "member": { + "id": "reception", + "label": "Ресепшн", + "diamond": "blue", + "theta": -45, + "status": "ok" + } + }, + "devEnv": { "r": 0.4, "members": [ @@ -291,6 +303,19 @@ ] }, + "reception": { + "title": "РЕСЕПШН", + "cjk": "受付", + "desc": "Стойка приёма. Живёт вне всех колец, смотрит в публичный интернет и подчиняется Wolf напрямую — публичные сущности стучатся сюда первыми.", + "rows": [ + { "k": "тип", "v": "ИИ-агент", "cls": "blue" }, + { "k": "роль", "v": "публичная стойка приёма" }, + { "k": "смотрит в", "v": "публичный интернет" }, + { "k": "подчиняется", "v": "Wolf", "cls": "gold", "ref": "wolf" }, + { "k": "кольцо", "v": "вне всех колец" } + ] + }, + "tools": { "title": "ИНСТРУМЕНТЫ И ТВИКИ", "cjk": "工具", diff --git a/public/ai-atlas/data.json b/public/ai-atlas/data.json index 0ad20146..f94d21d1 100644 --- a/public/ai-atlas/data.json +++ b/public/ai-atlas/data.json @@ -34,6 +34,18 @@ } }, + "reception": { + "r": 1.13, + "globeR": 1.33, + "member": { + "id": "reception", + "label": "Reception", + "diamond": "blue", + "theta": -45, + "status": "ok" + } + }, + "devEnv": { "r": 0.4, "members": [ @@ -291,6 +303,19 @@ ] }, + "reception": { + "title": "RECEPTION", + "cjk": "受付", + "desc": "The front desk. Lives outside every ring, faces the public internet, and answers to Wolf directly — public entities knock here first.", + "rows": [ + { "k": "kind", "v": "ai agent", "cls": "blue" }, + { "k": "role", "v": "public front desk" }, + { "k": "faces", "v": "public internet" }, + { "k": "reports", "v": "wolf", "cls": "gold" }, + { "k": "ring", "v": "outside all rings" } + ] + }, + "tools": { "title": "TOOLS AND TWEAKS", "cjk": "工具", diff --git a/src/pages/ai-atlas.tsx b/src/pages/ai-atlas.tsx index 33fb8a8a..8e12f059 100644 --- a/src/pages/ai-atlas.tsx +++ b/src/pages/ai-atlas.tsx @@ -77,6 +77,7 @@ const STRINGS = { apexFounderFallback: 'founder', redactedPlaceholder: 'REDACTED', engLeadLabel: 'Eng. Lead', + publicInternetLabel: 'PUBLIC INTERNET', claudeMdLabel: 'claude.md', linesValue: (n: number) => `${n.toLocaleString()} lines`, canvasStats: { @@ -287,6 +288,7 @@ const STRINGS = { apexFounderFallback: 'основатель', redactedPlaceholder: 'СКРЫТО', engLeadLabel: 'Тех. Лид', + publicInternetLabel: 'ПУБЛИЧНЫЙ ИНТЕРНЕТ', claudeMdLabel: 'claude.md', linesValue: (n: number) => { const m10 = n % 10; @@ -763,6 +765,32 @@ function Spoke({ from, to, kind = 'auth', dim, glow }: any) { ); } +/* ---------- public internet globe ---------- */ + +function GlobeMark({ x, y, label, dim }: any) { + const r = 15; + const lat = r * 0.5; + const latW = r * 0.866; + return ( + + ); +} + function TerritoryArc({ project, R }: any) { if (!project.territoryArc) return null; const half = project.territoryArc / 2; @@ -1003,6 +1031,8 @@ function tallyDiamonds(data: any) { }; if (data.apex) tally(data.apex.diamond); if (data.order && data.order.member) tally(data.order.member.diamond); + if (data.reception && data.reception.member) + tally(data.reception.member.diamond); ((data.devEnv && data.devEnv.members) || []).forEach((n: any) => tally(n.diamond), ); @@ -1613,6 +1643,14 @@ function AiAtlasApp() { const p = POL(data.order.r, n.theta); m[n.id] = { ...p, ring: 'order', node: n }; } + if (data.reception) { + const n = data.reception.member; + const p = POL(data.reception.r, n.theta); + m[n.id] = { ...p, ring: 'outside', node: n }; + // Globe sits further out on the same radial, so globe → reception → + // wolf reads as a single straight line from the public internet inward. + m['globe'] = { ...POL(data.reception.globeR, n.theta), ring: 'outside' }; + } data.devEnv.members.forEach((n: any) => { const p = POL(data.devEnv.r, n.theta); m[n.id] = { ...p, ring: 'dev', node: n }; @@ -1800,6 +1838,10 @@ function AiAtlasApp() { set.add('order'); set.add('terminal'); set.add('lead-terminal'); + if (data.reception) set.add('reception'); + } + if (highlightId === 'reception') { + set.add('wolf'); } if (highlightId === 'order') { set.add('wolf'); @@ -1936,6 +1978,25 @@ function AiAtlasApp() { glow={spokeGlow('wolf', 'order')} /> + {data.reception && ( + <> + + + + )} + {data.devEnv.members.map((n: any) => ( + {data.reception && ( + <> + + + + )} + {data.devEnv.members.map((n: any) => ( Date: Wed, 10 Jun 2026 17:39:26 +0000 Subject: [PATCH 02/12] feat(ai-atlas): rename Reception to Receptionist Co-Authored-By: Claude Opus 4.7 --- public/ai-atlas/data-ru.json | 4 ++-- public/ai-atlas/data.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/ai-atlas/data-ru.json b/public/ai-atlas/data-ru.json index 2d15f42a..a65a7d2b 100644 --- a/public/ai-atlas/data-ru.json +++ b/public/ai-atlas/data-ru.json @@ -39,7 +39,7 @@ "globeR": 1.33, "member": { "id": "reception", - "label": "Ресепшн", + "label": "Ресепшионист", "diamond": "blue", "theta": -45, "status": "ok" @@ -304,7 +304,7 @@ }, "reception": { - "title": "РЕСЕПШН", + "title": "РЕСЕПШИОНИСТ", "cjk": "受付", "desc": "Стойка приёма. Живёт вне всех колец, смотрит в публичный интернет и подчиняется Wolf напрямую — публичные сущности стучатся сюда первыми.", "rows": [ diff --git a/public/ai-atlas/data.json b/public/ai-atlas/data.json index f94d21d1..cb83ca92 100644 --- a/public/ai-atlas/data.json +++ b/public/ai-atlas/data.json @@ -39,7 +39,7 @@ "globeR": 1.33, "member": { "id": "reception", - "label": "Reception", + "label": "Receptionist", "diamond": "blue", "theta": -45, "status": "ok" @@ -304,7 +304,7 @@ }, "reception": { - "title": "RECEPTION", + "title": "RECEPTIONIST", "cjk": "受付", "desc": "The front desk. Lives outside every ring, faces the public internet, and answers to Wolf directly — public entities knock here first.", "rows": [ From af3dec143648f6542151336a65e22aa394035655 Mon Sep 17 00:00:00 2001 From: manager Date: Wed, 10 Jun 2026 17:43:15 +0000 Subject: [PATCH 03/12] feat(ai-atlas): telegram relay on receptionist wire, larger globe and label Co-Authored-By: Claude Opus 4.7 --- public/ai-atlas/data-ru.json | 2 +- public/ai-atlas/data.json | 2 +- src/pages/ai-atlas.tsx | 28 ++++++++++++++++++++++++++-- src/styles/ai-atlas.css | 2 +- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/public/ai-atlas/data-ru.json b/public/ai-atlas/data-ru.json index a65a7d2b..f4d9a6d0 100644 --- a/public/ai-atlas/data-ru.json +++ b/public/ai-atlas/data-ru.json @@ -35,7 +35,7 @@ }, "reception": { - "r": 1.13, + "r": 1.08, "globeR": 1.33, "member": { "id": "reception", diff --git a/public/ai-atlas/data.json b/public/ai-atlas/data.json index cb83ca92..011d5767 100644 --- a/public/ai-atlas/data.json +++ b/public/ai-atlas/data.json @@ -35,7 +35,7 @@ }, "reception": { - "r": 1.13, + "r": 1.08, "globeR": 1.33, "member": { "id": "reception", diff --git a/src/pages/ai-atlas.tsx b/src/pages/ai-atlas.tsx index 8e12f059..1117eb83 100644 --- a/src/pages/ai-atlas.tsx +++ b/src/pages/ai-atlas.tsx @@ -768,7 +768,7 @@ function Spoke({ from, to, kind = 'auth', dim, glow }: any) { /* ---------- public internet globe ---------- */ function GlobeMark({ x, y, label, dim }: any) { - const r = 15; + const r = 21; const lat = r * 0.5; const latW = r * 0.866; return ( @@ -779,7 +779,7 @@ function GlobeMark({ x, y, label, dim }: any) {