verkit 0.3.1__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,3 +5,5 @@ __pycache__/
5
5
  dist/
6
6
  build/
7
7
  *.egg-info/
8
+ .task-agent/
9
+ docs/tasks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verkit
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: Polyglot project version inspector, promoter, tagger, and release workflow engine
5
5
  Author: Mark Stouffer
6
6
  License: MIT
@@ -40,9 +40,23 @@ uv add verkit
40
40
  ## CLI Usage
41
41
 
42
42
  ### Inspect version info
43
- Inspect current working tree and HEAD committed versions:
43
+ Inspect current running version, PyPI version, and local project version:
44
44
  ```bash
45
45
  verkit inspect
46
+ # or alias:
47
+ verkit version
48
+ # or flag:
49
+ verkit --version
50
+ ```
51
+
52
+ ### Self-upgrade / Sync to local dev checkout
53
+ Sync active virtualenv to local `~/repos/verkit` dev source (or upgrade from PyPI):
54
+ ```bash
55
+ verkit self-up
56
+ # or
57
+ verkit version up
58
+ # or force latest from PyPI:
59
+ verkit self-up --pypi
46
60
  ```
47
61
 
48
62
  ### Promote version
@@ -128,7 +142,9 @@ $theme = Invoke-RestMethod `
128
142
  ## For AI Agents
129
143
 
130
144
  Projects that depend on `verkit` should follow its conventions: vim-style
131
- navigation (`from verkit.keys import VIM_BINDINGS`), the shared theme, and a
145
+ navigation (`from verkit.keys import VIM_BINDINGS`), the shared theme, the
146
+ visual style rules (no borders — prefer color and formatting; no buttons —
147
+ prefer keyboard-driven design with `BINDINGS` shown in the `Footer`), and a
132
148
  `mise`-only local dev override (PyPI release everywhere else).
133
149
 
134
150
  ```bash
@@ -30,9 +30,23 @@ uv add verkit
30
30
  ## CLI Usage
31
31
 
32
32
  ### Inspect version info
33
- Inspect current working tree and HEAD committed versions:
33
+ Inspect current running version, PyPI version, and local project version:
34
34
  ```bash
35
35
  verkit inspect
36
+ # or alias:
37
+ verkit version
38
+ # or flag:
39
+ verkit --version
40
+ ```
41
+
42
+ ### Self-upgrade / Sync to local dev checkout
43
+ Sync active virtualenv to local `~/repos/verkit` dev source (or upgrade from PyPI):
44
+ ```bash
45
+ verkit self-up
46
+ # or
47
+ verkit version up
48
+ # or force latest from PyPI:
49
+ verkit self-up --pypi
36
50
  ```
37
51
 
38
52
  ### Promote version
@@ -118,7 +132,9 @@ $theme = Invoke-RestMethod `
118
132
  ## For AI Agents
119
133
 
120
134
  Projects that depend on `verkit` should follow its conventions: vim-style
121
- navigation (`from verkit.keys import VIM_BINDINGS`), the shared theme, and a
135
+ navigation (`from verkit.keys import VIM_BINDINGS`), the shared theme, the
136
+ visual style rules (no borders — prefer color and formatting; no buttons —
137
+ prefer keyboard-driven design with `BINDINGS` shown in the `Footer`), and a
122
138
  `mise`-only local dev override (PyPI release everywhere else).
123
139
 
124
140
  ```bash
verkit-0.3.2/llms.txt ADDED
@@ -0,0 +1,22 @@
1
+ # verkit
2
+
3
+ > Polyglot project version inspector, promoter, tagger and release CLI, plus the shared Rich theme and vim-style Textual key conventions for the author's Python TUIs. If your project depends on verkit, read the conventions guide first.
4
+
5
+ ## Dev vs. Released Verkit (mise standard)
6
+ - **Local machine with `~/repos/verkit`**: run the local dev source in development (`uv pip install -e ~/repos/verkit`).
7
+ - **Everywhere else (CI, Docker, end-users)**: install the published package from PyPI (`pyproject.toml` declares a plain dependency `"verkit"`). Never add path/editable dependencies to `pyproject.toml`.
8
+ - **Mise template**: Run `verkit init-agent --mise` in a consumer project to write `mise.toml` which sets `VERKIT_DEV = "~/repos/verkit"` and overrides `mise run install` to install local editable source if present.
9
+ - **Inspect**: Run `verkit inspect` (or `verkit version`) to display whether the running verkit is from local dev source or PyPI.
10
+ - **Self-update**: Run `verkit self-up` (or `verkit version up`) to sync/upgrade verkit in the active venv.
11
+
12
+ ## Agent guidance
13
+ - [Conventions guide](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/agent_guide.md): vim navigation, theme, style rules (no borders — color and formatting instead; no buttons — keyboard-driven BINDINGS + Footer), mise dev-vs-PyPI rule. Also `verkit conventions [--json]`.
14
+ - [AGENTS.md](https://raw.githubusercontent.com/bizkite-co/verkit/main/AGENTS.md): working on verkit itself.
15
+
16
+ ## Code
17
+ - [keys.py](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/keys.py): `VIM_BINDINGS` for Textual `BINDINGS`.
18
+ - [theme.py](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/theme.py): shared Rich theme.
19
+ - [theme.json](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/theme.json): theme for non-Python consumers.
20
+
21
+ ## Optional
22
+ - [README](https://raw.githubusercontent.com/bizkite-co/verkit/main/README.md): CLI and API usage.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "verkit"
7
- version = "0.3.1"
7
+ version = "0.3.2"
8
8
  description = "Polyglot project version inspector, promoter, tagger, and release workflow engine"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -19,6 +19,9 @@ dependencies = [
19
19
  [project.scripts]
20
20
  verkit = "verkit.cli:main"
21
21
 
22
+ [dependency-groups]
23
+ dev = ["pytest"]
24
+
22
25
  [tool.pytest.ini_options]
23
26
  testpaths = ["tests"]
24
27
  pythonpath = ["src"]
@@ -13,11 +13,13 @@ MARKER = "<!-- verkit:agent-guide -->"
13
13
  SNIPPET = f"""{MARKER}
14
14
  ## verkit conventions
15
15
 
16
- This project depends on `verkit`. Before touching TUI, theme, or dev-setup
17
- code, run `verkit conventions` (or read `verkit/agent_guide.md` in the
18
- installed package). Key rules: vim-style navigation via
19
- `verkit.keys.VIM_BINDINGS`, shared theme via `verkit.theme`, and local verkit
20
- dev override through `mise` only (never in `pyproject.toml`).
16
+ This project depends on `verkit`. Before touching TUI, theme, style, or
17
+ dev-setup code, run `verkit conventions` (or read `verkit/agent_guide.md` in
18
+ the installed package). Key rules: vim-style navigation via
19
+ `verkit.keys.VIM_BINDINGS`, shared theme via `verkit.theme`, no borders (color
20
+ and formatting instead), no buttons (keyboard-driven `BINDINGS` + `Footer`
21
+ instead), and local verkit dev override through `mise` only (never in
22
+ `pyproject.toml`).
21
23
  """
22
24
 
23
25
  MISE_TEMPLATE = """# Generated by `verkit init-agent --mise`.
@@ -46,6 +48,12 @@ def conventions_json() -> str:
46
48
  ],
47
49
  "import": "from verkit.keys import VIM_BINDINGS",
48
50
  "theme_import": "from verkit.theme import DEFAULT as theme",
51
+ "style_rules": {
52
+ "borders": "never; borderless tables (box=None) and theme.panel_box "
53
+ "only — structure with color, weight, and whitespace",
54
+ "buttons": "never; keyboard-driven design — every action in BINDINGS "
55
+ "(from verkit.keys import VIM_BINDINGS), shown in the Footer",
56
+ },
49
57
  "dev_override": "mise.toml only; never pyproject.toml",
50
58
  "guide": guide_text(),
51
59
  },
@@ -40,7 +40,30 @@ from verkit.theme import DEFAULT as theme
40
40
 
41
41
  Machine-readable mirror for non-Python consumers: `theme.json` in the package.
42
42
 
43
- ## 3. Dev vs. released verkit (mise)
43
+ ## 3. Visual style: color and formatting, not borders; keys, not buttons
44
+
45
+ **Never draw borders.** Do not frame content with boxes — structure output with
46
+ color, weight, and whitespace instead:
47
+
48
+ - Tables are borderless: `box=None` with a subtle header band
49
+ (`theme.header_style`, `on grey23`) and `theme.table_padding` — exactly what
50
+ `verkit.theme.DEFAULT` yields. Never pass a visible `box=` to a `Table`.
51
+ - Avoid `Panel` entirely. If a container is genuinely unavoidable, use
52
+ `theme.panel_box` (Rich `MINIMAL`) and nothing heavier.
53
+ - Emphasize and group with theme styles (bold/dim/italic, foreground and
54
+ background color, indentation, blank lines, `console.rule`). No ASCII-art
55
+ frames (`+---+`) and no heavy Rich `box.*` constants.
56
+
57
+ **Never use buttons.** Design keyboard-first; there are no click-only actions:
58
+
59
+ - Every action is a key binding: build `App.BINDINGS` (or widget `BINDINGS`)
60
+ from `VIM_BINDINGS` (section 1) plus app-specific keys, and display them in
61
+ the `Footer`.
62
+ - Prompt with keys, not widgets: "press `s` to save", never a `Save` button
63
+ (`from textual.widgets import Button` is a lint-grade violation).
64
+ - Mouse support may exist incidentally, but no feature may require a click.
65
+
66
+ ## 4. Dev vs. released verkit (mise)
44
67
 
45
68
  Rule: **in the local checkout, run the local verkit source; everywhere else
46
69
  (CI, Docker, end users) install the latest release from PyPI.**
@@ -51,11 +74,12 @@ Rule: **in the local checkout, run the local verkit source; everywhere else
51
74
  the local verkit checkout does not exist. Generate it with
52
75
  `verkit init-agent --mise`. It sets `VERKIT_DEV` (default
53
76
  `~/repos/verkit`) and installs it editable after `uv sync`.
54
- - Use `mise run install` (not bare `uv sync`), and run tools with
77
+ - Use `mise run install` (or `verkit self-up`), and run tools with
55
78
  `UV_NO_SYNC=1` (set by the mise template) so uv does not replace the
56
79
  editable install with the PyPI release.
80
+ - Inspect whether running source is dev or PyPI via `verkit inspect` (or `verkit version`).
57
81
 
58
- ## 4. Agent-friendly CLI
82
+ ## 5. Agent-friendly CLI
59
83
 
60
84
  - `verkit conventions [--json]` prints this guide (or structured JSON).
61
85
  - `verkit init-agent [--mise] [--dir PATH]` adds a pointer to this guide in the
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
  from rich.console import Console
6
6
 
7
7
  from verkit.agent import conventions_json, guide_text, init_agent
8
- from verkit.inspector import display_version_info
8
+ from verkit.inspector import display_version_info, get_installed_version, self_up
9
9
  from verkit.promoter import promote_version
10
10
  from verkit.tagger import release_version, tag_version
11
11
 
@@ -15,11 +15,23 @@ def main():
15
15
  prog="verkit",
16
16
  description="Polyglot project version inspector, promoter, tagger, and release workflow tool",
17
17
  )
18
+ parser.add_argument(
19
+ "-v", "--version", action="store_true", help="Show version and exit"
20
+ )
18
21
  subparsers = parser.add_subparsers(dest="command", help="Subcommand to run")
19
22
 
20
- # verkit inspect
23
+ # verkit inspect / verkit version [up]
21
24
  subparsers.add_parser("inspect", help="Inspect working tree and HEAD version")
22
25
 
26
+ ver_p = subparsers.add_parser("version", help="Show version info (alias for inspect)")
27
+ ver_sub = ver_p.add_subparsers(dest="version_action")
28
+ ver_up = ver_sub.add_parser("up", help="Upgrade verkit (to local dev if present, else PyPI)")
29
+ ver_up.add_argument("--pypi", action="store_true", help="Force upgrade from PyPI even if local dev checkout exists")
30
+
31
+ # verkit self-up [--pypi]
32
+ selfup_p = subparsers.add_parser("self-up", help="Upgrade verkit (to local dev if present, else PyPI)")
33
+ selfup_p.add_argument("--pypi", action="store_true", help="Force upgrade from PyPI even if local dev checkout exists")
34
+
23
35
  # verkit promote <major|minor|patch>
24
36
  promote_p = subparsers.add_parser("promote", help="Bump version and commit/amend")
25
37
  promote_p.add_argument("part", choices=["major", "minor", "patch"])
@@ -61,10 +73,21 @@ def main():
61
73
  args = parser.parse_args()
62
74
  console = Console()
63
75
 
64
- if not args.command or args.command == "inspect":
76
+ if args.version:
77
+ console.print(f"verkit {get_installed_version('verkit')}")
78
+ return
79
+
80
+ if not args.command or args.command in ("inspect", "version"):
81
+ if getattr(args, "version_action", None) == "up":
82
+ self_up(console, pypi=getattr(args, "pypi", False))
83
+ return
65
84
  display_version_info(console, "verkit")
66
85
  return
67
86
 
87
+ if args.command == "self-up":
88
+ self_up(console, pypi=getattr(args, "pypi", False))
89
+ return
90
+
68
91
  try:
69
92
  if args.command == "conventions":
70
93
  print(conventions_json() if args.json else guide_text())
@@ -3,6 +3,7 @@ import json
3
3
  import os
4
4
  import re
5
5
  import subprocess
6
+ import sys
6
7
  import urllib.request
7
8
  from dataclasses import dataclass
8
9
  from pathlib import Path
@@ -19,6 +20,91 @@ def get_installed_version(package_name: str) -> str:
19
20
  return "unknown"
20
21
 
21
22
 
23
+ def get_package_origin(package_name: str) -> dict:
24
+ """Determine whether the package is running as editable dev checkout or from PyPI."""
25
+ try:
26
+ dist = importlib.metadata.distribution(package_name)
27
+ direct_url_raw = dist.read_text("direct_url.json")
28
+ if direct_url_raw:
29
+ data = json.loads(direct_url_raw)
30
+ url = data.get("url", "")
31
+ editable = bool(data.get("dir_info", {}).get("editable", False))
32
+ path_str = url.removeprefix("file://")
33
+ return {
34
+ "is_editable": editable,
35
+ "url": url,
36
+ "path": path_str,
37
+ "source": "local-dev" if editable else "wheel",
38
+ }
39
+ except Exception:
40
+ pass
41
+
42
+ try:
43
+ import sys
44
+
45
+ mod = sys.modules.get(package_name)
46
+ if mod and getattr(mod, "__file__", None):
47
+ f = str(mod.__file__)
48
+ if "site-packages" not in f:
49
+ return {
50
+ "is_editable": True,
51
+ "url": f"file://{f}",
52
+ "path": f,
53
+ "source": "local-dev",
54
+ }
55
+ except Exception:
56
+ pass
57
+
58
+ return {
59
+ "is_editable": False,
60
+ "url": "",
61
+ "path": "",
62
+ "source": "pypi",
63
+ }
64
+
65
+
66
+ def self_up(console: Console, *, pypi: bool = False) -> None:
67
+ """Sync/upgrade verkit in the active environment.
68
+
69
+ If ~/repos/verkit (or $VERKIT_DEV) exists and not --pypi:
70
+ Installs the local dev checkout in editable mode.
71
+ Else:
72
+ Upgrades to the latest release from PyPI.
73
+ """
74
+ dev_path = Path(os.environ.get("VERKIT_DEV", Path.home() / "repos" / "verkit"))
75
+
76
+ if not pypi and dev_path.is_dir():
77
+ console.print(f"[blue]Installing local dev checkout from {dev_path}...[/blue]")
78
+ res = subprocess.run(
79
+ ["uv", "pip", "install", "-e", str(dev_path)],
80
+ capture_output=True,
81
+ text=True,
82
+ check=False,
83
+ )
84
+ if res.returncode != 0:
85
+ console.print(
86
+ f"[red]Failed to install local checkout: {res.stderr or res.stdout}[/red]"
87
+ )
88
+ sys.exit(1)
89
+ console.print(
90
+ f"[bold green]Successfully installed verkit from local checkout: {dev_path}[/bold green]"
91
+ )
92
+ else:
93
+ console.print("[blue]Upgrading verkit from PyPI...[/blue]")
94
+ res = subprocess.run(
95
+ ["uv", "pip", "install", "--upgrade", "verkit"],
96
+ capture_output=True,
97
+ text=True,
98
+ check=False,
99
+ )
100
+ if res.returncode != 0:
101
+ console.print(
102
+ f"[red]Failed to upgrade verkit from PyPI: {res.stderr or res.stdout}[/red]"
103
+ )
104
+ sys.exit(1)
105
+ console.print("[bold green]Successfully upgraded verkit from PyPI.[/bold green]")
106
+
107
+
22
108
  def get_latest_pypi_version(package_name: str, timeout: int = 4) -> Optional[str]:
23
109
  """Fetch the latest version of a package from PyPI."""
24
110
  url = f"https://pypi.org/pypi/{package_name}/json"
@@ -38,14 +124,25 @@ def display_version_info(
38
124
  ):
39
125
  """Display running, PyPI, and local project version information."""
40
126
  tool_v = get_installed_version(package_name)
41
- console.print(f"[bold blue]Running version:[/bold blue] {tool_v}")
127
+ origin = get_package_origin(package_name)
128
+
129
+ if origin["is_editable"]:
130
+ src_desc = origin["path"] or origin["url"]
131
+ console.print(
132
+ f"[bold blue]Running version:[/bold blue] {tool_v} "
133
+ f"[bold green](local dev checkout: {src_desc})[/bold green]"
134
+ )
135
+ else:
136
+ console.print(
137
+ f"[bold blue]Running version:[/bold blue] {tool_v} [dim](PyPI release)[/dim]"
138
+ )
42
139
 
43
140
  latest_v = get_latest_pypi_version(package_name)
44
141
  if latest_v:
45
- if latest_v != tool_v:
142
+ if latest_v != tool_v and not origin["is_editable"]:
46
143
  console.print(f"[bold yellow]Latest PyPI version:[/bold yellow] {latest_v}")
47
- if upgrade_cmd:
48
- console.print(f"[dim]Run [bold]{upgrade_cmd}[/bold] to upgrade.[/dim]")
144
+ cmd = upgrade_cmd or "verkit self-up --pypi"
145
+ console.print(f"[dim]Run [bold]{cmd}[/bold] to upgrade.[/dim]")
49
146
  else:
50
147
  console.print(f"[dim]Latest PyPI version:[/dim] {latest_v} (up to date)")
51
148
 
@@ -58,6 +155,13 @@ def display_version_info(
58
155
  except Exception:
59
156
  pass
60
157
 
158
+ dev_path = Path(os.environ.get("VERKIT_DEV", Path.home() / "repos" / package_name))
159
+ if not origin["is_editable"] and dev_path.is_dir():
160
+ console.print(
161
+ f"[dim]Note: Local dev checkout exists at {dev_path}. "
162
+ "Run [bold]mise run install[/bold] or [bold]verkit self-up[/bold] to use local dev source.[/dim]"
163
+ )
164
+
61
165
 
62
166
  @dataclass
63
167
  class VersionInfo:
@@ -77,16 +77,22 @@ def _can_amend_version_safely(git_root: Path) -> Tuple[bool, str]:
77
77
 
78
78
  def _stage_version_files(git_root: Path, project_root: Path) -> List[str]:
79
79
  staged: List[str] = []
80
+ found_any = False
80
81
  for name in _VERSION_FILES:
81
82
  target = project_root / name
82
83
  if target.exists():
84
+ found_any = True
83
85
  res = _git("add", str(target), cwd=git_root)
84
- if res.returncode == 0:
85
- try:
86
- rel = str(target.relative_to(git_root))
87
- except ValueError:
88
- rel = name
89
- staged.append(rel)
86
+ if res.returncode != 0:
87
+ err = (res.stderr or res.stdout or "").strip()
88
+ raise RuntimeError(f"Failed to stage {name}: {err}")
89
+ try:
90
+ rel = str(target.relative_to(git_root))
91
+ except ValueError:
92
+ rel = name
93
+ staged.append(rel)
94
+ if not found_any:
95
+ raise RuntimeError("No version files found to stage after bump.")
90
96
  return staged
91
97
 
92
98
 
@@ -9,6 +9,13 @@ def test_guide_mentions_bindings_and_mise():
9
9
  assert "VIM_BINDINGS" in g and "mise" in g
10
10
 
11
11
 
12
+ def test_guide_style_rules():
13
+ g = guide_text()
14
+ assert "Never draw borders" in g and "borderless" in g
15
+ assert "Never use buttons" in g and "Button" in g
16
+ assert "Footer" in g
17
+
18
+
12
19
  def test_bindings_shape_and_vim_keys():
13
20
  assert all(len(b) == 3 for b in VIM_BINDINGS)
14
21
  assert {"j", "k", "h", "l"} <= {b[0] for b in VIM_BINDINGS}
@@ -17,6 +24,7 @@ def test_bindings_shape_and_vim_keys():
17
24
  def test_json_output():
18
25
  data = json.loads(conventions_json())
19
26
  assert data["vim_bindings"][0]["key"] == "j"
27
+ assert "borders" in data["style_rules"] and "buttons" in data["style_rules"]
20
28
 
21
29
 
22
30
  def test_init_agent_idempotent_and_no_clobber(tmp_path):
@@ -1,4 +1,4 @@
1
- from verkit.inspector import inspect_project
1
+ from verkit.inspector import get_package_origin, inspect_project
2
2
 
3
3
  def test_inspect_python_project(tmp_path):
4
4
  pyproject = tmp_path / "pyproject.toml"
@@ -18,3 +18,13 @@ def test_inspect_unknown_project(tmp_path):
18
18
  info = inspect_project(tmp_path)
19
19
  assert info.version == "unknown"
20
20
  assert info.source is None
21
+
22
+ def test_get_package_origin_unknown():
23
+ origin = get_package_origin("nonexistent_package_xyz123")
24
+ assert origin["is_editable"] is False
25
+ assert origin["source"] == "pypi"
26
+
27
+ def test_get_package_origin_verkit():
28
+ origin = get_package_origin("verkit")
29
+ assert isinstance(origin["is_editable"], bool)
30
+ assert origin["source"] in ("local-dev", "wheel", "pypi")
@@ -0,0 +1,37 @@
1
+ import subprocess
2
+
3
+ import pytest
4
+
5
+ from verkit.promoter import _increment_semver, _stage_version_files
6
+
7
+
8
+ def test_increment_semver():
9
+ assert _increment_semver("0.1.0", "patch") == "0.1.1"
10
+ assert _increment_semver("0.1.0", "minor") == "0.2.0"
11
+ assert _increment_semver("0.1.0", "major") == "1.0.0"
12
+ assert _increment_semver("1.2.3-rc1", "patch") == "1.2.4-rc1"
13
+
14
+ def test_stage_version_files_success(tmp_path):
15
+ subprocess.run(["git", "init"], cwd=tmp_path, check=True, capture_output=True)
16
+ pyproject = tmp_path / "pyproject.toml"
17
+ pyproject.write_text('[project]\nversion = "0.1.0"\n')
18
+ staged = _stage_version_files(tmp_path, tmp_path)
19
+ assert staged == ["pyproject.toml"]
20
+
21
+ def test_stage_version_files_no_files(tmp_path):
22
+ subprocess.run(["git", "init"], cwd=tmp_path, check=True, capture_output=True)
23
+ with pytest.raises(RuntimeError, match="No version files found"):
24
+ _stage_version_files(tmp_path, tmp_path)
25
+
26
+ def test_stage_version_files_git_error(tmp_path, monkeypatch):
27
+ subprocess.run(["git", "init"], cwd=tmp_path, check=True, capture_output=True)
28
+ pyproject = tmp_path / "pyproject.toml"
29
+ pyproject.write_text('[project]\nversion = "0.1.0"\n')
30
+
31
+ # Create index.lock to simulate lock error
32
+ lock = tmp_path / ".git" / "index.lock"
33
+ lock.write_text("")
34
+
35
+ with pytest.raises(RuntimeError, match="Failed to stage pyproject.toml"):
36
+ _stage_version_files(tmp_path, tmp_path)
37
+
verkit-0.3.2/uv.lock ADDED
@@ -0,0 +1,290 @@
1
+ version = 1
2
+ revision = 5
3
+ requires-python = ">=3.9"
4
+ resolution-markers = [
5
+ "python_full_version >= '3.10'",
6
+ "python_full_version < '3.10'",
7
+ ]
8
+
9
+ [[package]]
10
+ name = "colorama"
11
+ version = "0.4.6"
12
+ source = { registry = "https://pypi.org/simple" }
13
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
14
+ wheels = [
15
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
16
+ ]
17
+
18
+ [[package]]
19
+ name = "exceptiongroup"
20
+ version = "1.3.1"
21
+ source = { registry = "https://pypi.org/simple" }
22
+ dependencies = [
23
+ { name = "typing-extensions" },
24
+ ]
25
+ sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
26
+ wheels = [
27
+ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
28
+ ]
29
+
30
+ [[package]]
31
+ name = "iniconfig"
32
+ version = "2.1.0"
33
+ source = { registry = "https://pypi.org/simple" }
34
+ resolution-markers = [
35
+ "python_full_version < '3.10'",
36
+ ]
37
+ sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" }
38
+ wheels = [
39
+ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" },
40
+ ]
41
+
42
+ [[package]]
43
+ name = "iniconfig"
44
+ version = "2.3.1"
45
+ source = { registry = "https://pypi.org/simple" }
46
+ resolution-markers = [
47
+ "python_full_version >= '3.10'",
48
+ ]
49
+ sdist = { url = "https://files.pythonhosted.org/packages/01/e1/2069291243c926a2ff1cd706c7f3eeb9b62144bf60f77c9fb9ff2fb26bd3/iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960", size = 21209, upload-time = "2026-10-06T22:48:38.076Z" }
50
+ wheels = [
51
+ { url = "https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7", size = 7552, upload-time = "2026-10-06T22:48:36.959Z" },
52
+ ]
53
+
54
+ [[package]]
55
+ name = "markdown-it-py"
56
+ version = "3.0.0"
57
+ source = { registry = "https://pypi.org/simple" }
58
+ resolution-markers = [
59
+ "python_full_version < '3.10'",
60
+ ]
61
+ dependencies = [
62
+ { name = "mdurl" },
63
+ ]
64
+ sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
65
+ wheels = [
66
+ { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
67
+ ]
68
+
69
+ [[package]]
70
+ name = "markdown-it-py"
71
+ version = "4.2.0"
72
+ source = { registry = "https://pypi.org/simple" }
73
+ resolution-markers = [
74
+ "python_full_version >= '3.10'",
75
+ ]
76
+ dependencies = [
77
+ { name = "mdurl" },
78
+ ]
79
+ sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
80
+ wheels = [
81
+ { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
82
+ ]
83
+
84
+ [[package]]
85
+ name = "mdurl"
86
+ version = "0.1.2"
87
+ source = { registry = "https://pypi.org/simple" }
88
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
89
+ wheels = [
90
+ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
91
+ ]
92
+
93
+ [[package]]
94
+ name = "packaging"
95
+ version = "26.3"
96
+ source = { registry = "https://pypi.org/simple" }
97
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" }
98
+ wheels = [
99
+ { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" },
100
+ ]
101
+
102
+ [[package]]
103
+ name = "pluggy"
104
+ version = "1.6.0"
105
+ source = { registry = "https://pypi.org/simple" }
106
+ resolution-markers = [
107
+ "python_full_version < '3.10'",
108
+ ]
109
+ sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
110
+ wheels = [
111
+ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
112
+ ]
113
+
114
+ [[package]]
115
+ name = "pluggy"
116
+ version = "1.7.0"
117
+ source = { registry = "https://pypi.org/simple" }
118
+ resolution-markers = [
119
+ "python_full_version >= '3.10'",
120
+ ]
121
+ sdist = { url = "https://files.pythonhosted.org/packages/bf/db/7fc19e6f2dc92a966727031389fc2e08b558f0f25eb7403c1119ad4713cd/pluggy-1.7.0.tar.gz", hash = "sha256:d1eaa46ebb595891b860ab086b4d09c8588af65ebd4361b8e8f4bb8920b90ba8", size = 123304, upload-time = "2026-10-15T09:50:58.343Z" }
122
+ wheels = [
123
+ { url = "https://files.pythonhosted.org/packages/40/9e/2b38731e0fc536806f16490e1a12d7f0dc2a1235aa8cc07bcc75416a7daa/pluggy-1.7.0-py3-none-any.whl", hash = "sha256:7dd7b0d8832ba3cb632c306926ded123429211b83641b35dc5c41ad2d34f9bec", size = 27082, upload-time = "2026-10-15T09:50:56.808Z" },
124
+ ]
125
+
126
+ [[package]]
127
+ name = "pygments"
128
+ version = "2.20.0"
129
+ source = { registry = "https://pypi.org/simple" }
130
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
131
+ wheels = [
132
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
133
+ ]
134
+
135
+ [[package]]
136
+ name = "pytest"
137
+ version = "8.4.2"
138
+ source = { registry = "https://pypi.org/simple" }
139
+ resolution-markers = [
140
+ "python_full_version < '3.10'",
141
+ ]
142
+ dependencies = [
143
+ { name = "colorama", marker = "sys_platform == 'win32'" },
144
+ { name = "exceptiongroup" },
145
+ { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" } },
146
+ { name = "packaging" },
147
+ { name = "pluggy", version = "1.6.0", source = { registry = "https://pypi.org/simple" } },
148
+ { name = "pygments" },
149
+ { name = "tomli" },
150
+ ]
151
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" }
152
+ wheels = [
153
+ { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" },
154
+ ]
155
+
156
+ [[package]]
157
+ name = "pytest"
158
+ version = "9.2.0"
159
+ source = { registry = "https://pypi.org/simple" }
160
+ resolution-markers = [
161
+ "python_full_version >= '3.10'",
162
+ ]
163
+ dependencies = [
164
+ { name = "colorama", marker = "sys_platform == 'win32'" },
165
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
166
+ { name = "iniconfig", version = "2.3.1", source = { registry = "https://pypi.org/simple" } },
167
+ { name = "packaging" },
168
+ { name = "pluggy", version = "1.7.0", source = { registry = "https://pypi.org/simple" } },
169
+ { name = "pygments" },
170
+ { name = "tomli", marker = "python_full_version < '3.11'" },
171
+ ]
172
+ sdist = { url = "https://files.pythonhosted.org/packages/79/42/bb4641652e58dedeac2ec51abc1f8cae4fee4ec63899a0999016229a0f2a/pytest-9.2.0.tar.gz", hash = "sha256:97c4f3b1f3c7414aa36465e09b8220f1d03627993bd51b1282e193753c80557b", size = 1797555, upload-time = "2026-10-27T21:30:20.728Z" }
173
+ wheels = [
174
+ { url = "https://files.pythonhosted.org/packages/51/39/1f5d8c8877a0fa327db959c19341d4be61660de1ab6b7391f9eb805bcd67/pytest-9.2.0-py3-none-any.whl", hash = "sha256:07acdcf88ec174f907dc01af70bf52d49b014bbab03faeeade31c96b18c2e588", size = 411776, upload-time = "2026-10-27T21:30:19.131Z" },
175
+ ]
176
+
177
+ [[package]]
178
+ name = "rich"
179
+ version = "15.0.0"
180
+ source = { registry = "https://pypi.org/simple" }
181
+ dependencies = [
182
+ { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
183
+ { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
184
+ { name = "pygments" },
185
+ ]
186
+ sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
187
+ wheels = [
188
+ { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
189
+ ]
190
+
191
+ [[package]]
192
+ name = "tomli"
193
+ version = "2.5.0"
194
+ source = { registry = "https://pypi.org/simple" }
195
+ sdist = { url = "https://files.pythonhosted.org/packages/b0/78/9ad63712633ed3ab5cc1a648d863d7e7da371e9425e209555a0fe711b695/tomli-2.5.0.tar.gz", hash = "sha256:264507556cd8b8c8e7c6ee037cdf443a463f03f4c958e57195e3d369711b8ff6", size = 17662, upload-time = "2026-10-07T12:23:37.892Z" }
196
+ wheels = [
197
+ { url = "https://files.pythonhosted.org/packages/22/a6/ab99b60ee52acd949684febabc3005d0045d0f66bebd9cdebd67372d26dd/tomli-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4dc1c1781f2f716de763d1e9a7b34c6a894e167e291c7c5d16c72f7a9538545", size = 163901, upload-time = "2026-10-07T12:22:15.601Z" },
198
+ { url = "https://files.pythonhosted.org/packages/bc/00/ee01b7ed4579180fff07142d290257f25ba786f23f3ec6005f620933c2f5/tomli-2.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eff8babca5a7999bc137acbc7482a8b7e17ffca5075ab41f5d770ab408c7bfef", size = 163756, upload-time = "2026-10-07T12:22:16.957Z" },
199
+ { url = "https://files.pythonhosted.org/packages/72/c2/4efebf65372f6583185f79799312109dddb61102d47e5c33dcfd1a297aca/tomli-2.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86665cee9c4835b7a7f1e8ec2c719b5258d4dc782887aded5a8ae7352a96843b", size = 268038, upload-time = "2026-10-07T12:22:18.135Z" },
200
+ { url = "https://files.pythonhosted.org/packages/53/07/5850468e925d898abb36038666f9c333a94d2a223e802a8ba5b6d319d23f/tomli-2.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e369fd63331746182360977b1892bfc215476a30d61612d732425311639f56", size = 276422, upload-time = "2026-10-07T12:22:19.567Z" },
201
+ { url = "https://files.pythonhosted.org/packages/b4/87/f293984cdcf83c054196d4fd3dad44fc68ae55b4b8c44bc76cef360c3150/tomli-2.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ad1ea345759240d6463efa0ed1c704402752e49aa21476620738d74d72d8aa1", size = 272616, upload-time = "2026-10-07T12:22:20.794Z" },
202
+ { url = "https://files.pythonhosted.org/packages/ce/ce/db582886b3c1219d3fec93ebd669332482e5aee7a91e0f7838d84f2d1759/tomli-2.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:96243987194634bd411066ce40c952e108f86af04db533ecd8ac3ff2a85b1885", size = 276593, upload-time = "2026-10-07T12:22:22.12Z" },
203
+ { url = "https://files.pythonhosted.org/packages/bf/72/7619b87dea4261fc27dd7b54c4461c129c1f7d9bb7ba3aec89c797a431b8/tomli-2.5.0-cp311-cp311-win32.whl", hash = "sha256:610b27d99f28ec5f191c7064a48f3ddb179a1fe6ca73d571483ae859f57b605e", size = 101830, upload-time = "2026-10-07T12:22:23.651Z" },
204
+ { url = "https://files.pythonhosted.org/packages/1e/74/220106da34502304b6751a2a9b8a9fbca6c3fd47e737a2e2e3da7c61c9db/tomli-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:c804ae44fe7b4bab5da295e4f980a1ff04670bca9d23fe0a4e887e08ebd741a8", size = 112742, upload-time = "2026-10-07T12:22:24.972Z" },
205
+ { url = "https://files.pythonhosted.org/packages/27/99/7d9c8b41837a7773613e169504147375c157a290167aa59ad74a085f521f/tomli-2.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:cfac177ebd6236003846ea339981f71457cb6eb748f23381eb257e45092e3980", size = 109332, upload-time = "2026-10-07T12:22:26.117Z" },
206
+ { url = "https://files.pythonhosted.org/packages/52/ed/7baa86f87493646a594de388c7c1c40a39dd0461f7e9c0359cbeefc91fe8/tomli-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f4a40d03fb9f63424f0979855bdeaf44dd7696b8d59501822c10ed30ba532df", size = 164854, upload-time = "2026-10-07T12:22:27.444Z" },
207
+ { url = "https://files.pythonhosted.org/packages/a5/b1/44c0341f2224397855723c7a8a39f718ea6fcbcc3dacc66e5aeca0f334e3/tomli-2.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ebf8d19b17bd0daeb7b7dec81a946a439b753942fd0210d6e96c532249eea6b", size = 164074, upload-time = "2026-10-07T12:22:28.679Z" },
208
+ { url = "https://files.pythonhosted.org/packages/23/04/e2d5b7d3fba47adedb23de616c16d428ea076c79a3d8e1d95d649ffe197e/tomli-2.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf0b5e8e0f68ebb494356e577c06c139161efd8d3b9050f93b39b7c26cc54ff0", size = 274274, upload-time = "2026-10-07T12:22:29.804Z" },
209
+ { url = "https://files.pythonhosted.org/packages/43/90/6090e706ff27a6f89f4a40578e3324b95c3cd8c4150868aabf33a8f414c3/tomli-2.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cf74416bdc94ae458b14e37286c1073081850ac8459a00d0c5efef5d44294c6", size = 286435, upload-time = "2026-10-07T12:22:31.297Z" },
210
+ { url = "https://files.pythonhosted.org/packages/0a/9e/a2c40768df16c408f22430afb0a73e9d7e5f79c950884954649d1146b74d/tomli-2.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:61ea1ebe1e55a34ea8199cc8dbff398d35027b82271c8ac4802fd3a1fd5b1bcc", size = 278119, upload-time = "2026-10-07T12:22:32.601Z" },
211
+ { url = "https://files.pythonhosted.org/packages/12/25/3c0cb485b98e9cfac495629b1c93c87ccf0b72fbe9d2689fd8fe62c6d5a3/tomli-2.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed53f7e89bb04f6d9e8e7799112360b0c4d5cbff067de0814c98c37c39b920f7", size = 286177, upload-time = "2026-10-07T12:22:33.745Z" },
212
+ { url = "https://files.pythonhosted.org/packages/77/8b/0144c65f0e37e51c18d04ae15c21b19431c165002d0131fe9aa8b0b8b1e8/tomli-2.5.0-cp312-cp312-win32.whl", hash = "sha256:e7ad033e27a516a233bea839cdb77b80146facb3b4f40bf02cd0cac165cdd5c2", size = 102760, upload-time = "2026-10-07T12:22:34.887Z" },
213
+ { url = "https://files.pythonhosted.org/packages/de/32/5d6d8f42fc9a05fce69354e00ff256484192f5f2fc9a2165718fa0de61ec/tomli-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:bd05de8c1698f8413dd7d869492693a0bf2211543b787ac78cd5e7536af1a6d7", size = 112722, upload-time = "2026-10-07T12:22:36.162Z" },
214
+ { url = "https://files.pythonhosted.org/packages/30/65/df18032218db0fb9b769fb23c8039a051f15c811993995ea04c350273a32/tomli-2.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:069435bd5480429b98c5e5afb02ab21c219b6f0064680671c6dc0d46817346ea", size = 109534, upload-time = "2026-10-07T12:22:37.296Z" },
215
+ { url = "https://files.pythonhosted.org/packages/42/e5/51736d70da209350969e15aca5c5ab6e2ce1ea87a0a892a6c13aec172a86/tomli-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:943276cf269e0071948d9ff697159c1735e623c1151d88abb09b74659ef0cbea", size = 163328, upload-time = "2026-10-07T12:22:38.373Z" },
216
+ { url = "https://files.pythonhosted.org/packages/ec/55/086f80dab4ab497602644274e6dea7ec5dd0b4e262e443a8ad3bb7edee2d/tomli-2.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:463b16086865b97facd8d0b3fb4cb7c544e3f58d2a69dc3113d6db9653fdb043", size = 162246, upload-time = "2026-10-07T12:22:39.673Z" },
217
+ { url = "https://files.pythonhosted.org/packages/aa/eb/3ecc94459f3635c92321f4e7bde571323fdb2267c50e19e3188a281eae3b/tomli-2.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1245a6638fc4bb0a60af38a7d45413db34a13842027c77597c712c998c62fdf0", size = 272655, upload-time = "2026-10-07T12:22:41.08Z" },
218
+ { url = "https://files.pythonhosted.org/packages/c0/d7/494fd1f0c37a621f1ad9975c2efadb523e8101f144ed6edb2e7fe64738f2/tomli-2.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d8bac3d603c97e6854424e5b2b5b741bdbde387e09f162fb0446812b4a8362b", size = 283595, upload-time = "2026-10-07T12:22:42.222Z" },
219
+ { url = "https://files.pythonhosted.org/packages/70/51/bb8d62b1317e6640866f6949b2d5855e5300f2c99d46de1cd245570bba65/tomli-2.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:21e4cae4114aba25aa0d4f85cdf486d290fb35c0954d7bba536248da64d43066", size = 276253, upload-time = "2026-10-07T12:22:43.625Z" },
220
+ { url = "https://files.pythonhosted.org/packages/66/f4/f46bd7f0763cd47de2db697dca9257c6a4adfd1a93b018cc75c8190ed5a8/tomli-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bbaefc84548d754be821bba7c4141c4787dda182f9e77f2f87b71213529efa7b", size = 283582, upload-time = "2026-10-07T12:22:44.983Z" },
221
+ { url = "https://files.pythonhosted.org/packages/ac/03/70f2bcb2923a6db37818d917e124270a7f4cfd38ea576f5aa753a91c0ef5/tomli-2.5.0-cp313-cp313-win32.whl", hash = "sha256:abdbf6313b8d9efe157edeb7ab6eae4de064b1300ad31abf73755154b30abe68", size = 102628, upload-time = "2026-10-07T12:22:46.508Z" },
222
+ { url = "https://files.pythonhosted.org/packages/dc/98/d52024bb5b0ff68b4f0d276d867f634c84a67319a7e9f6b7708a37742333/tomli-2.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd4dc129784e0c5335bd4e61dfcc4487499a013419e655cf2da1d091b7e0efdc", size = 113301, upload-time = "2026-10-07T12:22:47.647Z" },
223
+ { url = "https://files.pythonhosted.org/packages/6f/f2/540db3a70572a8c23a28aba3e9c358ce0ffffbafc990905c1343aa265b31/tomli-2.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:69491c143d2fe063046e0301e62a810bed338fa4d1ce0fd870c27dc1e09b0d84", size = 109744, upload-time = "2026-10-07T12:22:48.925Z" },
224
+ { url = "https://files.pythonhosted.org/packages/e4/49/caf6b307766eb9567664a8707e9d6be5fcc0e8903f18781c6677a60d80c7/tomli-2.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d3182ee2d887e507bd67319a0a61105d1dd33facc111329559a233b772c1a105", size = 162899, upload-time = "2026-10-07T12:22:50.088Z" },
225
+ { url = "https://files.pythonhosted.org/packages/d3/c8/68cfce773a2733a49c74f99d627fb461bd990756860099eac25617889585/tomli-2.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:521345fd1f19d45b8df87657aaa38b6f2ca3800059fadf428e7ebf479a383646", size = 162080, upload-time = "2026-10-07T12:22:51.558Z" },
226
+ { url = "https://files.pythonhosted.org/packages/7e/b2/e5bb8651fdad593f670501a7d718b1a7f73f064d44dea15e04c04dfef45d/tomli-2.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e95c7614e705bfe2b04b27aa124adec59752d15813df37e2156747cab3a006b", size = 273380, upload-time = "2026-10-07T12:22:52.918Z" },
227
+ { url = "https://files.pythonhosted.org/packages/8d/d2/9e2d7f8b1dfe0e2b34c245986ebd55c4c553ea4ce6c47c443b332673253f/tomli-2.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ac2027d37c3afbdf4bdd377f2676f6f1d2122a5be1f1137b49dced590b37e75", size = 283228, upload-time = "2026-10-07T12:22:54.173Z" },
228
+ { url = "https://files.pythonhosted.org/packages/ba/df/ec7b876b7b1a2718bd74a3743c076fff565b04029ba33e8f61fac262739f/tomli-2.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c414be4ed9d3cac80c42e348fa5a956117d1a48227f48026e31f59cb4a7671eb", size = 277189, upload-time = "2026-10-07T12:22:55.342Z" },
229
+ { url = "https://files.pythonhosted.org/packages/7d/7b/e192d9eed0b9cb80da799f4d77052297fb9a2c3cc9b19f571f56ea88add6/tomli-2.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9b03d7dc168353b4132965bde20feceabaa470e570c6f59660dfae59b1f9eeb3", size = 283632, upload-time = "2026-10-07T12:22:56.735Z" },
230
+ { url = "https://files.pythonhosted.org/packages/84/50/ff94454e75461d75623e47401ed323d65c10aab8fe9033242c20cd2fdf32/tomli-2.5.0-cp314-cp314-win32.whl", hash = "sha256:6f041843c4d3a37245c0c056fd955b186bf8b1fb85690cbe40b81230891dc34b", size = 103535, upload-time = "2026-10-07T12:22:58.084Z" },
231
+ { url = "https://files.pythonhosted.org/packages/54/0b/bdacf05f963bd6026ebf6eeb0beda847d1d60e03e440725c64a4e08a0afd/tomli-2.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:f4b653094e18f9031102d3a1da5c729c8f222d85225b18037dac621695e46e1a", size = 114621, upload-time = "2026-10-07T12:22:59.2Z" },
232
+ { url = "https://files.pythonhosted.org/packages/61/99/53f438fa6ae4f9d4ed0ddde3e7242b3bdc34b48c8f9948b72b9e9b127676/tomli-2.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:3f89d10c1ff6a38d992c27fc8a4816af71a909e08a40ec66934240b1e74347c3", size = 111572, upload-time = "2026-10-07T12:23:00.479Z" },
233
+ { url = "https://files.pythonhosted.org/packages/b9/20/1f88f19427d380a40e90a770e087489eaafe4aeee070ae88ed2bbec00acd/tomli-2.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e9e15b4a6c7dd6b85b5fbab29488a73f1f70de516942308daa266bf0e0aeb0d4", size = 171814, upload-time = "2026-10-07T12:23:01.914Z" },
234
+ { url = "https://files.pythonhosted.org/packages/d0/56/cbe5079c9f9a54b9b3e27fc82f08f3cb36edee75561679f53d2380c801d6/tomli-2.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e12bbcd32897272fb05929110362ae9ff4c1b9bb26bd9e971e71dcd3275b4c3d", size = 171324, upload-time = "2026-10-07T12:23:03.18Z" },
235
+ { url = "https://files.pythonhosted.org/packages/2b/30/1d53fd3b0f1cb3ba542e345ec32c26aefdddc4e829e4f3429af8a4f27782/tomli-2.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20aa36de8f2cf87237143bc1fa1aae8d6612c09118f4da21c6a684db5dd1f6f9", size = 297441, upload-time = "2026-10-07T12:23:04.345Z" },
236
+ { url = "https://files.pythonhosted.org/packages/66/d9/0800acb6a111686f764c1b91ef15cc42a20a66a46013bb42220f1d2c61c1/tomli-2.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22185fad8a1e622f064e78008018a0dd3323550dcb479cb7a1d296888d74024f", size = 307476, upload-time = "2026-10-07T12:23:05.671Z" },
237
+ { url = "https://files.pythonhosted.org/packages/e8/63/30a8f3cd51b5bec37f04744bad0b0dc6160df84aad4f27b0e9283d66f221/tomli-2.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:984012f71908165449a951de2050d52f276bfe3aa5d5f570f63ddad814370374", size = 296113, upload-time = "2026-10-07T12:23:07.202Z" },
238
+ { url = "https://files.pythonhosted.org/packages/ab/18/0b9ffc597e69c5a1e20a7823cb60d54b39a9f54e91edcb8574f022186758/tomli-2.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f79203b3965b4000e91808aaa7c040206093f2b8bf86f455982f2274c9ccf442", size = 307725, upload-time = "2026-10-07T12:23:08.508Z" },
239
+ { url = "https://files.pythonhosted.org/packages/ab/c7/18f8baae0b5607a60e8e19b4a7fedee43a8ff6458e3896dcbbadeeac9c22/tomli-2.5.0-cp314-cp314t-win32.whl", hash = "sha256:91294a9fb94a75542f6e46e4a2ae709bd8d9b51134098cae5cf3bea5478b6d03", size = 108546, upload-time = "2026-10-07T12:23:09.956Z" },
240
+ { url = "https://files.pythonhosted.org/packages/72/34/4cca9739254130627bde87500b3f2b512154fe2f278efa7e2a5e10ad4bcb/tomli-2.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f15e3e0b835a6d68b10c86bf80a3149780498d6911c93c3ffd1861d19f9200f1", size = 117814, upload-time = "2026-10-07T12:23:11.486Z" },
241
+ { url = "https://files.pythonhosted.org/packages/7d/fb/afa530d47dd80a78fce43beac6bc6e00f84558eafcffbc6f37b21e80d056/tomli-2.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:6664b7ae7af7294256c53960a6103077f4914cec8ff98479c352f622c6f6b2f0", size = 115188, upload-time = "2026-10-07T12:23:12.728Z" },
242
+ { url = "https://files.pythonhosted.org/packages/66/98/316fdc00f8c0939e6fe50461dd343c162d3ad51d1286eb25b7db54361d50/tomli-2.5.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:a525685c2f97da40762b8695eb7aa0af4c8344ca1905c73e4e29cb04d34607dc", size = 162775, upload-time = "2026-10-07T12:23:13.941Z" },
243
+ { url = "https://files.pythonhosted.org/packages/c5/22/7b10fa5bb01c9539f53f69b619361b19350acc73657772ea7ac70ba309a8/tomli-2.5.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:9dbb18c1cfb2f6517942fc9314437f66aa06d94436ffb1f06102ef3572f35276", size = 161406, upload-time = "2026-10-07T12:23:15.215Z" },
244
+ { url = "https://files.pythonhosted.org/packages/9c/e7/1a069d86dfd20f1f84f71c63faed9f83c1d890bc06c27d82dc7d888fb573/tomli-2.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:752e8b1aa6a4367ef8bf6a1a1e005540f7ed055ba36d7193796812ca5404eb52", size = 273855, upload-time = "2026-10-07T12:23:16.471Z" },
245
+ { url = "https://files.pythonhosted.org/packages/ae/83/d1ef43d1687d092ab9c235455c76e6e709483b346b056f086095c7c263a5/tomli-2.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c47300f9bf791808f77d82747691c4bb09cb14bdf3060cca99b42cdc4361d5a7", size = 284910, upload-time = "2026-10-07T12:23:18.166Z" },
246
+ { url = "https://files.pythonhosted.org/packages/cc/05/f4d9cf7de61822ece0c3873f30d291e324911c71a378b8bfe5ced13fd9f5/tomli-2.5.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:19b0dd8749f4ea2f112c5fcfb3c5248390c899d7e2e173f1d91abee1fa0ff391", size = 277723, upload-time = "2026-10-07T12:23:19.355Z" },
247
+ { url = "https://files.pythonhosted.org/packages/42/28/78262493141fa543151cf005760c3cb01d09fc28a11f993c05109902cb8c/tomli-2.5.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:57b1c3b01fab802e2899bc3d168dca320e14165e2fd9fd584760fb4ca5826859", size = 285115, upload-time = "2026-10-07T12:23:20.698Z" },
248
+ { url = "https://files.pythonhosted.org/packages/1a/b9/e1dab9a30bcb677b5cc5cee810609cfd64f24306a3055767dd3fda00b1e0/tomli-2.5.0-cp315-cp315-win32.whl", hash = "sha256:667e521b37a6c5ccaa044202c235b530f90177ffe2cd4a64ecc213c7dd535feb", size = 103475, upload-time = "2026-10-07T12:23:21.941Z" },
249
+ { url = "https://files.pythonhosted.org/packages/4c/bd/31a3790c11d6ea95fcf5e6022ac0f8d0543c9b61120b730fc481bd43d3b4/tomli-2.5.0-cp315-cp315-win_amd64.whl", hash = "sha256:d747252933c8a65ef6bd8da0fbb7ce28a90eb6119d8cd00772cd528aa07b68d5", size = 114589, upload-time = "2026-10-07T12:23:23.098Z" },
250
+ { url = "https://files.pythonhosted.org/packages/47/a2/4f6310fa699364f0e3af7ee3af88dddd9af066d33e716a0265bbe2b3ea84/tomli-2.5.0-cp315-cp315-win_arm64.whl", hash = "sha256:75dbcde8751b0a960aa3de173aa5e894d590755c6d7758b7e774c06f1dc3cbdd", size = 111493, upload-time = "2026-10-07T12:23:24.233Z" },
251
+ { url = "https://files.pythonhosted.org/packages/68/14/00853f0b396d8971107ae1921bb5b322fdee1650d2f16bf06c20adb532e5/tomli-2.5.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:2419c2a189551987b59d80e63ec355671283336f41c6b9b89462df679c7d0c57", size = 171380, upload-time = "2026-10-07T12:23:25.512Z" },
252
+ { url = "https://files.pythonhosted.org/packages/89/ad/fa6949321dadee46b27363974fb197b94c911c3b0f7a5fd26d7dc18fc2a0/tomli-2.5.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:0dc598040da8d42cf20f0be588ed7004f46db12a0ac6c32e03a59dccedaaadcd", size = 170553, upload-time = "2026-10-07T12:23:26.855Z" },
253
+ { url = "https://files.pythonhosted.org/packages/53/aa/3056c919eb3e084df3752b2cf5f865dcc04af0b27dba2f66d7b28af4633a/tomli-2.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49096930c8d886c9bbdab62d2d0d17ce823ddeea522309a190b36245d5b49e01", size = 294428, upload-time = "2026-10-07T12:23:28.132Z" },
254
+ { url = "https://files.pythonhosted.org/packages/96/b2/faeeb5d8769ea3832021d73e892c8391eae7b4b4f8b55a789127bd8b18a9/tomli-2.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8ade5023067f99fe72b88accd30d0ea05a158e9e32a11f124e731ea9695313f", size = 304909, upload-time = "2026-10-07T12:23:29.381Z" },
255
+ { url = "https://files.pythonhosted.org/packages/f6/52/f094c09e73fb654b621716d019acb5d29bdfd1be01df80c281d552bda48d/tomli-2.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:b69564772b5c8f22ea5f498dff08cfa825045b4d4c4400529000bdf818aa3b2a", size = 293220, upload-time = "2026-10-07T12:23:30.608Z" },
256
+ { url = "https://files.pythonhosted.org/packages/86/f5/0c30541078ca4b505ce3bd76ed931facbfec524dd018535d691d1af0a6d2/tomli-2.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:8ff3a2ca028c7eee0c777f9a092038d0a594a9fa04e215f929a22c329e2cb142", size = 305705, upload-time = "2026-10-07T12:23:32.181Z" },
257
+ { url = "https://files.pythonhosted.org/packages/05/74/590e7d19d6a118fc5cc5704ff358e21d95b8573f6b9443b1519f29ca8825/tomli-2.5.0-cp315-cp315t-win32.whl", hash = "sha256:62fc1bc8eb03e3a9cadfca713d65614ed8e09d974a283295ffe3a831976b4dc5", size = 108432, upload-time = "2026-10-07T12:23:33.496Z" },
258
+ { url = "https://files.pythonhosted.org/packages/1c/b8/63a75cfb27a17c38550e44025d3a6e7be64516fd8608a3b75703bf37d81b/tomli-2.5.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f3fcbc57b1791fa6cbe5d8434179d51de12be1a4811469529f47f6e7487a2571", size = 117281, upload-time = "2026-10-07T12:23:34.648Z" },
259
+ { url = "https://files.pythonhosted.org/packages/72/01/e8c1debb2173973372934c68fc8e46170ab60ef23ed4592dff4dec6e8993/tomli-2.5.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d2ba24db8a9376921b5e87b4762b9adb0f3f1deaea68f2b8b0bb2c11efb9c3e7", size = 115069, upload-time = "2026-10-07T12:23:35.77Z" },
260
+ { url = "https://files.pythonhosted.org/packages/60/3f/3e3f8fd0919249b0200c80fbc4f9a1e70be19f9883da71dfb7f8b9ab8aca/tomli-2.5.0-py3-none-any.whl", hash = "sha256:32a7b79ac57a2e83670ce329ccf675798bc5a2094783a63676866b70503f2e2b", size = 14765, upload-time = "2026-10-07T12:23:36.875Z" },
261
+ ]
262
+
263
+ [[package]]
264
+ name = "typing-extensions"
265
+ version = "4.16.0"
266
+ source = { registry = "https://pypi.org/simple" }
267
+ sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
268
+ wheels = [
269
+ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
270
+ ]
271
+
272
+ [[package]]
273
+ name = "verkit"
274
+ version = "0.3.2"
275
+ source = { editable = "." }
276
+ dependencies = [
277
+ { name = "rich" },
278
+ ]
279
+
280
+ [package.dev-dependencies]
281
+ dev = [
282
+ { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
283
+ { name = "pytest", version = "9.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
284
+ ]
285
+
286
+ [package.metadata]
287
+ requires-dist = [{ name = "rich", specifier = ">=10.0.0" }]
288
+
289
+ [package.metadata.requires-dev]
290
+ dev = [{ name = "pytest" }]
verkit-0.3.1/llms.txt DELETED
@@ -1,15 +0,0 @@
1
- # verkit
2
-
3
- > Polyglot project version inspector, promoter, tagger and release CLI, plus the shared Rich theme and vim-style Textual key conventions for the author's Python TUIs. If your project depends on verkit, read the conventions guide first.
4
-
5
- ## Agent guidance
6
- - [Conventions guide](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/agent_guide.md): vim navigation, theme, mise dev-vs-PyPI rule. Also `verkit conventions [--json]`.
7
- - [AGENTS.md](https://raw.githubusercontent.com/bizkite-co/verkit/main/AGENTS.md): working on verkit itself.
8
-
9
- ## Code
10
- - [keys.py](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/keys.py): `VIM_BINDINGS` for Textual `BINDINGS`.
11
- - [theme.py](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/theme.py): shared Rich theme.
12
- - [theme.json](https://raw.githubusercontent.com/bizkite-co/verkit/main/src/verkit/theme.json): theme for non-Python consumers.
13
-
14
- ## Optional
15
- - [README](https://raw.githubusercontent.com/bizkite-co/verkit/main/README.md): CLI and API usage.
@@ -1,7 +0,0 @@
1
- from verkit.promoter import _increment_semver
2
-
3
- def test_increment_semver():
4
- assert _increment_semver("0.1.0", "patch") == "0.1.1"
5
- assert _increment_semver("0.1.0", "minor") == "0.2.0"
6
- assert _increment_semver("0.1.0", "major") == "1.0.0"
7
- assert _increment_semver("1.2.3-rc1", "patch") == "1.2.4-rc1"
verkit-0.3.1/uv.lock DELETED
@@ -1,80 +0,0 @@
1
- version = 1
2
- revision = 3
3
- requires-python = ">=3.9"
4
- resolution-markers = [
5
- "python_full_version >= '3.10'",
6
- "python_full_version < '3.10'",
7
- ]
8
-
9
- [[package]]
10
- name = "markdown-it-py"
11
- version = "3.0.0"
12
- source = { registry = "https://pypi.org/simple" }
13
- resolution-markers = [
14
- "python_full_version < '3.10'",
15
- ]
16
- dependencies = [
17
- { name = "mdurl" },
18
- ]
19
- sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
20
- wheels = [
21
- { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
22
- ]
23
-
24
- [[package]]
25
- name = "markdown-it-py"
26
- version = "4.2.0"
27
- source = { registry = "https://pypi.org/simple" }
28
- resolution-markers = [
29
- "python_full_version >= '3.10'",
30
- ]
31
- dependencies = [
32
- { name = "mdurl" },
33
- ]
34
- sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
35
- wheels = [
36
- { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
37
- ]
38
-
39
- [[package]]
40
- name = "mdurl"
41
- version = "0.1.2"
42
- source = { registry = "https://pypi.org/simple" }
43
- sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
44
- wheels = [
45
- { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
46
- ]
47
-
48
- [[package]]
49
- name = "pygments"
50
- version = "2.20.0"
51
- source = { registry = "https://pypi.org/simple" }
52
- sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
53
- wheels = [
54
- { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
55
- ]
56
-
57
- [[package]]
58
- name = "rich"
59
- version = "15.0.0"
60
- source = { registry = "https://pypi.org/simple" }
61
- dependencies = [
62
- { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
63
- { name = "markdown-it-py", version = "4.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
64
- { name = "pygments" },
65
- ]
66
- sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
67
- wheels = [
68
- { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
69
- ]
70
-
71
- [[package]]
72
- name = "verkit"
73
- version = "0.3.1"
74
- source = { editable = "." }
75
- dependencies = [
76
- { name = "rich" },
77
- ]
78
-
79
- [package.metadata]
80
- requires-dist = [{ name = "rich", specifier = ">=10.0.0" }]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes