fix: Super Productivity API path unwraps the {ok, data} envelope, drops the inbox project, health waits for the renderer (#162)
CI / verify (push) Successful in 1m40s
Release / release (push) Successful in 37s

Files changed:
- CHANGES.md
- VERSION
- tools/CONTRACT.md
- tools/chemenu/commands/doctor.py
- tools/chemenu/tasks/superproductivity.py
- tools/chemenu/tests/test_new_page.py
- tools/chemenu/tests/test_superproductivity.py
- tools/chemenu/tests/test_task_cmd.py
This commit is contained in:
torben committed 2026-09-30 12:17:39 +02:00
1 parent 8be5e6e5f3
commit 529793b255
8 files changed
+267 -58

No files matched your search

+27 -1
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
---
## 8.0.0-beta.1 - 2026-09-30 - Page titles must form valid, unique file names on Windows and macOS
## 8.0.0-beta.2 - 2026-09-30 - Super Productivity API path: unwrap the {ok, data} envelope, exclude the inbox project, ready-aware health (#162)
**Author:** Torben Nehmer
@@ -78,6 +78,7 @@ concern - readable here, never shipped as something to parse.
- dist export no longer cuts the dist export record out of the shipped tools/CONTRACT.md
- fail() prints the command's ON FAILURE lines on stderr
- Budget gate and loop-breaker refusals exit without a traceback
- Super Productivity API path: unwrap the {ok, data} envelope, exclude the inbox project, ready-aware health (#162)
**Low impact**
- version bump no longer points at version release in its output
@@ -108,6 +109,31 @@ concern - readable here, never shipped as something to parse.
- new_page/type_resolver comments no longer claim only entities declare a layout:
<!-- /wikitool:bumps -->
### Super Productivity API path: unwrap the {ok, data} envelope, exclude the inbox project, ready-aware health (Gitea #162)
Preparing the live tracker tests (#156) ran the real Super Productivity v19.1.0 headless for the
first time, and four assumptions about its local REST API did not hold. The test fakes had been
written from the same assumptions, so the suite stayed green while `access: "api"` could not read
anything.
- **The envelope.** The app answers `{"ok": true, "data": ...}` or `{"ok": false, "error": {"code",
"message"}}`; the adapter expected a bare list. Every read - `review`, `task list`, `task new`,
`task close` - failed with "did not return a list of objects". `_ApiClient` now unwraps `data`,
raises with the API's own code and message on `ok: false`, and refuses a body without the
envelope instead of guessing.
- **The inbox.** `GET /projects` and the backup snapshot both list `INBOX_PROJECT`, so `review`
would have reported "Inbox" as a tracker project without a `kb/` page. Both readers and the
writer's name-to-id lookup now drop it.
- **`health()`** requires `data.rendererReady`; an app whose renderer is still loading no longer
counts as healthy, and `doctor` says so.
- **Closing a task** sets `doneOn` and `modified`; the module docstring claimed it does not. The
behaviour is harmless - the store fills them exactly as for a tick in the UI - the reasoning is
corrected.
The fakes in `test_superproductivity.py`, `test_task_cmd.py` and `test_new_page.py` now answer in the real envelope,
and a test pins that a bare list is rejected. Drop-in in both directions; no `.wikitool-tasks.json`
change.
### Page titles must form valid, unique file names on Windows and macOS (Gitea #155)
A title is the wiki's only identifier for a page and becomes the file name one to one, but nothing