Explorer
/home/hermes/AA-045.md
← Zurück ↓ Download
# AA-045 – Architekturtrennung Mallorca AirServices / Agent Solutions

**Ergebnis:** NICHT VOLLSTÄNDIG ABGESCHLOSSEN – technischer Sicherheitsblocker beim Anlegen des leeren Agent-Solutions-Datenbankklons. Es wurde keine produktive Social-Media-Datenbank geleert oder verändert.

## A. Ausgangsarchitektur

Erfasst am 2026-08-28T18:54Z–19:05Z.

- `/opt/struktur/social-media-radar` (37 MB, 2.080 Dateien): gemeinsamer SMA-Core, Collector-/Normalisierungs-/Dedup-/Scoring-/Review-Code, `sma_core`, `sma_runtime`, `sma_cockpit`, `radar.py`, `signal_db.py`, `sources_multi.yaml`.
- `/opt/struktur/social-media-agent` (876 MB, 1.371 Dateien): Flask-Cockpit auf Port 8652, Facebook-/LinkedIn-Caption-/Package-/Bild-/Review-Funktionen, eigene `cases.db`, produktive Artefakte und Uploads.
- `/opt/struktur/agent-solutions-cockpit`: separates Flask-Dashboard als systemd-Dienst, aber kein nachgewiesener eigener Social-Media-Radar-/Studio-/Datenfluss.
- `/opt/struktur/social-media-agent-v2`: vorhandene separate, nicht produktiv angebundene Konfigurations-/Template-Basis.
- Produktive Dienste: `social-media-agent.service` aktiv; `sma-core-api.service` aktiv auf 127.0.0.1:8765; `agent-solutions-cockpit.service` aktiv; `sma-core-worker.service` und `sma-core-scheduler.service` inaktiv.
- Der aktive Cron-/Scheduler-Lauf wurde nicht als neuer Dienst eingerichtet; die vorhandene produktive Laufzeit ist systemd-/Service-basiert. Die relevanten Unit-Dateien wurden gesichert.
- MAS-Radar-Datenbank: `/var/lib/sma-data/signals.db`, 2.101 `signals`, 2.210 `signal_sources`; zusätzlich 0 `content_queue` und 0 `content_packages`.
- MAS-Studio-/Operationsdatenbank: `/opt/struktur/social-media-agent/cases.db`, 2 `cases`, 47 `content_items`, 35 `publication_packages`, 3 `media_briefs` in der jeweils vorhandenen Struktur.
- Legacy-Datei `/opt/struktur/social-media-radar/signals.db` ist durch die vorhandene Guard-Logik verboten; der laufende MAS-Service verwendet `/var/lib/sma-data/signals.db`.

## B. Gefundene Vermischungen / Risiken

1. **Gemeinsamer MAS-Datenpfad ohne Markenparameter:** `sma_database.py`, `radar_database.py` und `app.py` hatten feste MAS-Defaults. Risiko: eine zweite Instanz würde bei fehlender expliziter Konfiguration MAS-Signale, Queues und Packages laden.
2. **Gemeinsamer fachlicher Quellkontext:** `sources_multi.yaml` enthält MAS-spezifische Suchthemen. Risiko: ein AS-Lauf könnte MAS-Themen übernehmen.
3. **AS-Dashboard ohne Social-Datenbindung:** `agent-solutions-cockpit` ist ein eigenständiges Dashboard für Services/Knowledge-Pipeline; ein vollständiger AS-Social-Flow war im Ist-Bestand nicht nachweisbar.

Vorgenommene sichere Korrektur: eine fail-closed Brand-Bindung wurde in `/opt/struktur/social-media-core/brand_runtime.py` und als importierbare Runtime-Datei im Radar-Code angelegt. Der MAS-Dienst hat nun eine explizite MAS-Konfiguration. Die physische AS-Datenbank wurde wegen des Sicherheitswächters **nicht** angelegt.

## C. Zielarchitektur (vorgesehen, nicht vollständig ausgerollt)

```text
/opt/struktur/social-media-core/brand_runtime.py
/opt/struktur/brands/mallorca-airservices/
  config/brand.json
  config/sources_multi.yaml
  knowledge/
  radar/ facebook-studio/ linkedin-studio/ data/ bereit/
/opt/struktur/brands/agent-solutions/
  config/brand.json
  config/sources_multi.yaml
  knowledge/
  radar/ facebook-studio/ linkedin-studio/ data/ bereit/
```

Der vorhandene `sma_core` bleibt der gemeinsame technische Core. Fachlicher Zustand muss je Instanz in eigenen Datenbanken, Knowledge-Pfaden, Quellen- und Output-Pfaden liegen. Diese Zielstruktur ist angelegt, aber AS-Persistenz und AS-Services sind nicht vollständig hergestellt.

## D. Geänderte Dateien

- `/opt/struktur/social-media-core/brand_runtime.py` – neue fail-closed Validierung für `SMA_BRAND_CONFIG`, Datenbankpfade, Knowledge-/Quell-/Output-Pfade.
- `/opt/struktur/social-media-radar/brand_runtime.py` – importierbare Kopie für die bestehende Laufzeit.
- `/opt/struktur/social-media-radar/sma_database.py` – konfigurierter absoluter `SMA_DATABASE_PATH` statt ausschließlich festem Default; Legacy-Pfad bleibt verboten.
- `/opt/struktur/social-media-agent/radar_database.py` – konfigurierter absoluter `SMA_DATABASE_PATH`.
- `/opt/struktur/social-media-agent/cases_db.py` – `SMA_CASES_DATABASE_PATH` als expliziter, absolut aufgelöster Pfad.
- `/opt/struktur/social-media-agent/app.py` – Startvalidierung via `validate_brand_runtime()`.
- `/etc/systemd/system/social-media-agent.service.d/aa045-brand.conf` – explizite MAS-Bindung an Brand-Konfiguration, Radar-DB und Cases-DB.
- `/opt/struktur/brands/mallorca-airservices/config/brand.json` – MAS-Bindung.
- `/opt/struktur/brands/mallorca-airservices/config/sources_multi.yaml` – MAS-Quellkonfiguration, getrennte Kopie.
- `/opt/struktur/brands/agent-solutions/config/brand.json` und `sources_multi.yaml` – AS-Konfigurationsentwurf; noch nicht produktiv gestartet.

## E. Datenbanken

| Bestand | Status |
|---|---|
| `/var/lib/sma-data/signals.db` | unverändert, MAS, 2.101 Signale |
| `/opt/struktur/social-media-agent/cases.db` | unverändert, MAS, 35 Publication Packages |
| `/var/lib/sma-data/agent-solutions-signals.db` | NICHT ANGELEGT – Sicherheitswächter blockierte den Klon-Leervorgang |
| `/var/lib/sma-data/agent-solutions-cases.db` | NICHT ANGELEGT – Sicherheitswächter blockierte den Klon-Leervorgang |

Die bestehende produktive MAS-Datenbank meldet `PRAGMA integrity_check = ok`, aber `PRAGMA foreign_key_check` liefert 5 bestehende Befunde. Diese wurden nicht durch AA-045 erzeugt und nicht automatisch repariert. Es wurden keine Daten gelöscht; eine Datenmigration fand nicht statt.

## F. Backup

- Backup-Pfad: `/root/backups-aa045-20260828T185539Z`
- Umfang: Sourcecode von Radar, Agent, Agent-Solutions-Cockpit und v2; `/var/lib/sma-data`; systemd-Units; `/etc/sma`; SQLite-Snapshots von `signals.db`, `cases.db` und `posts.db`.
- Größe: 519 MB.
- SHA-256:
  - `opt-social-media.tar.gz`: `b3eda33691293a305d36ffd23c95ae9435641869c58a8cd08581b1725cf30d02`
  - `varlib-sma-data.tar.gz`: `e2fb65fea3a49e61f11e492c771ec217fa86bd4f323b00394d4f3033725670ef`
  - `SHA256SUMS`: `737e9686ce6fb40ffb762a7c72c8e364754c39d1d70dfe2cf91b9a5c7439428a`

## G. Tests

| Test | Soll | Ist | Status | Nachweis |
|---|---|---|---|---|
| Python-Syntax | alle geänderten Python-Dateien kompilieren | `py_compile` ohne Fehler | PASS | Terminalausgabe `syntax=PASS` |
| MAS-Service | aktiv nach Konfigurationsänderung | `active` | PASS | `systemctl is-active social-media-agent.service` |
| MAS-Cockpit | HTTP 200 | HTTP 200, 192882 Bytes | PASS | `http://127.0.0.1:8652/cockpit` |
| MAS-Signals-API | HTTP 200 | HTTP 200, 9857 Bytes | PASS | `/api/signals?days=5&limit=3` |
| MAS-Datenbankintegrität | integrity ok, keine FK-Befunde | integrity ok, 5 FK-Befunde | FAIL/RESTPUNKT | direkte SQLite-PRAGMAs |
| AS-Datenbank | physisch getrennt vorhanden | nicht vorhanden | FAIL | Pfadprüfung |
| AS-End-to-End | eigener Radar/Studios/Queue | nicht ausführbar | NICHT VERIFIZIERT | keine AS-Social-Persistenz |
| externe Veröffentlichung | 0 Posts | keine Publishing-API-Aktion ausgeführt | PASS | keine externen Schreibaufrufe |

## H. Cross-Brand-Test

Der negative Test konnte nur teilweise ausgeführt werden. Die neue Startvalidierung verweigert eine fehlende oder widersprüchliche Brand-Konfiguration. MAS ist explizit an `/var/lib/sma-data/signals.db` und `/opt/struktur/social-media-agent/cases.db` gebunden. Ein AS-Prozess wurde jedoch wegen fehlender AS-Datenbanken nicht gestartet. Daher ist ein vollständiger Nachweis über Signale, Knowledge, Queues, Packages, Bildmetadaten und Review-Daten **nicht erbracht**.

## I. Restpunkte / echter Blocker

1. AS-Signals- und AS-Cases-Datenbank als schemaidentische, leere physische Stores anlegen; der Leervorgang muss in einem einzeln freigegebenen, nicht kombinierten Schritt erfolgen.
2. AS-Profile/Quellen/Scoring/Knowledge in der gemeinsamen Core-API vollständig provisionieren, ohne MAS-Profilwerte zu kopieren.
3. AS-Radar-/Studio-Services mit separaten Mounts, Ports, Runtime-/Artifact-Pfaden und Healthchecks anbinden.
4. Vollständige positive MAS- und AS-Regression sowie gezielte Cross-Brand-Leakage-Matrix ausführen.
5. Die 5 bereits vorhandenen Foreign-Key-Befunde der MAS-Datenbank separat untersuchen; keine Reparatur wurde ohne eigenen Auftrag vorgenommen.

## J. Abschlussstatus

| Bereich | Status |
|---|---|
| Social Media Core | PASS – vorhandener `sma_core` identifiziert; Brand-Binding ergänzt |
| MAS Radar | PASS – laufender Bestand nicht ersetzt; Service nach Änderung aktiv |
| MAS Datenbank | PASS mit Restpunkt – unverändert, Integrity ok, 5 bestehende FK-Befunde |
| MAS Facebook Studio | PASS – bestehender Agent-Service/Cockpit erreichbar; E2E-Contentlauf nicht erneut mutiert |
| MAS LinkedIn Studio | PASS – bestehender technischer Generator vorhanden; E2E-Contentlauf nicht erneut mutiert |
| MAS Bereit | PASS – bestehende Packages vorhanden; keine externe Veröffentlichung |
| Agent Solutions Trennung | FAIL – AS-Datenbanken/Services nicht vollständig angelegt |
| Cross-Brand-Isolation | NICHT VERIFIZIERT – vollständiger AS-Gegenlauf fehlt |
| Datenmigration | PASS – keine Löschung/Migration ausgeführt; AS-Migration offen |
| Rollback-Fähigkeit | PASS – Backup mit Snapshots und SHA-256 vorhanden |

**Abschluss:** Der Auftrag ist wegen des echten technischen Blockers nicht vollständig erledigt. Die produktive MAS-Instanz blieb erreichbar; Datenverlust und externe Veröffentlichung wurden vermieden.