bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
251 lines
9.2 KiB
Markdown
251 lines
9.2 KiB
Markdown
# BUILD-D1+D2 — Leon/Vincento Remediering: Staged Ändringsplan
|
|
|
|
**Skapad:** 2026-06-06
|
|
**Av:** Subagent (build-d1d2-staging)
|
|
**Status:** STAGED — GRANSKNING PÅGÅR. Bernt godkänner och kör apply-script.
|
|
**Separation of duties:** Subagent läser + förbereder. Bernt godkänner + kör.
|
|
|
|
---
|
|
|
|
## 🔄 AKTUELL STATUS (Läst 2026-06-06)
|
|
|
|
**VIKTIG OBSERVATION:** Majoriteten av D1+D2-ändringarna har redan applicerats av en tidigare session.
|
|
Nedan redovisas fullständig faktisk status per fil + vad som återstår.
|
|
|
|
---
|
|
|
|
## ✅ REDAN KLART (verifierat i prod)
|
|
|
|
### F1 — `api/dynasty-counsel/knowledge/wavult-facts.mjs`
|
|
Leon-objektet borttaget. CMO-vakant-kommentar finns:
|
|
```js
|
|
// CMO: VACANT (2026-06-06) — Leon Russo De Cerame lämnade 2026-05-19; temporärt Johan (CTO) via cmo@aamos.systems.
|
|
```
|
|
**Status: KLAR. Ingen åtgärd.**
|
|
|
|
### F2 — `api/cognitive/homo-deus-comms.mjs`
|
|
AGENTS-array: vincento borttagen ✅
|
|
NATS-subject: borttagen ✅
|
|
Header-kommentarer (rader 3 och 6): FORTFARANDE med Vincento-refs (harmless kommentarer, rensas i apply-script)
|
|
|
|
### F3 — `api/agents/list.mjs`
|
|
Vincento status=offboarded ✅:
|
|
```js
|
|
{ id:"vincento", name:"Vincento", wave:1, human:null, role:"CMO / Operations", emoji:"🤖", status:"offboarded", offboarded_at:"2026-06-06", note:"Leon lämnade 2026-05-19" }
|
|
```
|
|
**Status: KLAR. Ingen åtgärd.**
|
|
|
|
### F5 — `api/homo-deus/domain-experts.mjs`
|
|
hr-bot parent_agent=bernt ✅
|
|
```js
|
|
parent_agent: 'bernt',
|
|
```
|
|
**Status: KLAR. Ingen åtgärd.**
|
|
|
|
### F6a — `api/aamos/comms/engine.mjs` — TEAM-objektet
|
|
leon@hypbit.com borttagen från TEAM ✅
|
|
#marketing: ['johan@hypbit.com','erik@hypbit.com'] ✅
|
|
#board: utan leon ✅
|
|
|
|
### F7 — `api/approvals.js`
|
|
ops-roll inaktiverad ✅
|
|
leon@wavult.com ur getUserRole ✅
|
|
mock requested_by → bernt@wavult.com ✅
|
|
|
|
### V1 — Mailu cmo→cto mail-routing
|
|
**Status: ✅ INTAKT — INGENTING ATT GÖRA**
|
|
Mailu config-export bekräftar:
|
|
```yaml
|
|
- email: cmo@aamos.systems
|
|
destination:
|
|
- cto@aamos.systems
|
|
```
|
|
Kedjan: `sales/marketing/[domain]@aamos.systems` → `cmo@aamos.systems` → `cto@aamos.systems` (Johan)
|
|
|
|
---
|
|
|
|
## ❌ ÅTERSTÅENDE ÅTGÄRDER (2 stycken)
|
|
|
|
### KRITISK: `api/aamos/comms/engine.mjs` — Rad 384 — AKTIV ROUTING
|
|
|
|
**Fil:** `/opt/amos/api/aamos/comms/engine.mjs`
|
|
**Risk:** HÖG. Aktiv routing-funktion `routeQuestion()` skickar marketing-frågor till `leon@hypbit.com` (raderad adress).
|
|
|
|
**Nuvarande (rad 383-384):**
|
|
```js
|
|
} else if (q.match(/market|campaign|brand|social|seo|content|marknad|marknadsföring/)) {
|
|
to = 'leon@hypbit.com'; reason = 'Marketing question';
|
|
```
|
|
|
|
**Föreslagen ändring:**
|
|
```js
|
|
} else if (q.match(/market|campaign|brand|social|seo|content|marknad|marknadsföring/)) {
|
|
to = 'johan@hypbit.com'; reason = 'Marketing question (CTO Johan — CMO vakant)';
|
|
```
|
|
|
|
**Kontext:** `routeQuestion()` är en exporterad funktion som routar AI-frågor till rätt person. Marketing-frågor routas just nu till en raderad adress. Ändringen till `johan@hypbit.com` är konsistent med övrig routing (Johan tar CMO-rollen temporärt).
|
|
|
|
**Vad som bryts om ändringen är fel:** Om marketing-frågor fortfarande routas till leon@hypbit.com → silent fail (deliveryfel).
|
|
|
|
**Diff:**
|
|
```diff
|
|
- to = 'leon@hypbit.com'; reason = 'Marketing question';
|
|
+ to = 'johan@hypbit.com'; reason = 'Marketing question (CTO Johan — CMO vakant)';
|
|
```
|
|
|
|
---
|
|
|
|
### ÅTGÄRD: `data/agent-heartbeats.json` — leon-daily aktiv
|
|
|
|
**Fil:** `/opt/amos/data/agent-heartbeats.json`
|
|
**Risk:** MEDIUM. Scheduler-fil. `leon-daily-dm-status` är aktivt heartbeat-jobb som skickar Telegram till Leon (som inte längre är anställd). Övriga jobb (winston, johan, dennis, erik) SKA BEVARAS EXAKT.
|
|
|
|
**Nuvarande heartbeats (5 poster):**
|
|
1. `leon-daily-dm-status` (agent: "leon") — **TA BORT**
|
|
2. `winston-monday-bank-sync` — bevara
|
|
3. `johan-ecs-health-4h` — bevara
|
|
4. `dennis-daily-deadlines` — bevara
|
|
5. `erik-monday-weekly-decisions` — bevara *(notera: message_template innehåller `• Leon: [senaste action]` som trivial textreferens — rensa vid tillfälle)*
|
|
|
|
**n8n_workflow_ids nuvarande:**
|
|
```json
|
|
{
|
|
"leon-daily": null,
|
|
"winston-monday": null,
|
|
"johan-4h": null,
|
|
"dennis-daily": null,
|
|
"erik-monday": null
|
|
}
|
|
```
|
|
Ta bort `"leon-daily": null` ur n8n_workflow_ids.
|
|
|
|
**Ändringen görs med Python (ALDRIG sed på JSON):**
|
|
```python
|
|
import json
|
|
FILE = '/opt/amos/data/agent-heartbeats.json'
|
|
with open(FILE) as f:
|
|
d = json.load(f)
|
|
before = len(d['heartbeats'])
|
|
leon = [h['id'] for h in d['heartbeats'] if h.get('agent') == 'leon' or h.get('id','').startswith('leon')]
|
|
print(f"Tar bort: {leon}")
|
|
d['heartbeats'] = [h for h in d['heartbeats'] if h.get('agent') != 'leon' and not h.get('id','').startswith('leon')]
|
|
if 'n8n_workflow_ids' in d:
|
|
d['n8n_workflow_ids'] = {k:v for k,v in d['n8n_workflow_ids'].items() if not k.startswith('leon')}
|
|
after = len(d['heartbeats'])
|
|
print(f"Heartbeats: {before} -> {after} (expect 4)")
|
|
if after == 0: print("ERROR!"); exit(1)
|
|
open(FILE,'w').write(json.dumps(d, indent=2, ensure_ascii=False)+'\n')
|
|
print("OK")
|
|
```
|
|
|
|
**Förväntat resultat efter ändring:**
|
|
```
|
|
heartbeats: ['winston-monday-bank-sync', 'johan-ecs-health-4h', 'dennis-daily-deadlines', 'erik-monday-weekly-decisions']
|
|
```
|
|
|
|
**Vad som bryts om fel:**
|
|
- Om heartbeats-array töms → inga heartbeats körs (allvarligt!)
|
|
- Om övriga poster raderas → kritiska jobb försvinner
|
|
- Backup måste göras INNAN
|
|
|
|
---
|
|
|
|
### KOSMETISK: `api/cognitive/homo-deus-comms.mjs` — Header-kommentarer
|
|
|
|
Rader 3 och 6 i header-kommentaren nämner fortfarande Vincento (ren kommentar-text, ej funktionell):
|
|
|
|
**Rad 3:**
|
|
```
|
|
* NATS JetStream protocol — Agent mesh for Bernt, Rufus, Sven, Kjell, Vincento
|
|
```
|
|
→
|
|
```
|
|
* NATS JetStream protocol — Agent mesh for Bernt, Rufus, Sven, Kjell
|
|
* [2026-06-06] Vincento avvecklad
|
|
```
|
|
|
|
**Rad 6:**
|
|
```
|
|
* homo.bernt.inbox / homo.rufus.inbox / homo.sven.inbox / homo.kjell.inbox / homo.vincento.inbox
|
|
```
|
|
→
|
|
```
|
|
* homo.bernt.inbox / homo.rufus.inbox / homo.sven.inbox / homo.kjell.inbox
|
|
```
|
|
|
|
**Risk:** Noll funktionell påverkan. Ren kodkosmetik. Inkluderas i apply-script.
|
|
|
|
---
|
|
|
|
## 📊 Sammanfattning — Vad som faktiskt ska göras
|
|
|
|
| # | Fil | Ändring | Risk | Status |
|
|
|---|-----|---------|------|--------|
|
|
| A | `aamos/comms/engine.mjs` rad 384 | `leon@hypbit.com` → `johan@hypbit.com` i routeQuestion() | HÖG | ❌ EJ GJORD |
|
|
| B | `data/agent-heartbeats.json` | Ta bort `leon-daily-dm-status` (Python/JSON) | MEDIUM | ❌ EJ GJORD |
|
|
| C | `cognitive/homo-deus-comms.mjs` rader 3+6 | Rensa header-kommentar (kosmetik) | NUL | ❌ EJ GJORD |
|
|
|
|
**Allt annat är redan applicerat.**
|
|
|
|
---
|
|
|
|
## ⚠️ FLAGGOR FÖR BERNT
|
|
|
|
### FLAGG 1 — "Leon Magnusson" = Leon Russo De Cerame (KRÄVER BESLUT)
|
|
`skv-integration-w25.mjs:89` och hela EMP-004-sektionen i ouroboros-filerna använder "Leon Magnusson" — **verifierat som SAMMA PERSON** (leon@wavult.com, EMP-004, Head of Operations).
|
|
|
|
Bevis:
|
|
- `people.mjs:91` — EMP-004: name="Leon Magnusson", email="leon@wavult.com"
|
|
- `payroll.mjs:73` — EMP-004: name="Leon Magnusson", email="leon@wavult.com", status="active"
|
|
- `payroll-routes-agd.mjs:51` — EMP-004: name="Leon Magnusson", pnr="199005103456"
|
|
|
|
**Fråga till Bernt:** Bekräfta att Leon Magnusson = Leon Russo De Cerame → payroll/HR-avslut av EMP-004 ska schemaläggas (separat D3-fas).
|
|
|
|
### FLAGG 2 — EMP-004 fortfarande active i payroll-system
|
|
`people.mjs`, `payroll.mjs`, `skv-payroll-sweden.mjs` — alla har EMP-004 som `status: 'active'`. Detta är utanför D1+D2-scope men kritiskt för HR/payroll-korrekthet.
|
|
|
|
### FLAGG 3 — erik-monday heartbeat nämner Leon i text
|
|
I `agent-heartbeats.json`, `erik-monday-weekly-decisions`-posten innehåller:
|
|
```
|
|
• Leon: [senaste action]
|
|
```
|
|
Funktionellt ofarlig (bara displaytext). Bernt kan rensa vid tillfälle.
|
|
|
|
### FLAGG 4 — heartbeat-runner.mjs buildVincentoBrief()
|
|
`scripts/heartbeat-runner.mjs` anropar fortfarande `buildVincentoBrief()` dagligen. Utanför D1+D2-scope men aktivt. Separat åtgärd.
|
|
|
|
---
|
|
|
|
## 🟢 CANON-TILLÄGG (för Bernt att lägga in manuellt i AAMOS_CANON.md)
|
|
|
|
Lägg till i `/opt/amos/data/AAMOS_CANON.md`:
|
|
|
|
```markdown
|
|
## Agent Vincento — Avvecklad (2026-06-06)
|
|
|
|
Agent Vincento (AI-agent tilldelad Leon Russo De Cerame) är AVVECKLAD per 2026-06-06.
|
|
Leon Russo De Cerame lämnade bolaget 2026-05-19.
|
|
Vincento-agenten är inte längre aktiv i HOMO DEUS-meshet.
|
|
Historiska data och träningsfiler arkiveras men raderas inte.
|
|
|
|
## CMO-rollen — VAKANT (2026-06-06)
|
|
|
|
CMO-rollen är vakant sedan Leon Russo De Cerames avslutade anställning (2026-05-19).
|
|
Tills vidare hanteras inkommande CMO-mail (cmo@aamos.systems) av Johan Berglund (CTO).
|
|
Ny CMO-rekrytering: EJ beslutad per 2026-06-06.
|
|
AI-stöd för marketing-domänen: Ompekas till CTO (Johan/Sven) tills vidare.
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 VERIFIERAT: skv-integration-w25.mjs:89 — INTE ANNAN PERSON
|
|
|
|
D3-inventering flaggade "Leon Magnusson" som potentiellt annan person.
|
|
**Slutsats efter undersökning:** Det är SAMMA person (Leon Russo De Cerame).
|
|
**Skv-integration-w25.mjs rad 89** är F-skatt-register (simulerad/testdata) med personnummer `199005103456`.
|
|
**Åtgärd:** Inkluderas INTE i D1+D2-scope. Kräver separat Bernt-beslut för payroll-avslut.
|
|
|
|
---
|
|
|
|
*Rapport uppdaterad 2026-06-06 med faktisk prod-status. Apply-script är minimalt — hanterar bara de 3 återstående åtgärderna (A, B, C).*
|