chore: finalize v1.0.0 — cleanup, unified errors, date validation

- Move integration tests to tests/; fix .gitignore to scope root-only
- Remove tracked debug artefacts (probe2_stderr/stdout.txt)
- __init__.py: version via importlib.metadata; export create_server in __all__
- server.py: unified JSON error format {"error":"..."} for all tools
- server.py: date validation (YYYY-MM-DD) for all meal-plan tools
- server.py: clear_list reports partial failures (failed_count, failed_ids)
- server.py: -> str annotations on get_circles, get_tasks, get_activities
- server.py: document TODO:94 as known limitation (no name in sortingIndexByTaskList)
- server.py: date validation also added to get_meal_plan
- Add LICENSE (MIT, Marcus van Elst)
- Add CHANGELOG.md (Keep a Changelog, v0.1.0–v1.0.0)
- README.md: restructured by use case; 🔒 marks write tools
- CLAUDE.md: update to v1.0.0 state; condense roadmap history
- SPEC.md: add version stamp
- pyproject.toml: version 1.0.0 (single source of truth)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-17 15:30:26 +02:00
parent 0b56ea92bc
commit bdf9e3c59e
13 changed files with 599 additions and 336 deletions
+179
View File
@@ -0,0 +1,179 @@
# 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).
## [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