# PURGE-3: Scripts & Services — Resultatrapport **Utförd:** 2026-06-06 **Utförare:** Subagent (PURGE-3) **Backup:** `/opt/amos/_purge3_backup_20260606_222857/` (scripts/ + services/) **Beslut:** Leon = SIMULERING (Erik 2026-06-06) — radera som om aldrig funnits. --- ## DEL A — scripts/ (Direkt raderade) Alla ändringar: backup → ändra → `node --check`. ### A-1: `scripts/heartbeat-runner.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `leon: env.TELEGRAM_LEON_CHAT_ID \|\| ''` ur `tgIds`-map (rad 85) | **Effekt:** Leon tas aldrig emot ett Telegram-meddelande från heartbeat-runner. Inga andra agenter påverkas. Cron-jobbet fortsätter att köra utan fel. --- ### A-2: `scripts/homo-deus-daily-brief.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `buildVincentoBrief()` — hela async-funktionen (ca 35 rader) | | **Raderat** | Vincento ur header-kommentaren (agent-lista) | | **Raderat** | Vincento ur `briefs`-arrayen i `main()` | | **Uppdaterat** | Förväntad brief-count: `5 → 4` (if-guard + logg-text) | **Effekt:** Dagliga briefs genereras nu för 4 agenter (bernt, sven, kjell, rufus). Vincento-brief genereras aldrig. Script kraschar ej — `node --check` OK. --- ### A-3: `scripts/server.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `'leon': 'SOUL_LEON.md'` ur SOUL-file-map i `getSoulForEmail()` | | **Raderat** | Leon-persona-injektion i `getPersonaFromRequest()` (email-contains-leon) | | **Raderat** | `'leon':'cmo','leon@hypbit.com':'cmo','leonrusso':'cmo','operations':'cmo'` ur `/amos/briefing/:role` ALIASES-map | | **Raderat** | `Leon Russo De Cerame` ur `TEAM`-array i `/api/team-activity` | | **Raderat** | `LEON: [...]` hela notification-butiken (3 Leon-specifika notifikationer på italienska) | | **Raderat** | Hela `app.post('/api/chat/ops', ...)` endpointen — Leon Operations chat-router (ca 60 rader) | | **Raderat** | Leon CEO Ops `if`-block inuti den generella chat-routern | | **Raderat** | `Leon Russo De Cerame (CEO Operations)` ur team-lista i system prompt | | **Raderat** | `/cmo/chat` proxy-route (pekade till `/api/chat/ops` som nu är borttagen) — ersatt med tombstone-kommentar | **⚠️ OBS — `buildVincentoBrief` beroenden:** `buildVincentoBrief()` hade inga externa beroenden utanför filen. Den anropade `fetch()` mot `/api/system-health` och filtrerade Gitea issues — inga side-effects. Borttagen utan risk. **⚠️ OBS — `/cmo/chat` proxy:** `/cmo/chat` routade till `/api/chat/ops` som nu är borttagen. Proxyn är ersatt med en PURGE-3 tombstone-kommentar. CMO-funktionalitet finns inte längre i servern. Om en CMO-role behövs framöver: skapa ny endpoint kopplad till bernt-kontexten. --- ### A-4: `scripts/generate-training-data.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `vincento: { name: 'Vincento', system: '...', domains: { crm_pipeline: [...], marketing_analysis: [...] } }` — hela vincento-persona-blocket ur `AGENT_PERSONAS` | | **Uppdaterat** | Träningsfråga rad 22: "Sven, Kjell och Vincento" → "Sven, Kjell och Rufus" | --- ### A-5: `scripts/generate-dpo-vw-homodeus.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Ej ändrat** | 8 rader med `VINCENTO` finns kvar | **Notering:** De 8 kvarvarande referenserna är inbäddade i DPO training-data strängar (constitutional AI-träningsexempel). De refererar till VINCENTO som ett hypotetiskt scenario i policy-texter, inte som operationell agent. Exemplen testar HOMO DEUS-responsen på konstitutionella utmaningar. Dessa är historiska träningsdata-objekt och inte funktionella refs. Flaggat för Eriks beslut: ta bort DPO-exemplen helt, eller behåll som anonymiserade konstitutionella testfall. --- ### A-6: `scripts/hermes-dpo-pipeline.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `vincento\|` ur marketing-klassificeraren regex (rad 132) | --- ### A-7: `scripts/enrich-neo4j.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `{ id: 'person-leon-russo', name: 'Leon Russo De Cerame', score: 78, type: 'person' }` ur `persons`-array | | **Raderat** | `{ userId: 'person-leon-russo', addOnId: 'operations-intelligence', score: 82 }` ur `addOns`-array | | **Raderat** | `{ userId: 'person-leon-russo', email: 'leon@wavult.com', score: 8, tier: 'enterprise' }` ur `churnData`-array | | **Raderat** | `{ personId: 'person-leon-russo', seqId: 'seq-retention-high', step: 1, status: 'active' }` ur `enrollments`-array | --- ### A-8: `scripts/authority-graph.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `'vincento'` ur `ai_agent`-heuristik-arrayen | --- ### A-9: `scripts/cor-retroactive-link.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `{ id: 'EMP-004', name: 'Leon Magnusson', department: 'Operations', email: 'leon@wavult.com' }` ur `EMPLOYEES`-array | **Notering:** "Leon Magnusson" var testdata för Leon Russo De Cerame under annat namn (EMP-004). Inte en annan person — bygginventariet pekade ut `leon@wavult.com` = borttagen. --- ### A-10: `scripts/dashboard-cleanup.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `'/leon'` ur route-listan för cleanup | --- ### A-11: `scripts/competitor-benchmark.mjs` ⚠️ PRE-EXISTING SYNTAX CORRUPTION | Åtgärd | Detalj | |--------|--------| | **Raderat** | `{ id: 'w6', cat: 'Wavult', q: 'Leon Russo är säljchef på Wavult?', kw: ['nej', 'inte'] }` — Leon benchmark-fråga | **⚠️ KRITISK FLAGGA — Pre-existing corruption:** Filen `competitor-benchmark.mjs` var REDAN TRASIG **innan** detta purge-kördes. Backupen (tagen innan ändringarna) är också trasig (`BACKUP FAIL: chr(39)` substitutions). Filen innehåller `chr(39)AMOS-v5-a10gchr(39)` istället för `'AMOS-v5-a10g'` — ett Python `repr()`-artefakt från en tidigare botoperation. **Leon-raden är borttagen** (leon-ändringen genomförd), men filen är inte körbar oberoende av detta purge. `node --check` ger `SyntaxError` på rad 333. **Rekommendation till Erik:** Återställ `competitor-benchmark.mjs` från git eller en äldre backup. Filen behöver manuell reparation av `chr(39)`-substitutionerna. --- ### A-12: `scripts/ci/validate-urls.sh` ✅ (Shell — ej node --check) | Åtgärd | Detalj | |--------|--------| | **Raderat** | `\|leon\|` ur URL-valideringsregex (rad 79) | --- ## DEL B — services/ JS-ändringar ### B-1: `services/kill-switch/src/index.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `'leon@wavult.com'` ur `OPERATORS`-set (kill-switch autentisering) | **Effekt:** Leon kan inte längre aktivera kill-switch. Operatörer är nu: `erik@wavult.com`, `dennis@wavult.com`, `system:emergency`. --- ### B-2: `services/amos-core/server.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `'vincento'` ur `validAgents`-array för `/api/homo-deus/knowledge/:agent` endpoint | | **Uppdaterat** | Kommentar på `venture-builder` mount-rad: `Vincento+Rufus notify` → `Rufus notify` | **Effekt:** `/api/homo-deus/knowledge/vincento` returnerar nu 404. Inga andra agenter påverkas. --- ### B-3: `services/ouroboros-knowledge-graph/server.mjs` ✅ SYNTAX OK | Åtgärd | Detalj | |--------|--------| | **Raderat** | `{ type: 'person', name: 'Leon Russo', properties: { role: 'CEO Operations/CMO', email: 'leon@wavult.com' } }` ur seed-entiteter | | **Raderat** | `{ from: 'Leon Russo', type: 'reports_to', to: 'Erik Svensson' }` ur seed-relationer | | **Raderat** | `{ from: 'Leon Russo', type: 'part_of', to: 'Wavult Operations' }` ur seed-relationer | **Effekt:** Vid nästa DB-initialisering (tom DB) skapas ingen Leon-nod. Befintlig DB påverkas ej — seed körs bara en gång vid tom databas. --- ## DEL B — INVENTERING Rust/SQL (Rör EJ) ### ⚠️ RUST — Kräver recompile + redeploy #### `services/ouroboros-mes/src/scheduler.rs` ```rust // Rad 18 i available_agents(): AgentCapability { id: "vincento-strategy-l2", layer: 2, thermal_score: 0.5, capabilities: vec!["strategic_planning", "market_scan", "competitive_analysis", "scenario_modeling", "strategy_synthesis", "executive_summary"] } ``` #### `services/ouroboros-mes/src/models.rs` ```rust // Rad 136 i GoalTypeSpec-match: "strategic_planning" => GoalTypeSpec { required_layer: 2, assigned_agent: "vincento-strategy-l2", ... } ``` **Varför ej rört:** Rust kräver `cargo build --release` + ny Docker-image + ECS/EKS redeploy. Ändring utan recompile = ingen effekt. Bryter inget som körs (vincento-strategy-l2 är en agent-ID-sträng — om ingen agent svarar, timeout). **Inga aktiva Rust-tjänster skickar tasks till vincento-strategy-l2 live.** **Rekommendation till Erik:** - Byt `vincento-strategy-l2` → `bernt-strategy-l2` (eller `sven-strategy-l2`) - Uppdatera `assigned_agent` i `models.rs` + ta bort capability-entry i `scheduler.rs` - Kör `cargo build --release` + redeploy `ouroboros-mes` --- ### ⚠️ SQL-migrationer — Rör aldrig (historisk migreringskedja) #### `services/ouroboros-recovery/migrations/001_init.sql` ```sql -- Rad 63: seed-data INSERT INTO ou_recovery_agent_status (agent_id, status) VALUES ...('vincento', 'healthy')... ``` #### `services/ouroboros-thermal/migrations/001_init.sql` ```sql -- Rad 66: thermal baseline seed INSERT INTO ou_thermal_baselines (agent_id, baseline_thermal, baseline_entropy, baseline_latency) VALUES ...('vincento', 0.2, 0.1, 110.0)... ``` **Varför ej rört:** SQL-migrations är en historisk kedja. Att ändra `001_init.sql` retroaktivt bryter migration-historiken (checksums, Flyway/Liquibase-validering). Vincento i seed-data skapar en vincento-rad vid ny DB-init — **funktionellt ofarligt** (ingen agent svarar på den raden, den orsakar inga aktiva jobb). **Rekommendation till Erik:** - Skapa en ny migration `002_remove_vincento.sql`: ```sql DELETE FROM ou_recovery_agent_status WHERE agent_id = 'vincento'; DELETE FROM ou_thermal_baselines WHERE agent_id = 'vincento'; ``` - Kör migration mot befintlig + ny DB --- ## Sammanfattning ### Syntax-status | Fil | Status | Notering | |-----|--------|----------| | `scripts/heartbeat-runner.mjs` | ✅ OK | | | `scripts/homo-deus-daily-brief.mjs` | ✅ OK | | | `scripts/server.mjs` | ✅ OK | | | `scripts/generate-training-data.mjs` | ✅ OK | | | `scripts/generate-dpo-vw-homodeus.mjs` | ✅ OK | 8 DPO-text-refs kvar (flaggat) | | `scripts/hermes-dpo-pipeline.mjs` | ✅ OK | | | `scripts/enrich-neo4j.mjs` | ✅ OK | | | `scripts/authority-graph.mjs` | ✅ OK | | | `scripts/cor-retroactive-link.mjs` | ✅ OK | | | `scripts/dashboard-cleanup.mjs` | ✅ OK | | | `scripts/competitor-benchmark.mjs` | ⚠️ PRE-EXISTING | Trasig innan purge — kräver git-återställning | | `scripts/ci/validate-urls.sh` | ✅ OK | Shell — syntaxcheck ej tillämpligt | | `services/kill-switch/src/index.mjs` | ✅ OK | | | `services/amos-core/server.mjs` | ✅ OK | | | `services/ouroboros-knowledge-graph/server.mjs` | ✅ OK | | | `services/ouroboros-mes/src/scheduler.rs` | ⚠️ INVENTERAD | Ej rört — kräver recompile | | `services/ouroboros-mes/src/models.rs` | ⚠️ INVENTERAD | Ej rört — kräver recompile | | `services/ouroboros-recovery/migrations/001_init.sql` | ⚠️ INVENTERAD | Ej rört — SQL-migration-kedja | | `services/ouroboros-thermal/migrations/001_init.sql` | ⚠️ INVENTERAD | Ej rört — SQL-migration-kedja | ### Kritisk verifiering: heartbeat-runner.mjs `heartbeat-runner.mjs` körs dagligen via cron. Verifiering: - `node --check` ✅ OK - `leon` borttagen ur `tgIds` — ingen tom chatId-lookup som kan leda till onödiga API-anrop - `buildVincentoBrief` anropas EJ längre (borttagen i homo-deus-daily-brief.mjs) - Script kraschar INTE ### Restart **Restart EJ utförd** (per instruktion — Bernt koordinerar restart). Berörda services som behöver restart för att effekterna ska slå igenom live: - `scripts/server.mjs` (express-servern) - `services/kill-switch/src/index.mjs` - `services/amos-core/server.mjs` - `services/ouroboros-knowledge-graph/server.mjs` ### Backup-plats Alla originalfiler: `/opt/amos/_purge3_backup_20260606_222857/` --- *Rapport genererad: 2026-06-06. PURGE-3 subagent körning klar.*