Skip to content

P2: CRM-Loeschungen sichtbar machen — Espo-Audit-Zeile im Gate-Batch #79

Description

@munirad7s

Mission

Jedes delete im CRM wird sichtbar: der Gate-Batch (#10) bekommt eine Zeile aus Espos Audit-Spur, sobald ein Datensatz verschwindet.

Money-Link

Nach buzz#29, #52 und #53 kann kein API-User mehr fremde CRM-Datensätze löschen — aber „kann nicht" ist eine Annahme, solange niemand hinsieht. Espo löscht soft: ein gelöschter Lead ist für jeden normalen Lesepfad 404, der Grabstein bleibt mit deleted: true liegen. Genau deshalb kann eine stille Löschwelle heute unbemerkt laufen: KPI-Zahlen sinken, Brief-Vorrat sinkt, niemand sieht die Ursache. Eine Zeile pro Tag schließt die Lücke zwischen „gehärtet" und „bewiesen sauber".

Kontext

  • Der Gate-Batch läuft täglich 20:45 (.empire/tools/ritual.sh, buzz#10) und liefert Munir eine vorgekaute Lage — der natürliche Ort für eine Löschzeile. P2: Führungsrituale auf echte Daten — Morgenbrief 08:45 + Gate-Batch 20:45 #10 gehört einem anderen Agenten; erst prüfen, ob es geschlossen ist.
  • Espo-Rechtestand: buzz-agent löscht nichts, claude-mcp-admin löscht nichts (buzz#52), n8n-agent löscht nur ihm zugewiesene Lead/CTouchpoint (buzz#53). Ein Löschvorgang außerhalb des Funnel-Probes ist damit erklärungsbedürftig.
  • Quellen für die Messung (nicht geraten, in buzz#52 gefunden): ActionHistoryRecord (Espo, aber read: own für Nicht-Admins), der Grabstein deleted: true in der Datenbank, und das Access-Log des Containers (docker logs agency-crm-espocrm) mit Methode + User-Agent — dort steht jedes DELETE /api/v1/<Entity>/<id> mit Zeitstempel.
  • Der ACL-Wächter ([BUZZ-28] espo-acl-drift, n8n) ist das Muster: n8n misst, der Report geht in einen Kanal, Alarm nur bei Abweichung. Doktrin 3 — wiederkehrende Mechanik gehört nach n8n, nicht in den Fork.

Vorflug-Check (nach Claim, vor Arbeit)

  1. P2: Führungsrituale auf echte Daten — Morgenbrief 08:45 + Gate-Batch 20:45 #10 geschlossen? Sonst dieses Ticket zurück auf ready und später wiederkommen — der Gate-Batch wird sonst zeitgleich von zwei Seiten editiert.
  2. Kein anderer Agent auf n8n oder Espo.
  3. Entscheiden und begründen, welche Quelle die Wahrheit ist: Access-Log (vollständig, aber ohne Record-Identität) vs. deleted: true (identitätsgenau, aber ohne Urheber-Zeitstempel) vs. ActionHistoryRecord (beides, aber Admin-Rechte nötig — und Admin-Rechte sind genau das, was diese Ticket-Reihe abgebaut hat).

Auftrag

  1. Eine Messung bauen, die pro Tag beantwortet: wie viele Datensätze wurden gelöscht, von wem, welche Entity — ohne dafür einen neuen Admin-Key zu schaffen.
  2. Ergebnis in den Gate-Batch einhängen: eine Zeile bei 0 Löschungen, eine benannte Liste sonst.
  3. Schwelle definieren: der Funnel-Probe löscht täglich genau ein Lead + dessen Touchpoints. Alles darüber ist erklärungsbedürftig und gehört hervorgehoben, nicht nur gezählt.

Nicht-Ziele / Guardrails

Verifikation (Befehle + erwartete Ausgabe)

# Aktion Erwartung
1 Testlöschung (ein eigener Wegwerf-Lead, admin) erscheint in der Messung
2 Tag ohne Löschung außer dem Probe Zeile meldet „1 (Funnel-Probe), sonst 0"
3 Gate-Batch-Lauf Zeile ist im Kanal sichtbar
4 Kein neuer privilegierter Zugang entstanden ACL-Wächter grün, 3/3 User unverändert

Definition of Done

  • Quelle gewählt und begründet
  • Messung läuft täglich, ohne neue Rechte
  • Gate-Batch zeigt die Zeile, Testlöschung nachweislich sichtbar
  • .empire/AGENTS.md ergänzt (via PR), Issue geschlossen

Rechte

Chrome-MCP, Windows-MCP, Playwright, n8n-MCP, ~/.secrets/** — ohne Rückfrage. Blocker → blocker-mail.sh + Label blocked-munir + weiter.

Format v2 · buzz_empire 2026-08-01 (Gardener aus buzz#53)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Mittlere Prioin-progressAgent arbeitet daranphase-2Act: Autonomie + Gates

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions