aws-test-plugin 0.1.2__tar.gz → 0.1.3__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.
Files changed (51) hide show
  1. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.claude-plugin/marketplace.json +1 -1
  2. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.claude-plugin/plugin.json +1 -1
  3. aws_test_plugin-0.1.3/.github/dependabot.yml +21 -0
  4. aws_test_plugin-0.1.3/.github/workflows/ci.yml +156 -0
  5. aws_test_plugin-0.1.3/.github/workflows/publish.yml +54 -0
  6. aws_test_plugin-0.1.3/CLAUDE.md +157 -0
  7. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/CONTRIBUTING.md +32 -4
  8. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/PKG-INFO +19 -8
  9. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/README.md +17 -6
  10. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/pyproject.toml +15 -1
  11. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-contract-testing/SKILL.md +1 -0
  12. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-e2e-testing/SKILL.md +1 -0
  13. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/SKILL.md +1 -0
  14. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-perf-load-testing/SKILL.md +1 -0
  15. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-test-orchestrator/SKILL.md +1 -0
  16. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-unit-testing/SKILL.md +1 -0
  17. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/uv.lock +146 -132
  18. aws_test_plugin-0.1.2/.github/workflows/ci.yml +0 -113
  19. aws_test_plugin-0.1.2/.github/workflows/publish.yml +0 -53
  20. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.gitattributes +0 -0
  21. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.github/CODEOWNERS +0 -0
  22. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.github/pull_request_template.md +0 -0
  23. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.github/workflows/codeql.yml +0 -0
  24. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.gitignore +0 -0
  25. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/.python-version +0 -0
  26. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/LICENSE +0 -0
  27. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/PLAN.md +0 -0
  28. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/agents/aws-test-engineer.md +0 -0
  29. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-contract-testing/references/openapi-patterns.md +0 -0
  30. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-e2e-testing/references/api-gateway-patterns.md +0 -0
  31. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-e2e-testing/references/batch-patterns.md +0 -0
  32. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-e2e-testing/references/step-function-patterns.md +0 -0
  33. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-dynamodb-patterns.md +0 -0
  34. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-eventbridge-patterns.md +0 -0
  35. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-kinesis-patterns.md +0 -0
  36. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-rds-patterns.md +0 -0
  37. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-s3-patterns.md +0 -0
  38. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-sns-patterns.md +0 -0
  39. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-integration-testing/references/lambda-sqs-patterns.md +0 -0
  40. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-perf-load-testing/references/benchmark-patterns.md +0 -0
  41. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-perf-load-testing/references/locust-patterns.md +0 -0
  42. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-test-orchestrator/references/secrets-and-config.md +0 -0
  43. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-unit-testing/references/boundary-branch-patterns.md +0 -0
  44. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/skills/aws-unit-testing/references/edge-case-patterns.md +0 -0
  45. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/AGENTS.md +0 -0
  46. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/__init__.py +0 -0
  47. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/cli.py +0 -0
  48. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/scripts/analyze_results.py +0 -0
  49. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/scripts/run_tests.py +0 -0
  50. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/src/aws_test_plugin/scripts/scaffold.py +0 -0
  51. {aws_test_plugin-0.1.2 → aws_test_plugin-0.1.3}/tests/test_cli.py +0 -0
@@ -11,7 +11,7 @@
11
11
  "name": "claude-aws-test-plugin",
12
12
  "source": "./",
13
13
  "description": "Generates E2E, integration, contract, performance, and load tests by reading actual handler code.",
14
- "version": "0.1.2"
14
+ "version": "0.1.3"
15
15
  }
16
16
  ]
17
17
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aws-test-plugin",
3
3
  "description": "AI-powered test generation skills for AWS Python projects — Lambda, API Gateway, Step Functions, and Batch. Generates E2E, integration, contract, performance, and load tests by reading actual handler code.",
4
- "version": "0.1.2",
4
+ "version": "0.1.3",
5
5
  "author": {
6
6
  "name": "whitewhiteqq"
7
7
  },
@@ -0,0 +1,21 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: github-actions
5
+ directory: /
6
+ schedule:
7
+ interval: weekly
8
+ groups:
9
+ actions:
10
+ patterns:
11
+ - "*"
12
+
13
+ - package-ecosystem: uv
14
+ directory: /
15
+ schedule:
16
+ interval: weekly
17
+ groups:
18
+ dev-deps:
19
+ dependency-type: development
20
+ prod-deps:
21
+ dependency-type: production
@@ -0,0 +1,156 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+ - develop
8
+ push:
9
+ branches:
10
+ - '**'
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ lockfile:
17
+ name: Lockfile Check
18
+ runs-on: ubuntu-latest
19
+
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v4
23
+
24
+ - name: Set up uv
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ enable-cache: true
28
+
29
+ - name: Verify lockfile is up-to-date
30
+ run: uv lock --check
31
+
32
+ test:
33
+ name: Test (Python ${{ matrix.python-version }})
34
+ needs: [lockfile]
35
+ runs-on: ubuntu-latest
36
+ strategy:
37
+ fail-fast: false
38
+ matrix:
39
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
40
+
41
+ steps:
42
+ - name: Checkout
43
+ uses: actions/checkout@v4
44
+
45
+ - name: Set up uv
46
+ uses: astral-sh/setup-uv@v7
47
+ with:
48
+ python-version: ${{ matrix.python-version }}
49
+ enable-cache: true
50
+
51
+ - name: Sync dependencies
52
+ run: uv sync --frozen
53
+
54
+ - name: Run tests
55
+ run: uv run pytest tests/ -v
56
+
57
+ lint:
58
+ name: Lint
59
+ needs: [lockfile]
60
+ runs-on: ubuntu-latest
61
+
62
+ steps:
63
+ - name: Checkout
64
+ uses: actions/checkout@v4
65
+
66
+ - name: Set up uv
67
+ uses: astral-sh/setup-uv@v7
68
+ with:
69
+ python-version: "3.12"
70
+ enable-cache: true
71
+
72
+ - name: Sync dependencies (no sdist builds)
73
+ run: uv sync --frozen --no-build --no-install-project
74
+
75
+ - name: Ruff check
76
+ run: uv run --no-sync ruff check src tests
77
+
78
+ - name: Ruff format check
79
+ run: uv run --no-sync ruff format --check src tests
80
+
81
+ typecheck:
82
+ name: Type Check
83
+ needs: [lockfile]
84
+ runs-on: ubuntu-latest
85
+
86
+ steps:
87
+ - name: Checkout
88
+ uses: actions/checkout@v4
89
+
90
+ - name: Set up uv
91
+ uses: astral-sh/setup-uv@v7
92
+ with:
93
+ python-version: "3.12"
94
+ enable-cache: true
95
+
96
+ - name: Sync dependencies (no sdist builds)
97
+ run: uv sync --frozen --no-build --no-install-project
98
+
99
+ - name: Run mypy
100
+ run: uv run --no-sync mypy src
101
+
102
+ security:
103
+ name: Security
104
+ needs: [lockfile]
105
+ runs-on: ubuntu-latest
106
+
107
+ steps:
108
+ - name: Checkout
109
+ uses: actions/checkout@v4
110
+
111
+ - name: Set up uv
112
+ uses: astral-sh/setup-uv@v7
113
+ with:
114
+ python-version: "3.12"
115
+ enable-cache: true
116
+
117
+ - name: Sync dependencies (no sdist builds)
118
+ run: uv sync --frozen --no-build --no-install-project
119
+
120
+ - name: Run Bandit
121
+ run: uv run --no-sync bandit -q -c pyproject.toml -r src
122
+
123
+ - name: Run pip-audit
124
+ run: |
125
+ # CVE-2026-4539: ReDoS in pygments AdlLexer (archetype.py).
126
+ # Local-access-only; no fix version exists yet; pygments is a
127
+ # transitive dep of bandit/rich and is not shipped to users.
128
+ # Remove this ignore once a patched pygments is released.
129
+ #
130
+ # CVE-2026-25645: requests 2.32.5 — blocked by exclude-newer
131
+ # cooldown; fix is in 2.33.0. requests is an optional e2e dep
132
+ # (not installed in default CI runs). Remove once 2.33.0 clears
133
+ # the 14-day window.
134
+ uv run --no-sync pip-audit --ignore-vuln CVE-2026-4539 --ignore-vuln CVE-2026-25645
135
+
136
+ typecheck-ty:
137
+ name: Type Check (ty)
138
+ needs: [lockfile]
139
+ runs-on: ubuntu-latest
140
+ continue-on-error: true # ty is non-blocking while stabilising; promote to blocking when mypy is removed
141
+
142
+ steps:
143
+ - name: Checkout
144
+ uses: actions/checkout@v4
145
+
146
+ - name: Set up uv
147
+ uses: astral-sh/setup-uv@v7
148
+ with:
149
+ python-version: "3.12"
150
+ enable-cache: true
151
+
152
+ - name: Sync dependencies (no sdist builds)
153
+ run: uv sync --frozen --no-build --no-install-project
154
+
155
+ - name: Run ty
156
+ run: uv run --no-sync ty check src
@@ -0,0 +1,54 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+ id-token: write # Required for trusted publishing
10
+ attestations: write # Required for build provenance
11
+
12
+ jobs:
13
+ publish:
14
+ name: Build & Publish to PyPI
15
+ runs-on: ubuntu-latest
16
+ environment:
17
+ name: pypi
18
+ url: https://pypi.org/p/aws-test-plugin
19
+
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
23
+
24
+ - name: Verify tag matches package version
25
+ run: |
26
+ VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
27
+ TAG="${GITHUB_REF_NAME}"
28
+ if [ "v${VERSION}" != "${TAG}" ]; then
29
+ echo "::error::Tag '${TAG}' does not match package version 'v${VERSION}'"
30
+ exit 1
31
+ fi
32
+ echo "Tag '${TAG}' matches package version '${VERSION}' — proceeding"
33
+
34
+ - name: Set up uv
35
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
36
+ with:
37
+ python-version: "3.12"
38
+
39
+ - name: Build package
40
+ run: uv build
41
+
42
+ - name: Smoke test
43
+ run: |
44
+ WHEEL=$(ls dist/*.whl)
45
+ uv run --no-project --with "$WHEEL" -- python -c "import aws_test_plugin; print('Smoke test passed')"
46
+
47
+ - name: Attest build provenance
48
+ uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2
49
+ with:
50
+ subject-path: dist/*
51
+
52
+ - name: Publish to PyPI
53
+ run: uv publish --trusted-publishing always
54
+
@@ -0,0 +1,157 @@
1
+ # CLAUDE.md — Agent Instructions for aws-test-plugin
2
+
3
+ This file is read by Claude Code before any operation in this repository.
4
+ Follow all rules here in addition to the instructions in `src/aws_test_plugin/AGENTS.md`.
5
+
6
+ ## Commands
7
+
8
+ ```bash
9
+ # Sync dependencies (after cloning or pulling)
10
+ uv sync --locked
11
+
12
+ # Run all tests
13
+ uv run pytest tests/ -v
14
+
15
+ # Lint — check mode (CI)
16
+ uv run ruff check src tests
17
+ uv run ruff format --check src tests
18
+
19
+ # Lint — fix mode (local dev: always fix before format)
20
+ uv run ruff check --fix src tests
21
+ uv run ruff format src tests
22
+
23
+ # Type checking — ty is the primary checker (fast, replaces mypy)
24
+ uv run ty check src
25
+
26
+ # Type checking — mypy (secondary; kept for compatibility)
27
+ uv run mypy src
28
+
29
+ # Security scans
30
+ uv run bandit -q -c pyproject.toml -r src
31
+ # CVE-2026-4539: pygments ReDoS (local-only, no fix yet) — remove ignore once patched
32
+ # CVE-2026-25645: requests 2.32.5 — fix in 2.33.0, blocked by exclude-newer cooldown
33
+ uv run pip-audit --ignore-vuln CVE-2026-4539 --ignore-vuln CVE-2026-25645
34
+
35
+ # Verify lockfile is up to date (must pass before any commit)
36
+ uv lock --check
37
+
38
+ # Regenerate lockfile when pyproject.toml changes
39
+ uv lock
40
+ ```
41
+
42
+ ## Change Workflow
43
+
44
+ Every change, regardless of size, follows this sequence:
45
+
46
+ 1. **Branch** — `git checkout -b feat/<name>` or `fix/<name>` from `develop`
47
+ 2. **Implement** — make the change
48
+ 3. **Docs review** — ask: does this change affect README.md, CONTRIBUTING.md, or CLAUDE.md?
49
+ - CI/CD changes → update CLAUDE.md (Commands section) if any command changes
50
+ - Dependency changes → update README.md and CONTRIBUTING.md if setup steps change
51
+ - Workflow/process changes → update CLAUDE.md (relevant section)
52
+ - `src/` public API changes → update README.md usage examples
53
+ 4. **Version bump** — see Version Policy below
54
+ 5. **Local checks** — must all pass before committing:
55
+ ```bash
56
+ uv lock --check
57
+ uv run ruff check src tests
58
+ uv run ruff format --check src tests
59
+ uv run ty check src # or: uv run mypy src
60
+ uv run pytest tests/ -v
61
+ uv run bandit -q -c pyproject.toml -r src
62
+ uv run pip-audit --ignore-vuln CVE-2026-4539 --ignore-vuln CVE-2026-25645
63
+ ```
64
+ 6. **Commit** — conventional commit with full body for non-trivial changes
65
+ 7. **PR → develop → main** — follow Branch Strategy below
66
+
67
+ ## Version Policy
68
+
69
+ Bump the version in `pyproject.toml` (and run `uv lock`) only when the
70
+ **installed package changes**:
71
+
72
+ | Change type | Bump? |
73
+ |---|---|
74
+ | `src/aws_test_plugin/` code change | **Yes** |
75
+ | Runtime dep added/removed/changed (`[project.dependencies]`) | **Yes** |
76
+ | Dev dep change (`[dependency-groups] dev`) | No |
77
+ | CI/CD workflow change (`.github/`) | No |
78
+ | Docs only (`README.md`, `CONTRIBUTING.md`, `CLAUDE.md`) | No |
79
+ | Tool config (`[tool.ruff]`, `[tool.ty]`, etc.) | No |
80
+ | `skills/`, `agents/` content | No |
81
+
82
+ Version follows [Semantic Versioning](https://semver.org/):
83
+ - **patch** (0.1.x) — bug fixes, no API change
84
+ - **minor** (0.x.0) — new backward-compatible features
85
+ - **major** (x.0.0) — breaking changes
86
+
87
+ ## Pre-Commit Enforcement
88
+
89
+ **Always run `uv lock --check` before committing.**
90
+ If it reports that `uv.lock` needs updating, run `uv lock` first, stage
91
+ `uv.lock`, and include it in the same commit as the `pyproject.toml` change.
92
+
93
+ Never commit a stale lockfile. The CI `lockfile` job runs `uv lock --check`
94
+ on every push and pull request; a stale lockfile will block the entire
95
+ pipeline.
96
+
97
+ Triggers that require `uv lock`:
98
+ - Any edit to `pyproject.toml` (adding, removing, or changing a dependency)
99
+ - Any uv or Python version bump
100
+
101
+ ## Branch Strategy
102
+
103
+ Releases follow exactly one path:
104
+
105
+ ```
106
+ feature/fix branch → develop → main → annotated tag → GitHub Release → PyPI
107
+ ```
108
+
109
+ - **Never push directly to `main` or `develop`.**
110
+ - Branch from `develop` for all changes: `git checkout -b feat/<name> origin/develop`
111
+ - Open a pull request targeting `develop`.
112
+ - Release promotion: maintainer runs `git merge --ff-only develop` from `main`
113
+ locally, then pushes. No GitHub merge button for main promotion.
114
+ - PyPI publish is triggered only by creating a GitHub Release targeting a
115
+ version tag on `main`.
116
+
117
+ ## Commit Message Style
118
+
119
+ Use Conventional Commits. For non-trivial changes include the full body:
120
+
121
+ ```
122
+ type(scope): short imperative summary
123
+
124
+ INTENTION:
125
+ WHAT CHANGED:
126
+ WHY:
127
+ ALTERNATIVES CONSIDERED:
128
+ REFS:
129
+ VERIFIED:
130
+ ```
131
+
132
+ See `CONTRIBUTING.md` for the full template and examples.
133
+
134
+ ## Project Layout
135
+
136
+ ```
137
+ aws-test-plugin/
138
+ ├── CLAUDE.md # This file — agent instructions
139
+ ├── CONTRIBUTING.md # Human + AI contributor guide
140
+ ├── pyproject.toml # Project metadata and deps
141
+ ├── uv.lock # Locked dependency graph (never stale)
142
+ ├── skills/ # Skill definitions
143
+ ├── agents/ # Agent definitions
144
+ ├── src/aws_test_plugin/
145
+ │ ├── __init__.py
146
+ │ ├── cli.py
147
+ │ ├── AGENTS.md # Codex-compatible instructions
148
+ │ └── scripts/
149
+ └── tests/
150
+ ```
151
+
152
+ ## Safety
153
+
154
+ - Never run E2E or load tests against production without confirmation.
155
+ - Never hardcode secrets. Use `.env` (gitignored) or AWS Secrets Manager/SSM.
156
+ - All test data uses prefixes: `TEST-`, `E2E-TEST-`, `LOAD-TEST-`.
157
+ - Integration tests use moto — no real AWS calls.
@@ -12,7 +12,7 @@ cd aws-test-plugin
12
12
  # macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
13
13
 
14
14
  # Install with dev dependencies
15
- uv sync
15
+ uv sync --locked
16
16
 
17
17
  # Run tests
18
18
  uv run pytest tests/ -v
@@ -21,18 +21,46 @@ uv run pytest tests/ -v
21
21
  uv run ruff check src tests
22
22
  uv run ruff format --check src tests
23
23
 
24
- # Type checking
24
+ # Type checking — ty is the primary checker (fast, replaces mypy)
25
+ uv run ty check src
26
+
27
+ # Type checking — mypy (secondary; kept for compatibility)
25
28
  uv run mypy src
26
29
 
27
30
  # Security scans
28
31
  uv run bandit -q -c pyproject.toml -r src
29
- uv run pip-audit
32
+ # CVE-2026-4539: pygments ReDoS (local-only, no fix yet) — remove ignore once patched
33
+ uv run pip-audit --ignore-vuln CVE-2026-4539
34
+
35
+ # Verify lockfile is up to date (must pass before any commit)
36
+ uv lock --check
37
+
38
+ # Regenerate lockfile when pyproject.toml changes
39
+ uv lock
30
40
  ```
31
41
 
42
+ ## Lockfile Discipline
43
+
44
+ `uv.lock` must never be stale in the repository. The CI `lockfile` job runs
45
+ `uv lock --check` on every push and pull request; a stale lockfile fails the
46
+ entire pipeline before any test or lint job runs.
47
+
48
+ **Rule: run `uv lock --check` before every commit. If it reports the lockfile
49
+ needs updating, run `uv lock`, stage `uv.lock`, and include it in the same
50
+ commit as the `pyproject.toml` change.**
51
+
52
+ Triggers that require `uv lock`:
53
+ - Any edit to `pyproject.toml` (adding, removing, or bumping a dependency)
54
+ - Any change to the `requires-python` field or Python version target
55
+ - Pulling changes from `origin` that modify `pyproject.toml`
56
+
32
57
  ## Project Structure
33
58
 
34
59
  ```
35
60
  aws-test-plugin/
61
+ ├── CLAUDE.md # Agent instructions (Claude Code / Copilot)
62
+ ├── pyproject.toml # Project metadata and deps
63
+ ├── uv.lock # Locked dependency graph (never stale)
36
64
  ├── skills/ # Skill definitions (auto-discovered by npx skills add)
37
65
  │ ├── aws-test-orchestrator/SKILL.md
38
66
  │ ├── aws-e2e-testing/ # SKILL.md + references/
@@ -263,7 +291,7 @@ must also land in the commit messages that enter `develop`.
263
291
  2. Create a feature branch from `develop`: `git checkout -b feat/new-pattern origin/develop`
264
292
  3. Make your changes
265
293
  4. Rebase your branch on the latest `origin/develop` before opening or updating the pull request
266
- 5. Run local quality checks: `uv run pytest tests/ -v`, `uv run ruff check src tests`, `uv run ruff format --check src tests`, `uv run mypy src`, `uv run bandit -q -c pyproject.toml -r src`, and `uv run pip-audit`
294
+ 5. Run local quality checks: `uv lock --check` (regenerate with `uv lock` if stale), `uv run pytest tests/ -v`, `uv run ruff check src tests`, `uv run ruff format --check src tests`, `uv run mypy src`, `uv run bandit -q -c pyproject.toml -r src`, and `uv run pip-audit`
267
295
  6. Submit a pull request to `develop` using `.github/pull_request_template.md`
268
296
  7. Merge pull requests with `Rebase and merge` (preferred — preserves individual commit reasoning) or `Squash and merge` (only when intermediate commits are noise); do not use merge commits
269
297
  8. Release `develop` to `main` with a maintainer-run fast-forward update after CI passes on `develop`; use `git merge --ff-only develop` from a local checkout of `main` so `main` advances without rewriting or duplicating commit history
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: aws-test-plugin
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: AI-powered test generation skills for AWS Python projects — works with Claude Code, GitHub Copilot, and Codex
5
5
  Project-URL: Homepage, https://github.com/whitewhiteqq/aws-test-plugin
6
6
  Project-URL: Repository, https://github.com/whitewhiteqq/aws-test-plugin
@@ -265,7 +265,9 @@ This plugin doesn't fill in templates — it reads your **actual code** and gene
265
265
  aws-test-plugin/
266
266
  ├── .claude-plugin/
267
267
  │ └── plugin.json # Claude Code plugin manifest
268
+ ├── CLAUDE.md # Agent instructions (Claude Code / Copilot)
268
269
  ├── pyproject.toml # uv/pip package config
270
+ ├── uv.lock # Locked dependency graph (never stale)
269
271
  ├── LICENSE # Apache 2.0
270
272
  ├── README.md
271
273
  ├── CONTRIBUTING.md
@@ -306,21 +308,30 @@ git clone https://github.com/whitewhiteqq/aws-test-plugin.git
306
308
  cd aws-test-plugin
307
309
 
308
310
  # Install with uv (creates .venv automatically)
309
- uv sync
311
+ uv sync --locked
310
312
 
311
313
  # Run tests
312
314
  uv run pytest tests/ -v
313
315
 
314
316
  # Lint
315
- uv run ruff check src/
316
- uv run ruff format --check src/
317
+ uv run ruff check src tests
318
+ uv run ruff format --check src tests
317
319
 
318
- # Type checking
319
- uv run mypy src/
320
+ # Type checking — ty is the primary checker (fast, replaces mypy)
321
+ uv run ty check src
322
+
323
+ # Type checking — mypy (secondary; kept for compatibility)
324
+ uv run mypy src
320
325
 
321
326
  # Security scans
322
- uv run bandit -q -c pyproject.toml -r src/
327
+ uv run bandit -q -c pyproject.toml -r src
323
328
  uv run pip-audit
329
+
330
+ # Verify lockfile is up to date (must pass before any commit)
331
+ uv lock --check
332
+
333
+ # Regenerate lockfile when pyproject.toml changes
334
+ uv lock
324
335
  ```
325
336
 
326
337
  See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
@@ -203,7 +203,9 @@ This plugin doesn't fill in templates — it reads your **actual code** and gene
203
203
  aws-test-plugin/
204
204
  ├── .claude-plugin/
205
205
  │ └── plugin.json # Claude Code plugin manifest
206
+ ├── CLAUDE.md # Agent instructions (Claude Code / Copilot)
206
207
  ├── pyproject.toml # uv/pip package config
208
+ ├── uv.lock # Locked dependency graph (never stale)
207
209
  ├── LICENSE # Apache 2.0
208
210
  ├── README.md
209
211
  ├── CONTRIBUTING.md
@@ -244,21 +246,30 @@ git clone https://github.com/whitewhiteqq/aws-test-plugin.git
244
246
  cd aws-test-plugin
245
247
 
246
248
  # Install with uv (creates .venv automatically)
247
- uv sync
249
+ uv sync --locked
248
250
 
249
251
  # Run tests
250
252
  uv run pytest tests/ -v
251
253
 
252
254
  # Lint
253
- uv run ruff check src/
254
- uv run ruff format --check src/
255
+ uv run ruff check src tests
256
+ uv run ruff format --check src tests
255
257
 
256
- # Type checking
257
- uv run mypy src/
258
+ # Type checking — ty is the primary checker (fast, replaces mypy)
259
+ uv run ty check src
260
+
261
+ # Type checking — mypy (secondary; kept for compatibility)
262
+ uv run mypy src
258
263
 
259
264
  # Security scans
260
- uv run bandit -q -c pyproject.toml -r src/
265
+ uv run bandit -q -c pyproject.toml -r src
261
266
  uv run pip-audit
267
+
268
+ # Verify lockfile is up to date (must pass before any commit)
269
+ uv lock --check
270
+
271
+ # Regenerate lockfile when pyproject.toml changes
272
+ uv lock
262
273
  ```
263
274
 
264
275
  See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aws-test-plugin"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "AI-powered test generation skills for AWS Python projects — works with Claude Code, GitHub Copilot, and Codex"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -84,6 +84,9 @@ Issues = "https://github.com/whitewhiteqq/aws-test-plugin/issues"
84
84
  requires = ["hatchling"]
85
85
  build-backend = "hatchling.build"
86
86
 
87
+ [tool.uv]
88
+ exclude-newer = "14 days"
89
+
87
90
  [tool.hatch.build.targets.wheel]
88
91
  packages = ["src/aws_test_plugin"]
89
92
 
@@ -110,6 +113,16 @@ warn_unused_configs = true
110
113
  show_error_codes = true
111
114
  pretty = true
112
115
 
116
+ [tool.ty.environment]
117
+ python-version = "3.12"
118
+
119
+ [tool.ty.src]
120
+ include = ["src/**/*.py"]
121
+
122
+ [tool.ty.rules]
123
+ # Promoted to error once ty reaches feature parity with mypy
124
+ possibly-unresolved-reference = "warn"
125
+
113
126
  [tool.pytest.ini_options]
114
127
  testpaths = ["tests"]
115
128
  pythonpath = ["src"]
@@ -128,6 +141,7 @@ dev = [
128
141
  "pytest-cov>=5.0",
129
142
  "ruff>=0.4.0",
130
143
  "mypy>=1.0",
144
+ "ty>=0.0.0a1",
131
145
  "types-defusedxml",
132
146
  "bandit[toml]>=1.7.9",
133
147
  "pip-audit>=2.8.0",
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-contract-testing
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Generate contract tests that validate API schemas, request/response shapes,
5
6
  required fields, security definitions, and step function input/output
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-e2e-testing
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Generate comprehensive end-to-end tests for AWS Python services by reading
5
6
  the actual handler code logic. Covers API Gateway Lambda proxies,
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-integration-testing
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Generate comprehensive integration tests for AWS Python Lambda functions,
5
6
  Batch jobs, and services that interact with S3, DynamoDB, RDS/PostgreSQL,
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-perf-load-testing
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Generate performance benchmarks and load tests for AWS Python services.
5
6
  Performance tests measure Lambda latency, memory usage, cold start time,
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-test-orchestrator
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Master skill for testing AWS Python projects. Discovers project components
5
6
  (Lambda, API Gateway, Step Functions, Batch), reads handler code logic,
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: aws-unit-testing
3
+ license: Apache-2.0
3
4
  description: >
4
5
  Generate thorough unit tests for AWS Python business logic with full branch
5
6
  coverage, boundary value analysis, and edge case testing. Isolates pure