feat: category assignment in create_task / update_task (v0.4.10)
Verified via FW_DEBUG=1 + systematic param-name probing that the correct parameter is `taskCategoryId` with value = full metaId from get_categories (e.g. taskCategory/23431854_200). Numeric systemCategoryId alone causes API error; full metaId is accepted and stored. Changes: - create_task: add optional category_id parameter → sent as taskCategoryId - update_task: add optional category_id parameter → sent as taskCategoryId; guard now accepts category_id-only updates - get_tasks: expose category_id field in returned task objects - get_categories: update docstring (param name now known) - SPEC.md: document verified taskCategoryId param + clarify categories[] vs taskCategoryId field distinction - scripts/find_category_param.py: discovery script used to find param name Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -158,19 +158,34 @@ a02.r.r.updatedCreated[] → tasksync (Tasks)
|
||||
.description → optionale Beschreibung
|
||||
.taskListId → Zugehörigkeit zur Liste
|
||||
.complete → "true" / "false" (String, nicht Boolean!)
|
||||
.categories[] → zugewiesene Kategorien des Tasks
|
||||
.system → "true" wenn System-Kategorie, "false" wenn custom
|
||||
.name → Kategoriename (z.B. "SYS-CAT-TODOS", "Beverages")
|
||||
.categories[] → Listen-Level-Systemkategorie (z.B. SYS-CAT-SHOPPINGLIST);
|
||||
NICHT die spezifische Task-Kategorie — immer identisch
|
||||
für alle Tasks einer Liste
|
||||
.system → "true" (immer System-Kategorie)
|
||||
.name → Listen-Systemkategorien (z.B. "SYS-CAT-SHOPPINGLIST", "SYS-CAT-TODOS")
|
||||
.taskCategoryId → spezifische Task-Kategorie (verifiziert): metaId-Format
|
||||
(z.B. "taskCategory/23431854_200"), null wenn nicht gesetzt
|
||||
.assignee / .assigneeIds → zugewiesene Mitglieder
|
||||
.reminder → Erinnerungsdatum (ISO 8601, optional)
|
||||
.recurrency → Wiederholungsregel (optional)
|
||||
.sortingIndex → Anzeigereihenfolge
|
||||
```
|
||||
|
||||
**Kategorie-Zuweisung bei taskcreate2 / taskupdate2:** Parameter-Name noch unbekannt.
|
||||
Getestete Varianten (`taskCategoryId`, `categoryId`, `category`, `categoryMetaId`) werden
|
||||
serverseitig ignoriert — die Task bekommt stets die Default-Systemkategorie der Liste.
|
||||
Service Worker in der Web-App verhindert Inspektion des echten Requests. Noch zu verifizieren.
|
||||
**Kategorie-Zuweisung bei taskcreate2 / taskupdate2 (verifiziert):**
|
||||
|
||||
| Parameter | Pflicht | Wert |
|
||||
|---|---|---|
|
||||
| `taskCategoryId` | nein | Kategorie-MetaId aus `get_categories` (z.B. `taskCategory/23431854_200`) |
|
||||
|
||||
Hinweise:
|
||||
- Wert muss das vollständige metaId-Format `taskCategory/<familyId>_<systemCategoryId>` sein.
|
||||
Nur der numerische `systemCategoryId`-Teil (z.B. `200`) führt zu API-Fehler
|
||||
`"cannot find task category id=200"`.
|
||||
- Das `categories[]`-Feld in der Response zeigt immer `SYS-CAT-SHOPPINGLIST`
|
||||
(Listen-Level-Systemkategorie, unabhängig vom gesetzten `taskCategoryId`).
|
||||
Die tatsächliche Task-Kategorie ist im Feld `taskCategoryId` der Task gespeichert.
|
||||
- Nur für Einkaufslisten (`taskListType=SHOPPING_LIST`) relevant;
|
||||
TODO-Listen haben keine Kategorien.
|
||||
|
||||
## Systembezeichnungen für Listen-Namen
|
||||
|
||||
@@ -244,6 +259,7 @@ Content-Type: application/x-www-form-urlencoded
|
||||
| `taskListId` | ja | Listen-ID aus `get_lists` (z.B. `taskList/123_456`) |
|
||||
| `text` | ja | Aufgabentitel |
|
||||
| `description` | nein | Optionale Beschreibung |
|
||||
| `taskCategoryId` | nein | Kategorie-MetaId aus `get_categories` (z.B. `taskCategory/23431854_200`) |
|
||||
|
||||
**Response-Struktur (verifiziert):**
|
||||
```
|
||||
@@ -263,8 +279,9 @@ Content-Type: application/x-www-form-urlencoded
|
||||
| Parameter | Pflicht | Wert |
|
||||
|---|---|---|
|
||||
| `metaId` | ja | Task-ID aus `get_tasks` |
|
||||
| `text` | nein | Neuer Titel (mindestens `text` oder `description` erforderlich) |
|
||||
| `text` | nein | Neuer Titel (mindestens eines der optionalen Felder erforderlich) |
|
||||
| `description` | nein | Neue Beschreibung |
|
||||
| `taskCategoryId` | nein | Kategorie-MetaId aus `get_categories` (z.B. `taskCategory/23431854_200`) |
|
||||
|
||||
Hinweis: `taskListId` ist **nicht** erforderlich (verifiziert – Update ohne `taskListId` funktioniert).
|
||||
|
||||
@@ -408,4 +425,5 @@ AND `moodStarShortcut: false` AND `moodMap: {}`.
|
||||
- ~~`metadelete`: korrekter Parameter-Name + Response-Struktur~~ → **`id`**, Response `"true"` (verifiziert)
|
||||
- ~~`wallmood`: Parameter-Name `wallId`~~ → **`wall_message_id`** (verifiziert via API-Fehlermeldung)
|
||||
- ~~`wallmood`: `moodType`-Werte, Toggle vs. explizit, Response-Struktur~~ → verifiziert: idempotentes SET mit `"STAR"`, kein Toggle (siehe oben)
|
||||
- `wallmood` Unlike: Mechanismus unbekannt — Service Worker verhindert Browser-Inspektion; alle getesteten Ansätze fehlgeschlagen (siehe oben)
|
||||
- `wallmood` Unlike: Mechanismus unbekannt — Service Worker verhindert Browser-Inspektion; alle getesteten Ansätze fehlgeschlagen (siehe oben)
|
||||
- ~~`taskcreate2` / `taskupdate2`: Kategorie-Paramter-Name~~ → **`taskCategoryId`**, Wert = vollständige metaId (verifiziert)
|
||||
Reference in New Issue
Block a user