Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion planning/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,11 @@ carry **no** frontmatter — living prose, dated by git.

### Active

- **[docs-ux-restructure](changes/active/2026-06-14.01-docs-ux-restructure/design.md)** (draft, 2026-06-14) — Thin README front-door + canonical `docs/index.md`, why-httpware hook (G1), runnable first example (G4), nav nits, base-client scrub. G2 dropped, G6 deferred.
_None._

### Archived (shipped)

- **[docs-ux-restructure](changes/archive/2026-06-14.01-docs-ux-restructure/design.md)** (#60, 2026-06-14) — Thin README front-door + canonical `docs/index.md` (G3), why-httpware hook (G1), runnable jsonplaceholder example (G4), nav reorder + architecture links, base-client scrub. G2 dropped; G6 (decoder guide) still open.
- **[docs-audit-followups](changes/archive/2026-06-13.05-docs-audit-followups/change.md)** (#58, 2026-06-13) — Second docs-audit batch: corrected the overstated invariant-enforcement claims in `CLAUDE.md` + `architecture/overview.md` (only `print()`/blanket-`type: ignore` are machine-checked), readability findings R1–R3, and documented the public `STATUS_TO_EXCEPTION` (G5).
- **[docs-accuracy-fixes](changes/archive/2026-06-13.04-docs-accuracy-fixes/change.md)** (f203821, 2026-06-13) — Fixed 5 verified factual errors from the [docs audit](audits/2026-06-13-docs-audit.md): RetryBudget formula, modern-di 2.x recipe, contributing-doc CI/grep claim, `just lint` comment, middleware stable-contracts list (+ AsyncTimeout non-finite wording).
- **[portable-planning-convention](changes/archive/2026-06-13.03-portable-planning-convention/design.md)** (#55, 2026-06-13) — Adopt the portable two-axis convention: per-capability `architecture/` truth files + `changes/` bundles, full history backfill, byte-identical Conventions.
Expand Down
3 changes: 2 additions & 1 deletion planning/audits/2026-06-13-docs-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,8 @@ follow them. No orphan pages and no broken nav targets — the nav is otherwise
all five bare `architecture/*.md` references converted to absolute GitHub links.

Only **G6** (custom-`ResponseDecoder` guide; no API reference per maintainer)
remains open after `2026-06-14.01`.
remains open after `2026-06-14.01` — now parked in the long-tail register,
[`deferred.md`](../deferred.md) (Documentation), demand-gated.

### Verified correct (negative results)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
status: draft
status: shipped
date: 2026-06-14
slug: docs-ux-restructure
supersedes: null
superseded_by: null
pr: null
outcome: null
pr: 60
outcome: Shipped via #60 (squash 480cea8) — thin README front-door + canonical docs/index.md (G3), why-httpware hook (G1), runnable jsonplaceholder example (G4), nav reorder + architecture links, base-client scrub. G2 dropped; G6 (decoder guide) still open.
---

# Design: Docs-UX restructure — thin README, canonical site, runnable first example
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
status: draft
status: shipped
date: 2026-06-14
slug: docs-ux-restructure
spec: docs-ux-restructure
pr: null
pr: 60
---

# docs-ux-restructure — implementation plan
Expand Down
4 changes: 4 additions & 0 deletions planning/deferred.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,7 @@ As of 0.7.0, all planned epics (3, 4, 5, 6) are closed — see the [change Index
Three separable additions, rough priority: **(a) rate-over-window trip mode** (the core ask; additive opt-in), **(b) manual control + read-only `state`** (independent; both libraries have it, httpware parked it as YAGNI), **(c) slow-call-rate dimension** (don't — covered by `AsyncTimeout`).

**Concurrency note:** the window recorder (ring buffer for count-based; time-bucketed counters for time-based) is more state than v1's single counter, but recording an outcome stays a synchronous mutation, so the async lock-free atomicity invariant and the sync `threading.Lock` both still hold. Time-based eviction must read `_now()` inside the same synchronous critical section.

### Documentation

- **Custom-`ResponseDecoder` guide** (audit finding G6, [2026-06-13 docs audit](audits/2026-06-13-docs-audit.md)) — the decoder seam (Seam B) is a documented extension point, but unlike middleware it has no "write your own" guide. A short page would show the `can_decode(model: type) -> bool` / `decode(content: bytes, model: type[T]) -> T` protocol, how `decoders=[...]` ordering resolves a model, and a worked third-party-adapter example. Decided alongside the `2026-06-14.01` docs-UX restructure: **defer the guide, and ship no auto API reference / mkdocstrings** (prose carries the signatures). Demand-gated. Revisit trigger: someone asks how to write a custom decoder, a third-party decoder adapter ships, or the `decoders/` protocol surface changes. (`docs/`, `src/httpware/decoders/`)