08ee5fb84a
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>
227 lines
6.1 KiB
Markdown
227 lines
6.1 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this project will be documented in this file.
|
||
|
||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||
|
||
## Versioning Policy
|
||
|
||
This project follows Semantic Versioning (SemVer).
|
||
Breaking changes (removed tools, changed parameters) increment the major version.
|
||
|
||
## [1.1.1] – 2026-04-17
|
||
|
||
### Fixed
|
||
- `update_task`: recurrency and reminder fields now sent as flat top-level parameters
|
||
instead of nested objects — the FiZ `Ai()` encoder does not support nested objects;
|
||
`recurrencyDescriptor`/`reminder` keys are never sent, fields go directly to top level
|
||
(e.g. `recurrency=WEEKLY`, `reminderUnit=DAY` rather than `recurrencyDescriptor={...}`)
|
||
- SPEC.md and CLAUDE.md corrected to document the flat encoding
|
||
|
||
---
|
||
|
||
## [1.1.0] – 2026-04-17
|
||
|
||
### Added
|
||
- `update_task`: recurrency parameters (`recurrency`, `recurrency_interval`, `rrule`,
|
||
`clear_recurrency`) — set or remove task recurrence rules via `recurrencyDescriptor`
|
||
- `update_task`: reminder parameters (`reminder_unit`, `reminder_value`, `clear_reminder`)
|
||
— set or remove task reminders via `reminder`
|
||
- SPEC.md: documented `recurrencyDescriptor` and `reminder` fields for `taskupdate2`
|
||
(verified via JS-Bundle xb-Encoder / fc-Encoder)
|
||
|
||
---
|
||
|
||
## [1.0.1] – 2026-04-17
|
||
|
||
### Added
|
||
- IMPORTANT confirmation notes in docstrings for write operations (`toggle_task`, `like_post`)
|
||
- `[project.urls]` section in `pyproject.toml` with Gitea repository link
|
||
- Language note in CLAUDE.md explaining German/English split
|
||
- `tests/README.md` documentation for running integration tests
|
||
|
||
### Changed
|
||
- `.gitignore` patterns now recursive (test_*.py without leading slash)
|
||
- CLI help text updated (removed "(read-only)" qualifier)
|
||
- `clear_list()` now logs exception reasons for failed deletions
|
||
- `get_categories()` docstring clarifies custom vs. system category locale behavior
|
||
|
||
### Fixed
|
||
- Exception handling in `clear_list()` with detailed logging
|
||
|
||
---
|
||
|
||
## [1.0.0] – 2026-04-17
|
||
|
||
### Added
|
||
- `tests/` directory with integration tests (moved from root)
|
||
- `LICENSE` (MIT, Marcus van Elst)
|
||
- Date validation (ISO `YYYY-MM-DD`) for all meal-plan tools
|
||
- `_err()` helper — all tools now return `{"error": "..."}` JSON on failure
|
||
|
||
### Changed
|
||
- Version is now a single source of truth in `pyproject.toml`;
|
||
`__init__.py` reads it via `importlib.metadata`
|
||
- `create_server()` exported via `__all__` in `__init__.py`
|
||
- `clear_list` reports partial failures:
|
||
`{"deleted_count": N, "failed_count": M, "failed_ids": [...]}`
|
||
- All tool functions have explicit `-> str` return-type annotations
|
||
- Unified error format: every tool returns `{"error": "message"}` JSON
|
||
|
||
### Removed
|
||
- ~50 debug/probe artefact files (`probe_*.py`, `debug_*.py`, `*.txt` outputs)
|
||
|
||
---
|
||
|
||
## [0.11.x] – Meal Planner write access
|
||
|
||
### [0.11.8]
|
||
- Documented `isRecipe` flag behaviour in `get_recipe_box`
|
||
|
||
### [0.11.7]
|
||
- `get_recipe_box` — returns only real recipes (`isRecipe=true`)
|
||
- Parser fix: `ingredients_parsed` built from free-text, not the API list
|
||
|
||
### [0.11.6]
|
||
- `clear_list` — bulk-delete all tasks in a list within one session
|
||
|
||
### [0.11.5]
|
||
- `add_meal_note` — add note + serving count to a meal plan slot
|
||
|
||
### [0.11.4]
|
||
- `delete_meal_plan_entry` — delete `dish/` and `meal/` entries
|
||
|
||
### [0.11.3]
|
||
- `add_meal_to_meal_plan` — structured output (fixed `a00.r.r` array shape)
|
||
|
||
### [0.11.2]
|
||
- `add_meal_to_meal_plan` — add free-text meal entry
|
||
|
||
### [0.11.1]
|
||
- `add_recipe_to_meal_plan` — structured output after response verified
|
||
|
||
### [0.11.0]
|
||
- `add_recipe_to_meal_plan` — add recipe from recipe box to meal plan
|
||
|
||
---
|
||
|
||
## [0.10.x] – Meal Planner read access
|
||
|
||
### [0.10.3]
|
||
- `get_meal_plan` — `is_from_recipe_box` field via `recipeList[].isRecipe`
|
||
|
||
### [0.10.2]
|
||
- `get_meal_plan` — merges `mealList[]` (free-text notes + servings)
|
||
|
||
### [0.10.1]
|
||
- `get_meal_plan` — structured output after `mplistinterval` response verified
|
||
|
||
### [0.10.0]
|
||
- `get_meal_plan` — read-only, raw JSON (Premium feature)
|
||
|
||
---
|
||
|
||
## [0.9.x] – Task recurrency + reminders
|
||
|
||
### [0.9.1]
|
||
- Fix `reminder` mapping (`reminderUnit`/`reminderValue`; `value=0` is valid)
|
||
|
||
### [0.9.0]
|
||
- `get_tasks` returns `recurrency`, `recurrency_interval`, `rrule`, `reminder`
|
||
|
||
---
|
||
|
||
## [0.8.x] – Recipe categories + misc fixes
|
||
|
||
### [0.8.3]
|
||
- `OTHER` list type documented and supported; `FW_DEBUG=1` logs unknown task fields
|
||
|
||
### [0.8.2]
|
||
- `get_lists()` without scope returns all circles
|
||
|
||
### [0.8.1]
|
||
- Fix recipe category handling
|
||
|
||
### [0.8.0]
|
||
- `get_recipe_categories` — list available recipe categories
|
||
- `create_recipe` / `update_recipe` accept `category_ids`
|
||
|
||
---
|
||
|
||
## [0.7.x] – Circle management
|
||
|
||
### [0.7.5]
|
||
- Primary-circle guard in `update_circle` (`isFirstFamily` check)
|
||
|
||
### [0.7.4]
|
||
- `update_circle` — rename a circle
|
||
|
||
### [0.7.3]
|
||
- `update_list` — rename, change emoji/colour
|
||
|
||
### [0.7.2]
|
||
- `delete_circle`
|
||
|
||
### [0.7.1]
|
||
- `get_lists` scope fix; `create_list` with `circle_id`; `delete_list` scope
|
||
|
||
### [0.7.0]
|
||
- `create_circle`, `add_member_to_circle`
|
||
|
||
---
|
||
|
||
## [0.6.x] – Recipe box
|
||
|
||
### [0.6.1]
|
||
- `update_recipe` + fix newline handling in `create_recipe`
|
||
|
||
### [0.6.0]
|
||
- `get_recipes`, `get_recipe`, `create_recipe`, `delete_recipe`
|
||
|
||
---
|
||
|
||
## [0.5.x] – List management
|
||
|
||
### [0.5.3]
|
||
- Category auto-assign hint in `create_task` docstring
|
||
|
||
### [0.5.2]
|
||
- Quantity convention documented in `create_task` docstring
|
||
|
||
### [0.5.1]
|
||
- `emoji` + `color` in `get_lists` / `create_list`
|
||
|
||
### [0.5.0]
|
||
- `create_list`, `delete_list`
|
||
|
||
---
|
||
|
||
## [0.4.x] – Category management + task fields
|
||
|
||
- `create_category`, `delete_category`
|
||
- `create_task` / `update_task` support `due_date`, `assignee`, `list_id`
|
||
|
||
---
|
||
|
||
## [0.3.x] – Task write access
|
||
|
||
- `create_task`, `update_task`, `toggle_task`, `delete_task`
|
||
|
||
---
|
||
|
||
## [0.2.x] – Activity feed
|
||
|
||
- `get_activities`, `like_post`
|
||
|
||
---
|
||
|
||
## [0.1.0] – Initial release
|
||
|
||
- `get_circles`, `get_members`, `get_lists`, `get_tasks`, `get_categories`
|
||
- Session strategy: login → API calls → logout per tool invocation
|
||
- OS keyring credential storage
|
||
- MCP server via FastMCP
|
||
|
||
[1.0.0]: https://gitea.gecheckt.de/marcus/mcp-familywall/compare/v0.11.8...v1.0.0
|