From 7d1bfda490d1e2d34ec72524c5fc12cf37f8bfcb Mon Sep 17 00:00:00 2001 From: OpenClaw Date: Fri, 6 Mar 2026 23:57:45 +0000 Subject: [PATCH] fix(#21): Add ADR for deal status machine with state transitions and guard conditions --- docs/adr/001-deal-status-machine.md | 45 +++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/adr/001-deal-status-machine.md diff --git a/docs/adr/001-deal-status-machine.md b/docs/adr/001-deal-status-machine.md new file mode 100644 index 0000000..c5e700c --- /dev/null +++ b/docs/adr/001-deal-status-machine.md @@ -0,0 +1,45 @@ +# 1. Deal Status Machine + +## Status + +- **Status:** Proposed +- **Date:** 2026-03-06 +- **Author:** openclaw + +## Problem + +Die Geschäftslogik für Anfrage->Angebot->Verhandlung->Deal ist komplex; ohne dokumentierte Zustandsregeln entstehen Inkonsistenzen. + +## Lösung + +Wir führen eine Statusmaschine ein, die alle erlaubten Übergänge und Guard Conditions definiert. Die Maschine umfasst folgende Zustände: + +- `REQUESTED` +- `OFFERED` +- `NEGOTIATING` +- `ACCEPTED` +- `REJECTED` +- `EXPIRED` + +## Zustandsübergänge + +| Von | Nach | Guard Condition | +|-----|------|-----------------| +| REQUESTED | OFFERED | Angebot muss von einem Benutzer erstellt werden | +| OFFERED | NEGOTIATING | Verhandlung muss vom Empfänger gestartet werden | +| NEGOTIATING | ACCEPTED | Akzeptanz durch den Empfänger | +| NEGOTIATING | REJECTED | Ablehnung durch den Empfänger | +| NEGOTIATING | EXPIRED | Ablauf der Verhandlungszeit | +| OFFERED | REJECTED | Ablehnung durch den Empfänger | +| OFFERED | EXPIRED | Ablauf der Angebotszeit | +| REQUESTED | REJECTED | Ablehnung durch den Empfänger | +| ACCEPTED | EXPIRED | Ablauf der Deal-Zeit | + +## Fehlerszenarien + +- **Race Conditions:** Mehrere Benutzer versuchen gleichzeitig einen Status zu ändern. Lösung: Transaktionen mit Versionierung. +- **Doppelte Annahmen:** Ein Benutzer akzeptiert ein Angebot, während ein anderer es bereits abgelehnt hat. Lösung: Zustandsprüfungen vor jeder Änderung. + +## Referenz + +- Backend Validierungen und Tests werden direkt aus dieser ADR abgeleitet. \ No newline at end of file