fix: surface a00.un API errors + document dueDate-clearing limitation (v0.4.15)
- fw_client: detect nested a00.un errors (previously silent-failed as success) - update_task: add clear_due_date=True parameter that returns a clear error explaining the Family Wall API cannot clear dueDate once set - SPEC.md: document all tested clearing candidates and their API responses, add Fehlerstruktur-Varianten section - Verified: dueDate cannot be removed via any form-encoded value; all invalid date strings are rejected via a00.un.un (silently swallowed before this fix) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -245,6 +245,24 @@ Content-Type: application/x-www-form-urlencoded
|
||||
**Response-Struktur:** zu verifizieren beim ersten echten Call
|
||||
(Endpoint noch nicht implementiert — für spätere Versionen)
|
||||
|
||||
## Fehlerstruktur-Varianten
|
||||
|
||||
Die Family Wall API gibt Fehler in zwei verschiedenen Strukturen zurück:
|
||||
|
||||
| Struktur | Beispiel | Erkennungsregel |
|
||||
|---|---|---|
|
||||
| Top-Level `ex` | `{"ex": {"ex": {...}}}` | `"ex" in body` |
|
||||
| Top-Level `un` | `{"un": {"un": {...}}}` | `"un" in body` |
|
||||
| Verschachtelt `a00.un` | `{"a00": {"un": {"un": {...}}}}` | `"un" in body["a00"]` |
|
||||
|
||||
Ab v0.4.15 erkennt `fw_client.py` alle drei Varianten und wirft `FamilyWallError`.
|
||||
Zuvor wurden `a00.un`-Fehler still ignoriert (silent fail), was zu irreführenden
|
||||
`{"updated": True}`-Antworten bei fehlgeschlagenen Updates führte.
|
||||
|
||||
**Bekannte Endpoints mit `a00.un`-Fehlern:**
|
||||
- `taskupdate2` mit ungültigem `dueDate`-Wert
|
||||
- `taskcategorydelete` mit falschem Parameter-Namen (obsolet nach v0.4.x-Fix)
|
||||
|
||||
## Debug-Logging
|
||||
|
||||
Wenn die Umgebungsvariable `FW_DEBUG=1` gesetzt ist, loggt `fw_client.py`
|
||||
@@ -297,6 +315,29 @@ Hinweis: `taskListId` ist optional – ohne diesen Parameter bleibt der Task in
|
||||
|
||||
**Response-Struktur:** kein spezifischer Rückgabewert – Erfolg = kein `ex`/`un`-Key auf Top-Level.
|
||||
|
||||
**dueDate Clearing – nicht implementierbar (Stand: April 2026):**
|
||||
|
||||
Ausgiebig getestete Werte für `dueDate`, die alle fehlschlugen:
|
||||
|
||||
| Wert | API-Response |
|
||||
|---|---|
|
||||
| `""` (leerer String) | `a00.un.un: " is not a valid Date"` |
|
||||
| `"null"` | `a00.un.un: "Cannot parse date val=null"` |
|
||||
| `"0"` | API-Fehler (ungültiges Datum) |
|
||||
| `"-1"` | `a00.un.un: "-1 is not a valid Date"` |
|
||||
| `"remove"` / `"clear"` | `a00.un.un: "Cannot parse date val=..."` |
|
||||
| `"0000-00-00T00:00:00"` | API-Fehler |
|
||||
| `"1970-01-01T00:00:00"` | **Erfolgreich** – setzt dueDate auf Unix-Epoch (kein echtes Clearing!) |
|
||||
| Separate Parameter (`removeDueDate`, `clearDueDate`, `clearFields`) | werden ignoriert, dueDate bleibt unverändert |
|
||||
| Feld weglassen (kein `dueDate` in Request) | dueDate bleibt unverändert |
|
||||
|
||||
**Wichtig:** Die Fehler werden als `a00.un.un` zurückgegeben (nicht Top-Level `un`).
|
||||
Der `fw_client` prüfte ursprünglich nur Top-Level `un` → silent fail (ab v0.4.15 behoben:
|
||||
`a00.un` wird ebenfalls erkannt und als `FamilyWallError` geworfen).
|
||||
|
||||
Das `dueDate`-Feld kann einmal gesetzt nicht mehr entfernt werden.
|
||||
`update_task(clear_due_date=True)` gibt eine klare Fehlermeldung zurück.
|
||||
|
||||
### `taskmark` – Task als erledigt/offen markieren
|
||||
POST https://api.familywall.com/api/taskmark
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
@@ -501,4 +542,5 @@ AND `moodStarShortcut: false` AND `moodMap: {}`.
|
||||
- ~~`taskcreate2` / `taskupdate2`: Fälligkeitsdatum-Parameter~~ → **`dueDate`**, ISO 8601 String, gespeichert als `dueDate` im Task-Objekt (verifiziert)
|
||||
- ~~`taskcreate2` / `taskupdate2`: Zuweisung-Parameter~~ → **`assignee`** (Member-ID String; mehrere Werte = mehrfach senden); gespeichert als `assigneeIds[]` (verifiziert)
|
||||
- ~~`taskupdate2`: Task verschieben~~ → **`taskListId`** als optionaler Parameter setzt neue Liste (verifiziert)
|
||||
- `taskupdate2`: Alle Zuweisungen entfernen (leere `assignee`-Liste) → noch nicht verifiziert
|
||||
- `taskupdate2`: Alle Zuweisungen entfernen (leere `assignee`-Liste) → noch nicht verifiziert
|
||||
- ~~`taskupdate2`: `dueDate` entfernen (Clearing)~~ → **nicht möglich** (verifiziert, April 2026) — alle getesteten Werte werden als ungültiges Datum abgelehnt (siehe unten)
|
||||
Reference in New Issue
Block a user