Skip to content

Commit a1e7230

Browse files
lesnik512claude
andcommitted
docs(planning): archive 0.3.0 spec/plan + close shipped deferred items
PR #21 (`feat/v0.3-pydantic-optional`, tag 0.3.0) shipped both deferred-work items it tracked (pydantic-import guard + malformed-payload tests). Move the spec, plan, and the leftover v0.2-retro-housekeeping spec into planning/archive/, and migrate the two closed items into a new "Closed by the 0.3.0 release" section in deferred-work.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1222c64 commit a1e7230

4 files changed

Lines changed: 4 additions & 4 deletions

File tree

planning/plans/2026-06-04-pydantic-optional-extra-plan.md renamed to planning/archive/plans/2026-06-04-pydantic-optional-extra-plan.md

File renamed without changes.

planning/specs/2026-06-04-pydantic-optional-extra-design.md renamed to planning/archive/specs/2026-06-04-pydantic-optional-extra-design.md

File renamed without changes.

planning/specs/2026-06-04-v0.2-retro-and-housekeeping-design.md renamed to planning/archive/specs/2026-06-04-v0.2-retro-and-housekeeping-design.md

File renamed without changes.

planning/deferred-work.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ Items raised in reviews that are real but not actionable now.
88

99
- **`_get_adapter` `lru_cache` is module-global, not per-decoder instance** — keyed by `model` only; two `PydanticDecoder()` instances with different configurations (none today) would share adapters, and the cache survives across tests unless explicitly cleared. Revisit if/when a configurable `PydanticDecoder(mode=..., strict=...)` lands. (`src/httpware/decoders/pydantic.py:12-14`)
1010

11-
### In progress for 0.3.0
11+
## Closed by the 0.3.0 release (2026-06-04)
1212

13-
Tracked by `planning/specs/2026-06-04-pydantic-optional-extra-design.md` (forthcoming).
13+
PR #21 (`feat/v0.3-pydantic-optional`) shipped 0.3.0 with pydantic moved to `[project.optional-dependencies]`, guarded the same way `msgspec` is, and fail-fast at `AsyncClient.__init__` when the extra is missing. Spec/plan archived under `planning/archive/`.
1414

15-
- **`pydantic` import not guarded the way `msgspec` is**`decoders/pydantic.py` imports `pydantic` at module top; `decoders/msgspec.py` guards via `is_msgspec_installed`. 0.3.0 moves `pydantic` into `[project.optional-dependencies]` and guards the import the same way. Closes on 0.3.0 merge. (`src/httpware/decoders/pydantic.py:5`, `pyproject.toml` `[project] dependencies`)
16-
- **Empty/malformed payload tests**`b""`, `b"null"`, `b"{}"`, invalid UTF-8: current pydantic-core behavior is correct but unpinned; a future pydantic upgrade could change error types undetected. Folded into the 0.3.0 spec. Closes on 0.3.0 merge. (`tests/test_decoders_pydantic.py`)
15+
- **`pydantic` import not guarded the way `msgspec` is**closed. `decoders/pydantic.py` now guards via `import_checker.is_pydantic_installed`; `PydanticDecoder.__init__` raises `ImportError` with the install hint; `AsyncClient(decoder=None)` fail-fast in `_default_pydantic_decoder()`.
16+
- **Empty/malformed payload tests**closed. `tests/test_decoders_pydantic.py::test_malformed_payload_raises_validation_error` is a 7-case parametrized test pinning current pydantic-core behavior for `b""`, `b"null"`, `b"{}"`, malformed JSON, and invalid UTF-8.
1717

1818
## Closed by the v0.2 thin-wrapper pivot (2026-06-03)
1919

0 commit comments

Comments
 (0)