Skip to content

chore(deps): bump urllib3 from 2.6.3 to 2.7.0#2

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/urllib3-2.7.0
Open

chore(deps): bump urllib3 from 2.6.3 to 2.7.0#2
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/urllib3-2.7.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 29, 2026

Copy link
Copy Markdown

Bumps urllib3 from 2.6.3 to 2.7.0.

Release notes

Sourced from urllib3's releases.

2.7.0

🚀 urllib3 is fundraising for HTTP/2 support

urllib3 is raising ~$40,000 USD to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects please consider contributing financially to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.

Thank you for your support.

Security

Addressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.

  • Decompression-bomb safeguards of the streaming API were bypassed:

    1. When HTTPResponse.drain_conn() was called after the response had been read and decompressed partially. (Reported by @​Cycloctane)
    2. During the second HTTPResponse.read(amt=N) or HTTPResponse.stream(amt=N) call when the response was decompressed using the official Brotli library. (Reported by @​kimkou2024)

    See GHSA-mf9v-mfxr-j63j for details.

  • HTTP pools created using ProxyManager.connection_from_url did not strip sensitive headers specified in Retry.remove_headers_on_redirect when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by @​christos-spearbit)

Deprecations and Removals

  • Used FutureWarning instead of DeprecationWarning for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (urllib3/urllib3#3763)
  • Removed support for end-of-life Python 3.9. (urllib3/urllib3#3720)
  • Removed support for end-of-life PyPy3.10. (urllib3/urllib3#4979)
  • Bumped the minimum supported pyOpenSSL version to 19.0.0. (urllib3/urllib3#3777)

Bugfixes

  • Fixed a bug where HTTPResponse.read(amt=None) was ignoring decompressed data buffered from previous partial reads. (urllib3/urllib3#3636)
  • Fixed a bug where HTTPResponse.read() could cache only part of the response after a partial read when cache_content=True. (urllib3/urllib3#4967)
  • Fixed HTTPResponse.stream() and HTTPResponse.read_chunked() to handle amt=0. (urllib3/urllib3#3793)
  • Updated _TYPE_BODY type alias to include missing Iterable[str], matching the documented and runtime behavior of chunked request bodies. (urllib3/urllib3#3798)
  • Fixed LocationParseError when paths resembling schemeless URIs were passed to HTTPConnectionPool.urlopen(). (urllib3/urllib3#3352)
  • Fixed BaseHTTPResponse.readinto() type annotation to accept memoryview in addition to bytearray, matching the io.RawIOBase.readinto contract and enabling use with io.BufferedReader without type errors. (urllib3/urllib3#3764)
Changelog

Sourced from urllib3's changelog.

2.7.0 (2026-05-07)

Security

Addressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.

  • Decompression-bomb safeguards of the streaming API were bypassed:

    1. When HTTPResponse.drain_conn() was called after the response had been read and decompressed partially.
    2. During the second HTTPResponse.read(amt=N) or HTTPResponse.stream(amt=N) call when the response was decompressed using the official Brotli <https://pypi.org/project/brotli/>__ library.

    See GHSA-mf9v-mfxr-j63j <https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j>__ for details.

  • HTTP pools created using ProxyManager.connection_from_url did not strip sensitive headers specified in Retry.remove_headers_on_redirect when redirecting to a different host. (GHSA-qccp-gfcp-xxvc <https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc>__)

Deprecations and Removals

  • Used FutureWarning instead of DeprecationWarning for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. ([#3763](https://github.com/urllib3/urllib3/issues/3763) <https://github.com/urllib3/urllib3/issues/3763>__)
  • Removed support for end-of-life Python 3.9. ([#3720](https://github.com/urllib3/urllib3/issues/3720) <https://github.com/urllib3/urllib3/issues/3720>__)
  • Removed support for end-of-life PyPy3.10. ([#4979](https://github.com/urllib3/urllib3/issues/4979) <https://github.com/urllib3/urllib3/issues/4979>__)
  • Bumped the minimum supported pyOpenSSL version to 19.0.0. ([#3777](https://github.com/urllib3/urllib3/issues/3777) <https://github.com/urllib3/urllib3/issues/3777>__)

Bugfixes

  • Fixed a bug where HTTPResponse.read(amt=None) was ignoring decompressed data buffered from previous partial reads. ([#3636](https://github.com/urllib3/urllib3/issues/3636) <https://github.com/urllib3/urllib3/issues/3636>__)
  • Fixed a bug where HTTPResponse.read() could cache only part of the response after a partial read when cache_content=True.

... (truncated)

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels May 29, 2026
wallter added a commit that referenced this pull request Jun 9, 2026
WHY: adversarial audit #1 on 0316b1ad8 found 2 P1 + 3 P2 issues — scan-hijack
still alive on trw_recall/trw_learn/trw_learn_update plus log_tool_call
telemetry writes, compat-baseline provenance unclear, FR12 subprocess
test missing, dead ctx var in heartbeat, off-by-one at grace boundary.

P1-01 (scan-hijack survivors):
- trw_recall, trw_learn, trw_learn_update in tools/learning.py now accept
  ctx: Context | None = None; _build_call_ctx() threads TRWCallContext
  through to _recall_impl.execute_recall which routes
  find_active_run(context=call_ctx) when ctx-aware.
- tools/telemetry.py defines _extract_call_ctx(kwargs) and the @log_tool_call
  decorator threads call_ctx through _write_tool_event →
  _get_cached_run_dir(call_ctx=...) → find_active_run(context=...).
  The process-level cache is BYPASSED for ctx-aware callers to prevent
  cross-session pollution; scan fallback preserved for legacy no-ctx paths.
- test_ctx_injection_parity.py::EXPECTED_CTX_TOOLS extended with the three
  learning tools.

P1-02 (compat-baseline integrity):
- tests/_compat_baseline.md documents provenance: baseline captured at
  commit 494731ea6 (immediate pre-PRD parent); the three modified test
  files' edits were monkeypatch lambda signature-only widening
  (lambda: x → lambda **_: x), behaviorally equivalent.

P2-01 (subprocess inheritance):
- test_trw_session_id_subprocess_inheritance spawns a real subprocess with
  TRW_SESSION_ID="parent-pin-001" in env and asserts the child's
  resolve_pin_key(ctx=None) returns the inherited key.

P2-02 (dead call_ctx in heartbeat):
- tools/ceremony.py — `del call_ctx` removed; variable bound to `_` with
  a comment documenting reserved-for-future-analytics intent.

P2-03 (grace-window boundary):
- state/_run_gc.py:350 changed `>` to `>=` so a run whose last_activity
  falls exactly on the grace cutoff is preserved (spec: "runs younger
  than staleness+grace"). test_sweep_preserves_run_at_exact_grace_boundary
  verifies with deterministic _now override.

Adversarial audit #2 (post-fix): READY TO SHIP — 0 P0, 0 P1, 0 P2.
74/74 PRD-141 tests pass; mypy --strict + Pyright clean on 5 touched
source files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
wallter added a commit that referenced this pull request Jun 9, 2026
WHY: PRD-EVAL-037 audit findings P2 #1 and P2 #2. (1) TRACE-SCHEMA.md:173 documented analysis_depth_tokens and analysis_min_hypotheses_target as type 'int' but the actual BehavioralAnalysis schema declares both as 'int | None = None' for iter-11/12 backward compat — updated doc to match. (2) trw-mcp/tests/test_prd_integrity.py ellipsis-guard parametrize now explicitly covers 4-dot ('....') and multi-ellipsis-fragment ('.../.../.../x.py') inputs so a future narrowing of the guard to 'exactly three dots' would regress visibly.
wallter added a commit that referenced this pull request Jun 9, 2026
Adversarial auditor + reviewer (parallel Opus) found gaps the initial
PRD-FIX-088 commit missed. Implementer agent closed all P1s in one pass:

P1 fixes:
- FR03 acceptance #2: build_check_complete log event now mirrors
  step_durations_ms onto the structlog payload. Previously the log
  fired BEFORE finalize/total were recorded, so even if the kwarg had
  been passed it would have been incomplete. New regression test
  test_step_durations_ms_mirrored_on_log_event uses
  structlog.testing.capture_logs() to pin the contract.
- FR01 tool_call_id plumbing: extracted from contextvars (fallback
  uuid.uuid4().hex[:12]), threaded through _dispatch_q_learning_async
  → coalescing-queue tuples → _q_learning_worker →
  _process_q_learning_inline → process_outcome_for_event →
  process_outcome → outcome_correlation_applied. Now stamped on
  q_learning_complete, q_learning_worker_crashed, q_learning_queue_full,
  the QLearningDeferredDict response field, and the build_check_complete
  log.
- FR04 env-override regression test: new test_correlation_window_default
  with default=7, env=60, env=12 cases.
- QLearningDeferredDict + QLearningHealthDict TypedDicts replace
  dict[str, object] with Literal-typed fields. Removes 3 # type: ignore
  from tests.
- _TransactionalBackend Protocol replaces 2 # type: ignore[attr-defined]
  in scoring/_io_boundary._sync_chunk.
- except BaseException → except Exception in _q_learning_worker
  (KeyboardInterrupt/SystemExit now propagate per Python conventions).

P1.5 hygiene:
- DRY: build_check_invoke fixture in conftest replaces duplicated 14-line
  helper across 4 test files.
- Single error-event source: removed inner try/except in
  _process_q_learning_inline so q_learning_worker_crashed becomes the
  authoritative crash event.
- @DataClass _QLearningHealth in _q_learning_state replaces module-level
  globals + 2 `global` declarations.
- import queue moved to module level (from queue import Empty).
- Test name/cap drift: dispatch test renamed _under_10ms with cap
  tightened from 50ms→10ms (FR05 spec is <5ms, 10ms tolerates CI
  thread-spawn jitter).
- list[str] replaces MagicMock for ordering in coalescing-queue test.
- @pytest.mark.slow benchmark test_batch_sync_2000_rows_under_300ms
  closes FR02 wall-time acceptance.
- _join_q_learning_worker(timeout=30.0) wired into trw_deliver path
  per FR01 shutdown contract.

Verification:
- 89 passed, 1 skipped on PRD-FIX-088 + adjacent regression files
- mypy --strict: 0 issues across 7 source files
- All findings from F1-F10 closed; honest status: implemented sustained

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
wallter added a commit that referenced this pull request Jun 9, 2026
WHY: trw-distill lab's 4-config sweep shares one MemoryConfig
(one quarantine_db_path) but uses 4 distinct SQLiteBackend
instances. _runtime_canary.CANARY_STATE was keyed on quarantine
path only, so config-1's initialize_canaries seeded its backend
and marked the shared key seeded=True; configs 2-4 then
short-circuited init and never seeded their backends. Every
recall raised CanaryTamperError("missing canary canary-001"),
collapsing recall@10 to 0% in cycle 121 pass2.

FIX: introduce _state_key(config, backend) combining the
quarantine path with backend identity (_db_path / _dir / repr).
Apply in initialize_canaries, probe_canaries, and
should_halt_recalls. should_halt_recalls signature now requires
backend; three callers updated (trw-memory _client_recall.py
with None-guard, tools/recall.py, trw-mcp memory_adapter.py).

TESTS: 3 new regression tests in
tests/unit/security/test_canary_namespace_isolation.py covering
seeding isolation, probe non-cross-pollution, and halt
non-cross-pollution. All 60 trw-memory security unit tests
+ 166 trw-mcp memory_adapter/canary tests pass; mypy --strict
clean on touched files.

EMPIRICAL: lab re-run on n=377 corpus with /tmp/lab-cache-c122
shows real result_count=8..30 hits and ZERO recall_failed
events through 29 queries (vs 100% canary-tamper failure
under the bug). Headline recall@10 numbers carry to cycle 123.

Closes cycle 122 task #2 from HANDOFF.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.3 to 2.7.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](urllib3/urllib3@2.6.3...2.7.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.7.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot force-pushed the dependabot/uv/urllib3-2.7.0 branch from c06c93f to 87ee531 Compare June 9, 2026 05:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants