From 5ee0292dcb91aa939e9ab357eb7190c965bf482f Mon Sep 17 00:00:00 2001 From: disqualifier Date: Mon, 29 Jun 2026 17:57:37 -0400 Subject: [PATCH] docs: document _load's ValueError-on-non-object-JSON in the error contract (v0.1.1) README + CLAUDE.md error contract now note that _load raises ValueError on valid-but- non-object JSON (bare list/number/string/null) in addition to JSONDecodeError on a corrupt file, matching the module docstring (L1). Signed-off-by: disqualifier --- README.md | 10 ++++++---- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 869d9d2..8ccd826 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ you `delete` or `clear` them. `requirements.txt`: ``` -aiokv @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiokv.git@v0.1.0 +aiokv @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiokv.git@v0.1.1 ``` Direct: ```bash -pip install "aiokv @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiokv.git@v0.1.0" +pip install "aiokv @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiokv.git@v0.1.1" ``` Requires `aiofiles` (pulled transitively). @@ -77,8 +77,10 @@ are consistent and no update is lost. All blocking filesystem calls run via ## Error contract -- `get` / `set` / `get_all` raise on unexpected I/O (and `_load` raises on a - truncated/corrupt file) so a real failure is visible rather than silently masked. +- `get` / `set` / `get_all` raise on unexpected I/O. `_load` raises `JSONDecodeError` + on a truncated/corrupt file, and `ValueError` when the file holds valid JSON that + isn't an object (a bare list/number/string/null) — so corruption or a wrong-shaped + file is visible rather than silently masked. - `delete` / `clear` log the exception and return `False` on error, `True` otherwise. ## Versioning diff --git a/pyproject.toml b/pyproject.toml index 05110b3..10d259f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "aiokv" -version = "0.1.0" +version = "0.1.1" description = "Async file-backed key-value store for single-process local state — atomic writes, no TTL, config-free, installable." requires-python = ">=3.10" dependencies = [