You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e90b6de
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -279,7 +287,7 @@ Spot-check with `grep '^version' python/pyproject.toml python/packages/*/pyproje
279
287
Only relevant when `core` itself bumped this cycle. Two policies, pick one explicitly with the user:
280
288
281
289
-**Conservative (default)**: raise `agent-framework-core>=X.Y.Z` to the new core version on every non-core package that is ALSO bumping this cycle. Leaves packages-not-bumped at their existing floor.
282
-
-**Strict per-upstream-doc**: only raise the floor on packages that actually consume a new core API introduced in the bump. This requires per-package code inspection. Use only when the user is comfortable letting `validate-dependency-bounds-test` (lower-resolution pass) catch any mistakes.
290
+
-**Strict per-upstream-doc**: only raise the floor on packages that actually consume a new core API introduced in the bump. This requires per-package code inspection because release probes use the co-released local core and cannot prove compatibility with an older published core floor.
283
291
284
292
When raising a core floor, replace only the `>=OLD` half of the bound you intend to change:
285
293
@@ -294,12 +302,29 @@ If `core` did not bump this cycle, do not touch floors.
294
302
### 7. Validate
295
303
296
304
```bash
297
-
cd python && uv run poe validate-dependency-bounds-test
305
+
cd python && uv run poe validate-python-release --base-ref "$RELEASE_BASE"
298
306
```
299
307
300
-
Must exit 0. This is the safety net for selective bumping: the lower-resolution pass catches floors set too low for code that depends on new APIs, and the upper pass catches caps that exclude installable versions. If it fails, the output names the offending bound — fix and re-run before committing. This step also regenerates `uv.lock` to match new bounds.
308
+
Use the same freshly fetched main ref that the release branch was based on (`upstream/main` above; use `origin/main`
309
+
when that is the authoritative release base). Must exit 0. This task first regenerates `uv.lock`, then discovers the
310
+
package `pyproject.toml` files changed from that base and runs their published runtime dependencies and
311
+
non-development extras through lock-independent `lowest-direct` and `highest` import probes. The probes run in
312
+
parallel, derive the minimum supported Python minor from each package's internal editable closure, and share a hard
313
+
300-second deadline. Use `--python` only when the release requires an explicit interpreter override.
314
+
315
+
This is the release safety net for selective bumping: the lower probe catches unresolvable or unimportable external
316
+
floors, internal constraints that reject co-released package versions, and the upper probe catches caps that exclude
317
+
an installable package set. The JSON report records the concrete versions resolved in both scenarios. It does not
318
+
replace the package-by-package code inspection required by the strict core-floor policy. If it fails, fix the named
319
+
package/bound and re-run before committing.
320
+
321
+
Do not substitute the workspace-wide `validate-dependency-bounds-test` command here. That command runs every
322
+
package's full tests and Pyright in separate isolated environments and is intentionally reserved for CI or an
323
+
explicit dependency-range audit. If the release itself changes an external dependency range, also run
324
+
`validate-dependency-bounds-project --mode both --package <pkg> --dependency <name>` for that dependency.
301
325
302
-
If only prereleases changed (no `core` bump, no floor changes), this validation is still required — `uv.lock` regeneration alone justifies the run.
326
+
If only prereleases changed (no `core` bump, no floor changes), release validation is still required because the
327
+
lockfile and both ends of each changed package's published dependency metadata must remain installable.
303
328
304
329
### 8. Commit (expect hook retry)
305
330
@@ -349,13 +374,14 @@ The push output includes a `Create a pull request for '<branch>' on GitHub by vi
349
374
do not infer a local timezone from the user's current shell.
350
375
-**`Co-Authored-By` trailer.** Never add it. Rewrite/amend if it slipped in.
351
376
-**Stale inventory in this skill.** Always read `python/PACKAGE_STATUS.md` for the live tier map. Do not trust a hardcoded list.
352
-
-**Divergent origin vs upstream.**If the release tags from `upstream/main`but `origin/main` is behind, check both — warn if they differ and offer to sync.
377
+
-**Divergent origin vs upstream.**In fork clones, use freshly fetched `upstream/main`consistently for branch creation, changeset discovery, and release validation. A stale `origin/main` must never become the implicit compare base.
353
378
-**`--pre` README cleanup on promotion.** When a package is promoted to `released` in this cycle, grep for `pip install agent-framework-<pkg> --pre` in READMEs and drop the `--pre` flag.
354
379
-**RC counter inflation.** Do not increment `1.0.0rcN` without a CHANGELOG entry for that package. The counter tracks iterations, not calendar.
355
380
356
381
## References
357
382
358
383
- Package lifecycle and versioning source of truth: `python/.github/skills/python-package-management/SKILL.md`
359
384
- Lifecycle source of truth: `python/PACKAGE_STATUS.md`
360
-
- Validator: `python/scripts/dependencies/validate_dependency_bounds.py` (runs `lowest-direct` and `highest` resolution smoke tests; catches floors/caps that don't match the code)
- Prerelease (`dev`/`a`/`b`/`rc`) and `<1.0` dependencies should use hard bounds with an explicit upper cap (avoid open-ended ranges).
67
71
- For `<1.0` dependencies, prefer the broadest validated range the package can really support. That may be a patch line, a minor line, or multiple minor lines when checks/tests show the broader lane is compatible.
68
72
- Prefer supporting multiple majors when practical; if APIs diverge across supported majors, use version-conditional imports/paths.
69
-
- For dependency changes, run workspace-wide bound gates first, then `validate-dependency-bounds-project --mode both` for the target package/dependency to keep minimum and maximum constraints current. The same task can also drive repo-wide upper-bound automation by using `--package "*"` and omitting `--dependency`.
73
+
- For release-only version, lifecycle, pin, and internal-floor edits, use `validate-python-release`. It refreshes
74
+
`uv.lock`, finds changed package metadata relative to the selected main ref, and runs the changed packages'
75
+
published runtime dependencies and non-development extras through lock-independent `lowest-direct` and `highest`
76
+
import probes on the minimum Python minor supported by each package's internal editable closure. The probes run
77
+
concurrently under one 300-second deadline; pass `--python` only when an explicit interpreter override is needed.
78
+
- For deliberate external dependency-range changes, use
79
+
`validate-dependency-bounds-project --mode both` for the target package/dependency to find and validate the actual
80
+
minimum and maximum constraints. Scope the exhaustive `validate-dependency-bounds-test` matrix to affected
81
+
packages during local iteration; reserve the workspace-wide form for CI or an intentional full audit. The same
82
+
project task can drive repo-wide upper-bound automation by using `--package "*"` and omitting `--dependency`.
70
83
- Prefer targeted lock updates with `uv lock --upgrade-package <dependency-name>` to reduce `uv.lock` merge conflicts.
71
84
- Use `add-dependency-and-validate-bounds` for package-scoped dependency additions plus bound validation in one command.
72
85
- Keep shared tooling and source/type-check support in the root or package `dev` group. Put package-specific test
Copy file name to clipboardExpand all lines: python/scripts/dependencies/README.md
+18-3Lines changed: 18 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,10 +12,19 @@ Run the commands below from the `python/` directory.
12
12
13
13
-`validate_dependency_bounds.py`
14
14
- Main entrypoint for dependency-bound workflows.
15
-
- Supports `test`, `lower`, `upper`, and `both` modes.
16
-
-`test` runs workspace-wide smoke validation at the lower and upper ends of the currently allowed ranges.
15
+
- Supports `release`, `test`, `lower`, `upper`, and `both` modes.
16
+
-`release` refreshes `uv.lock`, then runs changed packages through fast lock-independent lower/upper import probes.
17
+
-`test` runs the exhaustive workspace test+typing compatibility matrix.
17
18
-`lower`, `upper`, and `both` dispatch to the lower/upper optimizer implementations for one package.
18
19
20
+
-`_dependency_bounds_release_impl.py`
21
+
- Discovers package metadata changed from the selected release base.
22
+
- Resolves published runtime dependencies and non-development extras independently of `uv.lock` with both
23
+
`lowest-direct` and `highest` strategies.
24
+
- Derives the minimum supported Python minor from each changed package's internal editable dependency closure.
25
+
- Imports each changed package and records resolved dependency versions in a JSON report.
26
+
- Runs probes concurrently under one five-minute deadline.
27
+
19
28
-`upgrade_dev_dependencies.py`
20
29
- Refreshes exact dev dependency pins across the root `pyproject.toml` and package `pyproject.toml` files.
21
30
- Reuses the same version-selection logic as the upper-bound tooling so direct dev-tooling refreshes and dependency-range expansion stay consistent.
@@ -45,14 +54,18 @@ These are the normal user-facing entrypoints:
45
54
```bash
46
55
uv run poe upgrade-dev-dependency-pins
47
56
uv run poe upgrade-dev-dependencies
57
+
uv run poe validate-python-release --base-ref upstream/main
48
58
uv run poe validate-dependency-bounds-test
49
59
uv run poe validate-dependency-bounds-test --package core
50
60
uv run poe validate-dependency-bounds-project --mode both --package core --dependency "<dependency-name>"
51
61
```
52
62
53
63
-`upgrade-dev-dependency-pins` only refreshes exact dev pins in `pyproject.toml` files.
54
64
-`upgrade-dev-dependencies` refreshes dev pins (using task above), runs `uv lock --upgrade`, reinstalls from the frozen lockfile, then runs `check`, `typing`, and `test`.
55
-
-`validate-dependency-bounds-test` runs the repo-wide lower/upper smoke gate.
65
+
-`validate-python-release` is the bounded release gate: it refreshes `uv.lock`, finds changed package metadata,
66
+
and probes both dependency-bound extremes without reusing the lockfile.
67
+
-`validate-dependency-bounds-test` runs the exhaustive package test+typing matrix and is intentionally not part of
68
+
the routine release path.
56
69
-`validate-dependency-bounds-project` is the single package-scoped task; use `--mode lower`, `--mode upper`, or `--mode both` for the target package/dependency pair. Its `--package` argument defaults to `*`, and `--dependency` is optional, so automation can also use it for repo-wide upper-bound runs.
57
70
58
71
### GitHub Actions workflows
@@ -76,6 +89,7 @@ These are useful for debugging or targeted manual runs:
0 commit comments