From: 
Subject: Debian changes

The Debian packaging of pyrate-limiter is maintained in git, using a workflow
similar to the one described in dgit-maint-merge(7).
The Debian delta is represented by this one combined patch; there isn't a
patch queue that can be represented as a quilt series.

A detailed breakdown of the changes is available from their canonical
representation -- git commits in the packaging repository.
For example, to see the changes made by the Debian maintainer in the first
upload of upstream version 1.2.3, you could use:

    % git clone https://git.dgit.debian.org/pyrate-limiter
    % cd pyrate-limiter
    % git log --oneline 1.2.3..debian/1.2.3-1 -- . ':!debian'

(If you have dgit, use `dgit clone pyrate-limiter`, rather than plain `git clone`.)

We don't use debian/source/options single-debian-patch because it has bugs.
Therefore, NMUs etc. may nevertheless have made additional patches.

---

diff --git a/README.md b/README.md
index 18d915f..73ccdfc 100644
--- a/README.md
+++ b/README.md
@@ -120,41 +120,6 @@ limiter.try_acquire("my-resource")
 
 ## How it works
 
-```mermaid
-flowchart TB
-    user([Your application]):::ext
-    user -->|"limit a key: try_acquire · try_acquire_async · @as_decorator"| limiter
-
-    subgraph pyrate["PyrateLimiter"]
-        direction TB
-        limiter["Limiter<br/>public API"]:::api
-        factory["BucketFactory<br/>routes each key to its bucket"]:::core
-        leaker["Leaker<br/>background cleanup"]:::leak
-        clock(["Clock<br/>time source"]):::clk
-
-        limiter --> factory
-        factory -->|routes to| backends
-        leaker -.->|periodic leak| backends
-        backends -->|reads time from| clock
-
-        subgraph backends["Bucket backend — choose one"]
-            direction LR
-            mem["InMemory"]:::bkt
-            sqlite["SQLite"]:::bkt
-            redis["Redis<br/>sync · async"]:::bkt
-            pg["Postgres"]:::bkt
-            mp["Multiprocess"]:::bkt
-        end
-    end
-
-    classDef api fill:#E5484D,color:#ffffff,stroke:#E5484D;
-    classDef core fill:#242A33,color:#ffffff,stroke:#242A33;
-    classDef bkt fill:#EEF2F6,color:#242A33,stroke:#CBD5E1;
-    classDef clk fill:#ffffff,color:#242A33,stroke:#242A33;
-    classDef leak fill:#F2C94C,color:#242A33,stroke:#E0B53C;
-    classDef ext fill:#ffffff,color:#242A33,stroke:#9AA5B1;
-```
-
 **The bucket analogy** — a bucket represents a fixed capacity (a service, an API
 quota, …). It *fills* as requests arrive and *drains* over time. When the bucket
 is **full**, new requests are delayed (blocking) or rejected (non-blocking).
diff --git a/docs/conf.py b/docs/conf.py
index 2f08a67..874f854 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,7 +1,7 @@
 """Config file for Sphinx documentation"""
 
 import shutil
-from importlib.metadata import version as pkg_version
+import tomllib
 from pathlib import Path
 
 PROJECT_DIR = Path(__file__).parent.parent.absolute()
@@ -15,7 +15,11 @@ needs_sphinx = "4.0"
 source_suffix = [".rst", ".md"]
 templates_path = ["_templates"]
 project = "pyrate-limiter"
-version = release = version = pkg_version("pyrate-limiter")
+
+# Read version from pyproject.toml
+with open("../pyproject.toml", "rb") as f:
+    pyproject_data = tomllib.load(f)
+version = release = pyproject_data["project"]["version"]
 
 # Sphinx extensions
 extensions = [
@@ -26,7 +30,6 @@ extensions = [
     "sphinx_autodoc_typehints",
     "sphinx_copybutton",
     "sphinxcontrib.apidoc",
-    "sphinxcontrib.mermaid",
     "myst_parser",
 ]
 
@@ -34,9 +37,6 @@ suppress_warnings = ["ref.ref", "duplicate.object", "ref.python"]
 
 myst_enable_extensions = ["html_image"]
 myst_heading_anchors = 6
-# Render ```mermaid fenced blocks (from the included README) as diagrams
-# instead of failing under -W with an unknown-lexer warning.
-myst_fence_as_directive = ["mermaid"]
 
 # Enable automatic links to other projects' Sphinx docs
 intersphinx_mapping = {
diff --git a/pyproject.toml b/pyproject.toml
index de057ea..fcb62a8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "pyrate-limiter"
-dynamic = ["version"]
+version = "REPLACE"
 description = "Python rate limiter with pluggable algorithms and backends"
 authors = [{ name = "vutr", email = "me@vutr.io" }]
 requires-python = ">=3.10"
@@ -112,12 +112,9 @@ output = 'test-reports/coverage.xml'
 context = 7
 
 [build-system]
-requires = ["hatchling", "uv-dynamic-versioning"]
+requires = ["hatchling"]
 build-backend = "hatchling.build"
 
-[tool.hatch.version]
-source = "uv-dynamic-versioning"
-
 [tool.hatch.build.targets.sdist]
 include = [
     "pyrate_limiter",
