# Update Reqs Dev

> Use when user wants to update requirements-dev.in with latest PyPI versions while preserving version patterns

- Skill: `concertonotes/update-reqs-dev` (Agent Skill)
- Install (CLI): `npx skillmds@latest add concertonotes/update-reqs-dev`
- Raw SKILL.md: https://api.skillmd.com/api/skills/concertonotes/update-reqs-dev/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ConcertoNotes (https://skillmd.com/u/concertonotes)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/concertonotes/update-reqs-dev

---


# Update Dev Requirements

Updates `requirements-dev.in` with latest package versions from PyPI while preserving version specifier patterns.

## How It Works

For each package in `requirements-dev.in`:

1. **Parse the version pattern** to understand the "fixed part":
   - `pytest==8.*` → fixed: `8`, wildcard at minor level
   - `ruff==0.*` → fixed: `0`, wildcard at minor level
   - `pytest-cov==7.*` → fixed: `7`, wildcard at minor level

2. **Query PyPI** for the latest version

3. **Update while preserving pattern**:
   - `pytest==8.*` with latest `8.4.0` → `pytest==8.*` (already allows 8.x)
   - `ruff==0.*` with latest `0.9.2` → `ruff==0.*` (already allows 0.x)

## Execution Steps

1. Read `requirements-dev.in` from the current project
2. For each line with a package version:
   - Skip git dependencies (lines with `@` or `git+`)
   - Parse package name and version pattern
   - Fetch latest version from PyPI: `curl -s https://pypi.org/pypi/{package}/json | jq -r .info.version`
   - Calculate new version with same pattern depth
3. Show diff of proposed changes
4. Apply changes after user confirmation

## Version Pattern Rules

| Original | Latest on PyPI | Result |
|----------|----------------|--------|
| `pkg==1.2.*` | `1.5.3` | `pkg==1.5.*` |
| `pkg==1.*` | `2.3.0` | `pkg==2.*` |
| `pkg==1.2.3` | `1.5.3` | `pkg==1.5.3` |

## Skip These Lines

- Git dependencies: `pkg @ git+https://...`
- Comments: Lines starting with `#`
- Empty lines
- Extras without version: `pkg[extra]`

## Example Output

```
Checking requirements-dev.in for updates...

Package          Current    Latest     Status
pytest           8.*        9.0.0      UPDATE → 9.*
ruff             0.*        0.14.3     OK (already matches)
commitizen       4.*        4.9.1      OK (already matches)

Apply updates? [y/N]
```

## After applying changes

Recompile the dev lockfile with `uv`:

```bash
uv pip compile requirements-dev.in -o requirements-dev.txt --upgrade
```

The `.in` file is human-edited; `.txt` is the generated, fully-resolved lockfile that local dev and the CI test image install from.

