fix: correct parameter names for taskmark (taskId) and metadelete (id)

Verified via FW_DEBUG=1: taskmark expects 'taskId' (not 'metaId'),
metadelete expects 'id' (not 'metaId'). Wrong names caused silent
no-ops because the API wraps errors in a00.un.un instead of top-level
un/ex, bypassing the standard error check in fw_client.

Also documents verified response structures in SPEC.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-15 15:17:45 +02:00
parent 5aff3ac9bf
commit 61e0d63931
3 changed files with 45 additions and 22 deletions
+40 -19
View File
@@ -189,7 +189,7 @@ offener Punkte (z.B. `type`-Parameter beim Login, Kreis-Felder in Response).
POST https://api.familywall.com/api/taskcreate2
Content-Type: application/x-www-form-urlencoded
**Body-Parameter (aus API-Pattern abgeleitet, zu verifizieren):**
**Body-Parameter (verifiziert):**
| Parameter | Pflicht | Wert |
|---|---|---|
@@ -197,53 +197,74 @@ Content-Type: application/x-www-form-urlencoded
| `text` | ja | Aufgabentitel |
| `description` | nein | Optionale Beschreibung |
**Response-Struktur (zu verifizieren):**
**Response-Struktur (verifiziert):**
```
a00.r.r.metaId → metaId der neu erstellten Task
a00.r.r → vollständiges Task-Objekt der neu erstellten Task
.metaId → eindeutige Task-ID (z.B. "task/23431854_726362809")
.taskListId → Listen-ID
.text → Titel
.complete → "false" (immer, direkt nach Erstellung)
```
### `taskupdate2` Task aktualisieren
POST https://api.familywall.com/api/taskupdate2
Content-Type: application/x-www-form-urlencoded
**Body-Parameter (aus API-Pattern abgeleitet, zu verifizieren):**
**Body-Parameter (verifiziert):**
| Parameter | Pflicht | Wert |
|---|---|---|
| `metaId` | ja | Task-ID aus `get_tasks` |
| `text` | nein | Neuer Titel (mindestens `text` oder `description` erforderlich) |
| `description` | nein | Neue Beschreibung |
| `taskListId` | unklar | Evtl. erforderlich zu verifizieren |
**Response-Struktur:** kein spezifischer Rückgabewert erwartet (Erfolg = kein `ex`/`un`-Key)
Hinweis: `taskListId` ist **nicht** erforderlich (verifiziert Update ohne `taskListId` funktioniert).
**Response-Struktur:** kein spezifischer Rückgabewert Erfolg = kein `ex`/`un`-Key auf Top-Level.
### `taskmark` Task als erledigt/offen markieren
POST https://api.familywall.com/api/taskmark
Content-Type: application/x-www-form-urlencoded
**Body-Parameter (aus API-Pattern abgeleitet, zu verifizieren):**
**Body-Parameter (verifiziert):**
| Parameter | Pflicht | Wert |
|---|---|---|
| `metaId` | ja | Task-ID aus `get_tasks` |
| `taskId` | ja | Task-ID aus `get_tasks` (**WICHTIG: `taskId`, nicht `metaId`!**) |
| `complete` | ja | `"true"` oder `"false"` (String, nicht Boolean!) |
**Response-Struktur:** kein spezifischer Rückgabewert erwartet (Erfolg = kein `ex`/`un`-Key)
**Achtung:** Der Endpoint heißt intern `taskId`, nicht `metaId`.
Falsche Parameter (`metaId`, `id`, `taskMetaId`) werden serverseitig ignoriert
die API antwortet dann mit einem Fehler in `a00.un.un` (nicht Top-Level!),
der vom Standard-Error-Check im fw_client übersehen wird.
### `metadelete` Objekt löschen (Task)
**Response-Struktur (verifiziert):**
```
a00.r.r → vollständiges Task-Objekt mit aktuellem Stand (inkl. lastAction: "MARK_COMPLETED")
```
### `metadelete` Objekt löschen
POST https://api.familywall.com/api/metadelete
Content-Type: application/x-www-form-urlencoded
**Body-Parameter (aus API-Pattern abgeleitet, zu verifizieren):**
**Body-Parameter (verifiziert):**
| Parameter | Pflicht | Wert |
|---|---|---|
| `metaId` | ja | Task-ID aus `get_tasks` |
| `id` | ja | Task-ID aus `get_tasks` (**WICHTIG: `id`, nicht `metaId`!**) |
Hinweis: `metadelete` ist ein generischer Lösch-Endpoint. Er löscht jedes Objekt
mit der angegebenen `metaId` nicht nur Tasks. Entsprechend vorsichtig verwenden.
Hinweis: `metadelete` ist ein generischer Lösch-Endpoint für beliebige Objekte (Tasks, etc.).
Entsprechend vorsichtig verwenden.
**Response-Struktur:** kein spezifischer Rückgabewert erwartet (Erfolg = kein `ex`/`un`-Key)
**Response-Struktur (verifiziert):**
```
a00.r.r → "true" (String)
```
**Fehlerverhalten:** Bei falschem Parameter-Namen (`metaId`, `taskId` etc.) antwortet die API
mit `{"a00": {"un": {"un": {"message": "missing value in: id"}}}}` auf Top-Level ohne `un`-Key
→ wird vom fw_client fälschlich als Erfolg interpretiert. Daher ist der korrekte Parameter-Name
kritisch.
## Noch zu verifizieren
@@ -255,7 +276,7 @@ mit der angegebenen `metaId` nicht nur Tasks. Entsprechend vorsichtig verwen
- Kreis-Zuordnung in `accgetallfamily`-Response → noch offen
- ~~Ob `partnerScope` / `withStateBean` benötigt werden~~ → nein (verifiziert)
- Session-Lebensdauer (irrelevant da kein Caching)
- `taskcreate2`: genaue Response-Struktur (metaId-Pfad), ob weitere Pflichtfelder existieren
- `taskupdate2`: ob `taskListId` Pflichtfeld ist; Response-Struktur
- `taskmark`: Response-Struktur
- `metadelete`: Response-Struktur, welche Objekt-Typen unterstützt werden
- ~~`taskcreate2`: Response-Struktur~~ → `a00.r.r` = vollständiges Task-Objekt (verifiziert)
- ~~`taskupdate2`: ob `taskListId` Pflichtfeld ist~~ → **nein**, nicht erforderlich (verifiziert)
- ~~`taskmark`: korrekter Parameter-Name~~ → **`taskId`** (nicht `metaId`!) (verifiziert)
- ~~`metadelete`: korrekter Parameter-Name + Response-Struktur~~**`id`**, Response `"true"` (verifiziert)
+1 -1
View File
@@ -1 +1 @@
__version__ = "0.4.0"
__version__ = "0.4.1"
+4 -2
View File
@@ -428,7 +428,7 @@ def toggle_task(task_id: str, complete: bool) -> str:
JSON success indicator or an error message.
"""
params: dict[str, Any] = {
"metaId": task_id,
"taskId": task_id, # verified: taskmark uses 'taskId', not 'metaId'
"complete": "true" if complete else "false",
}
@@ -462,7 +462,9 @@ def delete_task(task_id: str) -> str:
JSON success indicator or an error message.
"""
try:
_authenticated_call("metadelete", {"metaId": task_id})
_authenticated_call(
"metadelete", {"id": task_id}
) # verified: metadelete uses 'id', not 'metaId'
except RuntimeError as exc:
return f"Error: {exc}"