fix(tasks): send recurrency/reminder as flat top-level params (v1.1.1)

FiZ Ai() encoder does not support nested objects — recurrencyDescriptor
and reminder fields must be top-level params (recurrency=WEEKLY, not
recurrencyDescriptor={recurrency:WEEKLY}). Same fix for reminder fields.
SPEC.md and CLAUDE.md updated to document the flat encoding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-17 21:18:58 +02:00
parent f5eb0a46c8
commit 08ee5fb84a
5 changed files with 45 additions and 49 deletions
+14 -26
View File
@@ -201,35 +201,23 @@ POST https://api.familywall.com/api/taskupdate2
| `dueDate` | nein | ISO 8601 oder `$empty` zum Löschen |
| `assignee` | nein | Member-accountId (mehrfach sendbar), `""` zum Entfernen aller |
| `taskListId` | nein | neue Listen-metaId (verschiebt Task) |
| `recurrencyDescriptor` | nein | Objekt mit Wiederholungs-Feldern (siehe unten) |
| `reminder` | nein | Objekt mit Erinnerungs-Feldern (siehe unten) |
| `recurrency` | nein | `"DAILY"` \| `"WEEKLY"` \| `"MONTHLY"` \| `"YEARLY"` \| `"NONE"` (entfernen) |
| `recurrencyInterval` | nein | int (z.B. `2` für "alle 2 Wochen") |
| `rrule` | nein | vollständige iCal-RRULE (z.B. `"FREQ=WEEKLY;INTERVAL=2;BYDAY=FR"`) |
| `byDay` | nein | z.B. `"FR"`, `"1SA"`, `"MO,TU,WE,TH,FR"` |
| `byMonthDay` | nein | int (z.B. `7` für "am 7. des Monats") |
| `recurrencyEndDate` | nein | ISO-Datum (z.B. `"2026-12-31"`) |
| `endOccurence` | nein | int (nach N Wiederholungen aufhören) |
| `reminderUnit` | nein | `"MINUTE"` \| `"HOUR"` \| `"DAY"` (löschen: `""`) |
| `reminderValue` | nein | int (`0` = zum Zeitpunkt, `15` = 15 min vorher); löschen: `0` |
| `reminderType` | nein | immer `"SNOOZE"` |
| `localId` | nein | immer `0` |
**Hinweis:** `taskListId` ist NICHT Pflicht beim Update.
**`recurrencyDescriptor`-Felder** (verifiziert via JS-Bundle xb-Encoder):
| Feld | Wert |
|---|---|
| `recurrency` | `"DAILY"` \| `"WEEKLY"` \| `"MONTHLY"` \| `"YEARLY"` \| `"NONE"` |
| `recurrencyInterval` | int (z.B. `2` für "alle 2 Wochen") |
| `rrule` | vollständige iCal-RRULE (z.B. `"FREQ=WEEKLY;INTERVAL=2;BYDAY=FR"`) |
| `byDay` | z.B. `"FR"`, `"1SA"`, `"MO,TU,WE,TH,FR"` |
| `byMonthDay` | int (z.B. `7` für "am 7. des Monats") |
| `recurrencyEndDate` | ISO-Datum (z.B. `"2026-12-31"`) |
| `endOccurence` | int (nach N Wiederholungen aufhören) |
Wiederholung entfernen: `recurrencyDescriptor = {"recurrency": "NONE"}`
**`reminder`-Felder** (verifiziert via JS-Bundle fc-Encoder):
| Feld | Wert |
|---|---|
| `reminderUnit` | `"MINUTE"` \| `"HOUR"` \| `"DAY"` |
| `reminderValue` | int (`0` = zum Zeitpunkt, `15` = 15 min vorher, `1` = 1 Einheit vorher) |
| `reminderType` | immer `"SNOOZE"` |
| `localId` | immer `0` |
Erinnerung entfernen: `reminder = {"reminderUnit": "", "reminderValue": 0, "reminderType": "SNOOZE", "localId": 0}`
**⚠️ Encoding:** Der FiZ-`Ai()`-Encoder serialisiert alle Felder **flach** als Top-Level-Form-Parameter.
`recurrencyDescriptor` und `reminder` sind **keine** verschachtelten JSON-Objekte — die Felder
werden direkt auf Top-Level gesendet (verifiziert via xb-Encoder / fc-Encoder im JS-Bundle).
**Response:**
```