Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0c75bf7
fix(safety): scaffold pyproject-bump-extract helper with contract guards
j7an May 24, 2026
218f246
fix(safety): pyproject parser handles PEP 621 [project] dependencies …
j7an May 24, 2026
ca14936
fix(safety): cover PEP 621 optional-deps, PEP 735 groups, uv constrai…
j7an May 24, 2026
f29b9e0
fix(safety): lock poetry main key=value and python-exclusion behavior
j7an May 24, 2026
28a35c9
fix(safety): lock poetry inline-table version-only bump behavior
j7an May 24, 2026
7c34e22
fix(safety): cover poetry group and legacy dev-dependencies tables
j7an May 24, 2026
1b9e932
fix(safety): cover subdir pyproject paths and multi-file independence
j7an May 24, 2026
8999f1f
fix(safety): lock disqualification rules with negative test fixtures
j7an May 24, 2026
2356888
fix(safety): comment and whitespace churn does not disqualify
j7an May 24, 2026
7d777d1
fix(safety): support escaped-quote markers + lock target-version extr…
j7an May 24, 2026
40dda8e
fix(safety): document diff-aware pyproject clearance in classifier he…
j7an May 24, 2026
3fdea4b
fix(safety): re-sync classify-touched-paths inline copies after docst…
j7an May 24, 2026
fc3e806
fix(safety): wire pyproject helper + EFFECTIVE_TOUCHED into dependenc…
j7an May 24, 2026
8205d2c
fix(safety): mirror pyproject wiring into dependency-cooldown workflow
j7an May 24, 2026
4ca4eb5
fix(safety): track pyproject-bump-extract inline copies in CI sync guard
j7an May 24, 2026
81010f2
fix(safety): integration tests for pyproject helper composition
j7an May 24, 2026
9d8ddb7
fix(safety): clarify classifier's pyproject.toml unsupported test (pa…
j7an May 24, 2026
37aba9b
fix(safety): list pyproject-bump-extract as an inlined helper in CLAU…
j7an May 24, 2026
aae32cd
fix(safety): supply EFFECTIVE_TOUCHED to cooldown guard-runtime tests
j7an May 24, 2026
79fea4c
fix(safety): close five silent-green parser bugs (PR #67 review)
j7an May 24, 2026
f5f7066
fix(safety): re-sync pyproject-bump-extract inline copies after parse…
j7an May 24, 2026
5443814
fix(safety): reset current_key on closing ] to prevent post-close leak
j7an May 24, 2026
b556605
fix(safety): inline 31 unit-level pyproject parser fixtures as heredocs
j7an May 24, 2026
c99ff0a
fix(safety): add diff builders for repetitive pyproject parser tests
j7an May 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ A reusable workflow cannot reliably check out *its own* repo's scripts: in a `wo

`scripts/*.sh` is the source of truth; the inline copy is a derived artifact. **Editing a script means updating its inline copy too**, or `check-inline-sync.sh` fails CI. The sync is byte-for-byte after known normalizations (10-space YAML indent strip, shebang strip, function-wrapper strip). The pairs are listed in `check-inline-sync.sh` (`INLINE_PAIRS`):

- `dependency-cooldown.yml` embeds `extract-deps.sh`, `check-release-age.sh`, `diff-touches-lockfile.sh`, `pr-body-to-deps.sh`
- `dependency-safety.yml` embeds the same four scripts plus `safety-verdict.sh`
- `dependency-cooldown.yml` embeds `extract-deps.sh`, `check-release-age.sh`, `diff-touches-lockfile.sh`, `pr-body-to-deps.sh`, `classify-touched-paths.sh`, `pyproject-bump-extract.sh`
- `dependency-safety.yml` embeds the same six scripts plus `safety-verdict.sh`
- `tag-release.yml` embeds `bump-version-files.sh`

`lint-workflow-call.sh` is the partner guard: it fails CI if any `workflow_call` file reintroduces a caller-scoped ref as a checkout `ref:`.
Expand Down
537 changes: 526 additions & 11 deletions .github/workflows/dependency-cooldown.yml

Large diffs are not rendered by default.

537 changes: 526 additions & 11 deletions .github/workflows/dependency-safety.yml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions scripts/check-inline-sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ INLINE_PAIRS=(
".github/workflows/dependency-safety.yml:scripts/safety-verdict.sh"
".github/workflows/dependency-safety.yml:scripts/classify-touched-paths.sh"
".github/workflows/tag-release.yml:scripts/bump-version-files.sh"
".github/workflows/dependency-cooldown.yml:scripts/pyproject-bump-extract.sh"
".github/workflows/dependency-safety.yml:scripts/pyproject-bump-extract.sh"
)

YAML_INDENT=" " # exactly 10 spaces — matches the `run: |` indent
Expand Down
7 changes: 7 additions & 0 deletions scripts/classify-touched-paths.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@
# unsupported and printed to stdout. Layer 2 (PR-body fallback) may still
# recover deps from some of these for the scan loop, but the guard fires
# because the diff parser cannot prove the scan was complete.
#
# pyproject.toml is path-level unsupported here and may be cleared by
# scripts/pyproject-bump-extract.sh at the workflow composition layer
# when its hunks are proven to be bump-only. This script remains
# path-only and intentionally conservative; the final unsupported set
# in the workflow is produced by composition, not by this classifier
# alone.

set -euo pipefail

Expand Down
Loading
Loading