Skip to content

Commit 6143d00

Browse files
Update review skills and changelogs to use unreleased section (#2672)
* Update review skills and changelogs to use unreleased section * Align with CR comments * Versioning exceptions --------- Co-authored-by: Paweł Pęczek <146137186+PawelPeczek-Roboflow@users.noreply.github.com> Co-authored-by: Paweł Pęczek <pawel@roboflow.com>
1 parent 8bd1cdb commit 6143d00

12 files changed

Lines changed: 136 additions & 75 deletions

File tree

.claude/skills/add-inference-model/SKILL.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,13 @@ Add a package-URL constant and a `pytest.fixture(scope="module")` in `inference_
115115

116116
Start from loading a **local** package while experimenting, then follow up by uploading that package as a `*.zip` asset and adding a fixture that downloads it at test time, as other integration tests do.
117117

118-
### 5. Version + changelog companion (required)
118+
### 5. Changelog companion (required)
119119

120-
Any PR that ships model code in `inference_models` must bump the package version and record the change — the sibling `review-inference-models-pkg` skill enforces this:
120+
Any PR that ships model code in `inference_models` must record the change. The
121+
package version is selected and bumped later by maintainers:
121122

122-
- Bump `version = "..."` in `inference_models/pyproject.toml`.
123-
- Add an entry under a new version heading in `inference_models/docs/changelog.md` (follow the existing `## \`<version>\`` → `### Added` format at the top of the file).
123+
- Add an entry under `## Unreleased` in `inference_models/docs/changelog.md`, using the appropriate `### Added`, `### Changed`, `### Fixed`, or `### Removed` subsection.
124+
- Do not edit `inference_models/pyproject.toml` solely to bump its version.
124125

125126
### 6. Workflow block (surface 3, optional)
126127

@@ -183,7 +184,7 @@ Before declaring done:
183184
- [ ] Architecture registered in `models_registry.py`; import + class resolve without error
184185
- [ ] `YourClass.from_pretrained(local_dir)` loads from a flat directory of files (smoke-tested)
185186
- [ ] `inference_models` unit tests pass (from `inference_models/` cwd)
186-
- [ ] `inference_models/pyproject.toml` version bumped + `inference_models/docs/changelog.md` entry added
187+
- [ ] `inference_models/docs/changelog.md` entry added under `## Unreleased` (version bump left to maintainers)
187188
- [ ] If surface 3: workflow-block unit tests pass (from repo root)
188189
- [ ] Model packaged & registered via the internal Inference Core team tooling (staging, then production after approval) — coordinate with the team
189190
- [ ] `AutoModel.from_pretrained("<arch>/<default>")` loads + runs once registered

.claude/skills/create-workflow-block/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ These hold regardless of category — the per-category references only add nuanc
6060
- [ ] `type` Literal `roboflow_core/{family}@v{N}` (+ legacy alias if replacing one).
6161
- [ ] Inputs are `Selector(kind=[...])` / `Union[literal, Selector(...)]` with rich `Field(description=, examples=)` (docs are generated from these).
6262
- [ ] `describe_outputs()` matches every key `run()` emits — on every path (empty / error branches included).
63-
- [ ] `get_execution_engine_compatibility()` set to the minimum EE version you rely on.
63+
- [ ] `get_execution_engine_compatibility()` set to the TRUE minimum EE version you rely on — look up which EE version introduced each capability you use in `docs/workflows/execution_engine_changelog.md`; do not copy-paste the default range. If a capability you need is still under `## Unreleased`, the EE version must be placed and bumped first (maintainer-coordinated) so your range can reference it.
6464
- [ ] Batch / dimensionality hooks declared if the block batches inputs or changes nesting level.
6565
- [ ] Registered in `core_steps/loader.py` (`load_blocks()`); any new kind in `types.py` + `load_kinds()` + a serializer/deserializer pair.
6666
- [ ] Producing/moving detections: parent-coordinate metadata attached.
6767
- [ ] Stateful block: state keyed by `video_identifier` + evicted; `get_restrictions()` declared; `NotImplementedError` on `StepExecutionMode.REMOTE` if remote is incoherent.
6868
- [ ] Unit test under `tests/workflows/unit_tests/core_steps/...` + integration test under `tests/workflows/integration_tests/execution/...`.
69-
- [ ] Bump `EXECUTION_ENGINE_V1_VERSION` + `docs/workflows/execution_engine_changelog.md` ONLY if the EE itself changed (no `inference/core/version.py` bump — that is handled at release time).
69+
- [ ] If the EE itself changed, add its user-facing entry under `## Unreleased` in `docs/workflows/execution_engine_changelog.md`; maintainers bump the EE version at release time.
7070
- [ ] Do NOT hand-write `docs/workflows/blocks/<block>.md` — it is generated from manifest field descriptions.
7171

7272
Reviewer's checklist for block PRs: `review-workflows-blocks`.
@@ -85,7 +85,7 @@ Rules from `docs/workflows/versioning.md` and `docs/workflows/blocks_bundling.md
8585

8686
- **Bug-fix in place; anything else is a new version.** Only patch the existing `vN.py` for bug fixes. Behavioral/interface changes create `v(N+1).py` in a new module under the block package — **stability over DRY**; code duplication is accepted and blocks stay independent.
8787
- **Type identifiers & aliases.** Convention `{plugin}/{block_family}@v{X}` (e.g. `roboflow_core/detection_offset@v1`). The `type` `Literal` may list a legacy alias (`"DetectionOffset"`) so old definitions keep parsing.
88-
- **EE compatibility.** Every manifest returns a semver range from `get_execution_engine_compatibility()`; if a block needs a feature added in `1.3.7`, declare `">=1.3.7,<2.0.0"`. A definition's `version: 1.1.0` resolves to `>=1.1.0,<2.0.0`. History: `docs/workflows/execution_engine_changelog.md`.
88+
- **EE compatibility.** Every manifest returns a semver range from `get_execution_engine_compatibility()`; if a block needs a feature added in `1.3.7`, declare `">=1.3.7,<2.0.0"` — derive the floor from the changelog, never copy-paste the default. A feature still under `## Unreleased` has no version to declare against: the EE version must be placed and bumped (maintainer-coordinated) before the block ships. A definition's `version: 1.1.0` resolves to `>=1.1.0,<2.0.0`. History: `docs/workflows/execution_engine_changelog.md`.
8989
- **Plugin layout & the `__init__.py` requirement.** A plugin is a Python package: `{plugin}/{block_name}/v1.py` per block, plus a main `__init__.py` exposing `load_blocks()` (required), optionally `load_kinds()`, `REGISTERED_INITIALIZERS`, and `KINDS_SERIALIZERS`/`KINDS_DESERIALIZERS`. See `docs/workflows/blocks_bundling.md`.
9090

9191
## Block categories (per-category references)

.claude/skills/review-cli-cloud-tooling/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ Two distinct cloud surfaces live here — do not conflate them:
8080
- **Tests** — logic changes need unit tests under `tests/inference_cli/unit_tests/lib/...` mirroring the source tree; user-visible changes update integration tests under `tests/inference_cli/integration_tests/`. (#891 updated both.)
8181
- **CI deps** — new runtime imports must be covered by the unit-test CI install list; `inference` is an optional dep, so new deps typically belong in `requirements/requirements.cli.txt`.
8282
- **Docs** — user-facing command/option changes update `docs/inference_helpers/cli_commands/{benchmark,cloud,workflows,infer,server}.md`. Batch-processing API swagger is exposed externally - tag @Erol444.
83-
- **Enterprise / inference_models** — inference-compiler PRs (#2186) also touch `inference_models/pyproject.toml`, `inference_models/docs/changelog.md`, and weights-provider code — verify they move together.
83+
- **Enterprise / inference_models** — inference-compiler PRs (#2186) also touch weights-provider code and must add user-facing changes under `## Unreleased` in `inference_models/docs/changelog.md`; apply `review-inference-models-pkg` to any `pyproject.toml` dependency changes, but do not ask the contributor for a version bump.
8484

8585
## Key files & entry points
8686
- `inference_cli/main.py` — root Typer `app` + `--version` callback; mounts `server`/`cloud`/`benchmark`/`workflows`/`rf-cloud`/`enterprise` sub-apps.

.claude/skills/review-inference-models-pkg/SKILL.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ OUT of scope (defer to sibling skills): `inference/core/**` model adapters, work
1616
## Review checklist
1717
Severity tags: **BLOCK** = must fix before merge; **FLAG** = raise it; **NIT** = optional.
1818

19-
1. **BLOCK** — Functional change but no version bump in `inference_models/pyproject.toml` (`version = "0.29.x"`) OR no `docs/changelog.md` entry. See *Required companions*.
19+
1. **BLOCK** — Functional change but no entry under `## Unreleased` in `inference_models/docs/changelog.md`. Do not ask the contributor to bump a version. See *Required companions*.
2020
2. **BLOCK** — Deps changed in `pyproject.toml` but `uv.lock` not regenerated, or shared server deps not mirrored into `requirements/*.txt`.
2121
3. **BLOCK** — New model/backend not registered in `REGISTERED_MODELS`, or missing `from_pretrained(**kwargs)`, resolvable `LazyClass`, integration tests, or `docs/models/*`. See *Standards §1–2*.
2222
4. **BLOCK** — Prediction-entity field shape/semantics (`xyxy`/`class_id`/`confidence`/`mask`) changed non-additively, or a backend / `to_supervision()` / `docs/api-reference/*` left un-updated. See *Standards §3*.
@@ -32,7 +32,8 @@ Severity tags: **BLOCK** = must fix before merge; **FLAG** = raise it; **NIT** =
3232

3333
### Not blocking
3434
- Do NOT demand a **speed-verification** or **prediction-correctness** artefact from the diff — those live in the PR description / attached evidence, not the tree (see *Required companions*). Confirm they were provided; do not block on their absence from the diff.
35-
- Do NOT block a doc-only, changelog-only, or test-only PR for a missing version bump.
35+
- Do NOT block a doc-only or test-only PR for a missing changelog entry.
36+
- Do NOT ask contributors to change `inference_models/pyproject.toml` or `inference/core/version.py`; maintainers version releases separately.
3637
- Do NOT treat a `supervision`-constructor guard as an inference_models concern — that guard lives in the workflows viz block (#2467); on this surface #2467 was only additive `keypoints_detection.py` enrichment.
3738
- Do NOT block a clean **revert** (#2241, #2087) for removing registry/CI/deps/changelog together — that is the correct rollback shape.
3839

@@ -61,9 +62,10 @@ Severity tags: **BLOCK** = must fix before merge; **FLAG** = raise it; **NIT** =
6162
11. **Tolerant test assertions.** New integration/e2e/GPU assertions use tolerant comparisons (`>=`, loosened tolerance), not exact box-count/class-set equality, which flakes on GPU/ONNX (#2026, #1646, #1649, #1809, #1638, #1843). Keypoint/segmentation slicing uses model-declared slot counts, not `-1` inference (#1626 broke multi-class keypoints with `5 + num_classes` / `view(..., -1, 3)`; fix uses fixed `6:` offset + `_key_points_slots_in_prediction`).
6263

6364
## Required companions
64-
Block a functional change unless it carries these (condition → required file):
65+
Block a functional change unless it carries these contributor-owned companions
66+
(condition → required file):
6567

66-
- **Any functional change**version bump in `inference_models/pyproject.toml` AND a `docs/changelog.md` entry under a new `` ## `{version}` `` heading with `Added`/`Fixed`/`Changed`. (No `inference/core/version.py` bump — inference releases are versioned separately.)
68+
- **Any functional change**an entry under `## Unreleased` in `inference_models/docs/changelog.md`, using `Added`/`Changed`/`Fixed`/`Removed` as appropriate.
6769
- **`pyproject.toml` deps changed**`inference_models/uv.lock` regenerated (`uv sync`); shared server deps also mirrored into `requirements/*.txt` (#2047, #2449 security bumps, #2415/#2510 dep updates).
6870
- **New error class**`docs/errors/<page>.md` section + `help_url` anchor.
6971
- **New model**`REGISTERED_MODELS` entry + `docs/models/<model>.md` + a license file for the model-family dir, listed in `docs/models/index.md`.
@@ -76,6 +78,16 @@ Non-diff-checkable — **verify via the PR description / attached evidence, not
7678
- **Speed verification** → new-model contributions must attach speed evidence on NVIDIA L4 GPU and MacBook (MacBook optional if unsupported), comparing our implementation vs. the original. Absence blocks approval.
7779
- **Prediction correctness** → new or substantial model changes must show predictions are reasonable — ideally integration tests asserting meaningful prediction qualities; for modifications, existing tests suffice or manual evidence against the unchanged code. Absence blocks approval.
7880

81+
## Release notice
82+
83+
For every functional `inference_models` change, add a non-blocking top-level
84+
review notice addressed to maintainers: **inference-models requires a version
85+
bump for release**. This notice is required even when the contributor supplied
86+
the changelog entry. Maintainers choose the version, update
87+
`inference_models/pyproject.toml` and related lock-step pins/lockfiles, move the
88+
entries into the final version section, and leave a fresh `## Unreleased`
89+
section for subsequent contributions.
90+
7991
## Key files & entry points
8092
- `models/auto_loaders/``core.py` (`AutoModel.from_pretrained`), `models_registry.py` (`REGISTERED_MODELS`), `auto_negotiation.py`, `ranking.py`, `model_cache_paths.py`.
8193
- `models/base/*.py` — prediction entities + base model classes + `to_supervision()`.

.claude/skills/review-packaging-ci/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ OUT of scope (defer): library/business logic under `inference/`, `inference_mode
6767

6868
## Required companions
6969
Block the PR if a change lacks its companion:
70-
- **Release PR** ("Release X.Y.Z") → bump `inference/core/version.py` `__version__` AND `inference_models/pyproject.toml` `version` AND `inference_models/uv.lock` AND all 4 `inference-models~=` pins. RC→final drops the `rc` suffix in every place (#2341).
70+
- **Release PR** ("Release X.Y.Z") → bump `inference/core/version.py` `__version__` AND `inference_models/pyproject.toml` `version` AND `inference_models/uv.lock` AND all 4 `inference-models~=` pins, then amend `inference_models/docs/changelog.md` by replacing `## Unreleased` with the released version heading and adding a fresh `## Unreleased` section. RC→final drops the `rc` suffix in every place (#2341).
7171
- **`inference-models` bump anywhere** → the other 3 requirements files + `pyproject.toml` + `uv.lock`. Never one-of-four (#2341).
72-
- **`inference_models/pyproject.toml` dep add/bump** → regenerated `inference_models/uv.lock` in the same PR (#2301) + an `inference_models/docs/changelog.md` entry under the new `## \`X.Y.Z\`` header for user-facing changes.
72+
- **`inference_models/pyproject.toml` dep add/bump** → regenerated `inference_models/uv.lock` in the same PR (#2301) + an `inference_models/docs/changelog.md` entry under `## Unreleased` for user-facing changes.
7373
- **New Docker image target** → its `.github/workflows/docker.<name>.yml` + Dockerfile + (if published) publish script + `permissions:`. Removing a target removes all of these (#2149).
7474
- **New PyPI wheel / requirements group** → wire into `.release/pypi/*.setup.py` and/or `Makefile:create_wheels` and the relevant `test_package_install_*.yml`.
7575
- **New runtime dep** → correct `requirements/*.txt` AND every Dockerfile target that uses it (system libs via `apt/dnf`, e.g. `libvips` #1209, `rustc` #975).

0 commit comments

Comments
 (0)