---
name: python-workflow-delivery
description: |-
  Use when preparing branches, commits, or PRs for Python changes — scoping work, running validation gates, and ensuring merge readiness. Also use when debugging CI gate failures, resolving lockfile conflicts, or uncertain what checks to run before opening a PR.
---

# Python Workflow and Delivery

## Overview

Branch-to-PR execution discipline for Python work: validate, scope, and ship with confidence.
Apply these defaults before opening or updating a PR.

These are preferred defaults for common cases, not universal rules.
When deviating, call out tradeoffs and compensating controls (tests, observability, migration, rollback).

## When to Use

- Preparing a branch or PR for Python changes.
- CI gate failures on lint, format, or test steps.
- Lockfile or dependency conflicts during `uv sync`.
- Commits that bundle too many concerns or are hard to review.
- Uncertainty about which validation steps to run before merge.

**When NOT to use:**

- Pure design or architecture decisions — see `python-design-modularity`.
- Test strategy or fixture design — see `python-testing`.
- Runtime operations or deployment — see `python-runtime-operations`.

## Quick Reference

- Use the project-defined Python version first.
- Use `uv` for environment and dependency workflow.
- Run checks with `uv run ...`.
- Keep scope small, reversible, and reviewable.

## Validation Gate

Run as required by project scope:

- `uv sync`
- `uv sync --locked`
- `uv lock --check`
- `uv run ruff check .`
- `uv run ruff format --check .`
- `uv run pytest`

Change-specific checks:

- Dependency/lockfile changes: `uv run pytest scripts/test_pypi_security_audit.py -v`
- Async lifecycle changes: run `pyleak` diagnostics on representative async integration tests.

## Common Mistakes

- **Skipping `uv lock --check`** — merging without verifying the lockfile matches `pyproject.toml` causes CI failures downstream.
- **Bundling unrelated changes in one commit** — mixing refactors, features, and dependency bumps makes review slow and reverts dangerous.
- **Running `ruff check` but not `ruff format --check`** — passing lint does not guarantee formatting; both gates matter.
- **Forgetting change-specific checks** — dependency updates need the security audit; async changes need leak diagnostics.
  Generic `pytest` alone is not enough.

## Scope Note

- Treat these recommendations as preferred defaults for common cases, not universal rules.
- If a default conflicts with project constraints or worsens the outcome, suggest a better-fit alternative and explain why it is better for this case.
- When deviating, call out tradeoffs and compensating controls (tests, observability, migration, rollback).

## Invocation Notice

- Inform the user when this skill is being invoked by name: `python-design-modularity`.

## References

- `references/workflow.md`
- `references/branch-commit-scope.md`
