Commit 51474c7
authored
chore(context7): drop the stale planning/ exclusion (#119)
* chore: migrate off the planning/ convention
Replaces planning/ (127 files) and architecture/ (10 pages) with CONTEXT.md,
docs/adr/, and two named invariant tests. Nothing was lost:
- planning/releases/ (24 files) — the published GitHub Releases are the record.
Spot-checked 0.16.0 (byte-identical), 0.13.0 and 0.8.1 (both drifted locally
after publication: reformatted code comments, and internal paths rewritten by
later directory reorgs). The Release bodies are the authoritative copies.
- planning/changes/ (96), audits/ (8), retros/ (3) — git history is the record.
- planning/decisions/ was empty; the rejected alternatives were buried in the
change files, the retros and the architecture pages, and are rescued below.
- planning/agents/ moved to docs/agents/, with domain.md repointed at CONTEXT.md
and docs/adr/.
Twelve ADRs were already drafted on this branch and are kept as 0001-0012.
Five more were extracted from planning/ and architecture/ in this pass:
- 0013 httpx2 is the public surface — the 0.2.0 withdrawal of httpware's own
Request/Response/Transport/ClientConfig layer (changes/2026-06-03.02,
retros/2026-06-04)
- 0014 decoders claim broadly, list order resolves ties, can_decode must not
raise (retros/2026-06-10, changes/2026-06-10.01)
- 0015 the body cap counts decoded bytes; Content-Length rejects but never
admits; stream() iteration is uncapped (changes/2026-06-23.03)
- 0016 stream() bypasses the middleware chain (changes/2026-06-05.04)
- 0017 shared sync/async logic stays a module-local function, not a class and
not _internal/ (the 2026-07-13 extraction series)
Two candidates were declined because the fact already has a durable home and an
ADR would rot beside it: the msgspec type_info/CustomType probe (the rationale
is the _probe_can_decode docstring) and MockTransport-over-respx (docs/testing.md
"Why not respx?"). The circuit breaker's raw-read `state` property was declined
as too narrow.
Invariant tests. ADRs 0003, 0009 and 0011 as drafted cited two tests that did
not exist — tests/test_client_parity.py and a _KeywordReduceMixin precondition
check. Both are now written, so the ADRs cite real enforcement:
- tests/test_client_parity.py — public methods, per-method parameters, the
constructors, and the resilience suite's sync/async pairing with Timeout as
the sole named exception.
- tests/test_errors.py — the mixin's __dict__-mirrors-__init__ precondition, and
a census so a seventh mixin class cannot be added unchecked.
Every assertion was verified by breaking it: an async-only public method, a
keyword added to AsyncClient.get alone, a constructor keyword on one world, an
async-only resilience middleware, a seventh mixin subclass, and an attribute
stored beyond the init keywords each turn the matching test red, and green again
on restore. Each was also confirmed not to trip on a benign narrowing — an
annotation tightened on one world only, a private helper added to one client,
and a field annotation narrowed from float to int all stay green. Only parameter
names, order and kind are compared, because the two worlds legitimately annotate
middleware and every return type differently.
Everything else in architecture/ was mechanism prose with nothing enforceable
and is simply deleted; no test was invented to justify keeping the directory.
Glossary audit. All four _Avoid_ entries survived — each has a real synonym in
use. Two source edits were forced:
- docs/errors.md called a third-party decoder an "adapter", the one spelling the
Decoder entry rejects. Fixed; user-visible docs prose, no API change.
- ResponseTooLargeError.limit is a public field naming the cap, which contradicts
the Cap entry's _Avoid_: limit. It cannot be renamed without a breaking change,
so CONTEXT.md now records it as the one sanctioned exception rather than
asserting a rule the public API violates.
Stale cross-references into the deleted directories were removed from seven
module docstrings, three test docstrings, and seven docs pages. The docs ones
were absolute github.com URLs, which lychee --offline excludes — they would have
rotted silently past the new gate.
release.yml. Copied from modern-di verbatim (only the PyPI project name differs).
This retires the mandatory-curated-release-notes policy: the "Require curated
release notes" gate is gone and the body now comes from generate_release_notes.
Without this, deleting planning/releases/ would have broken every future stable
release, since the gate read planning/releases/${GITHUB_REF_NAME}.md.
justfile loses the index and check-planning recipes and the planning/index.py
line from lint-ci. _checks.yml gains the offline lychee links job. mkdocs.yml
excludes docs/adr/ and docs/agents/ from the site build, as modern-di does —
without it, --strict fails on the new unnavigated pages.
Verification: just lint-ci clean; just test 811 passed, 100% coverage;
just docs-build clean under --strict; lychee --offline 56 errors before,
0 after (all 56 were inside planning/).
Deferred items with no ADR home — 3.13t free-threaded CI, blocked on a msgspec
cp313t wheel, and the circuit breaker's force_open/force_closed — are drafted to
DRAFT-ISSUES-httpware.md, not opened.
* chore(context7): drop the stale planning/ exclusion
The sibling commit on this branch deletes planning/, so the exclusion now
names a directory that does not exist.
Dropping the key rather than leaving an empty list: Context7's schema
(https://context7.com/schema/context7.json) declares no required properties
and gives excludeFolders a default of [], so an absent key and an empty list
are equivalent. Absent matches the repos that never carried the line.1 parent cad5aaa commit 51474c7
182 files changed
Lines changed: 860 additions & 21393 deletions
File tree
- .github/workflows
- architecture
- benchmarks
- docs
- adr
- agents
- dev
- planning
- _templates
- agents
- audits
- scripts
- changes
- decisions
- releases
- retros
- src/httpware
- _internal
- decoders
- middleware/resilience
- tests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | 28 | | |
48 | 29 | | |
49 | 30 | | |
50 | 31 | | |
51 | 32 | | |
52 | 33 | | |
53 | 34 | | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
58 | 40 | | |
59 | 41 | | |
60 | 42 | | |
61 | 43 | | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | 44 | | |
70 | 45 | | |
71 | 46 | | |
| |||
75 | 50 | | |
76 | 51 | | |
77 | 52 | | |
78 | | - | |
79 | | - | |
| 53 | + | |
80 | 54 | | |
81 | 55 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
19 | 11 | | |
20 | 12 | | |
21 | 13 | | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
27 | 20 | | |
28 | 21 | | |
29 | 22 | | |
30 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
31 | 68 | | |
32 | | - | |
| 69 | + | |
33 | 70 | | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
38 | 76 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
| 77 | + | |
50 | 78 | | |
51 | | - | |
| 79 | + | |
52 | 80 | | |
53 | | - | |
54 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
55 | 115 | | |
56 | 116 | | |
57 | 117 | | |
58 | | - | |
59 | | - | |
60 | | - | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
0 commit comments