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>