From 094290d94b65f0a10c1643a4f9a383f636c2b619 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 8 Sep 2026 01:16:03 +0800 Subject: [PATCH 1/2] Document the three-number PyPI release policy --- AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 924d437..785c807 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,6 +4,8 @@ This file provides guidance to AI coding agents (Claude Code, etc.) when working ## Core Principles (CRITICAL) +**PyPI releases:** Ultralytics-owned packages must use three-number `MAJOR.MINOR.PATCH` versions only; increment the patch number, never add suffixes or bypass version guards. + **Less is more. The simplest solution is the best solution.** The action hierarchy for every change: **Delete > Replace > Add**. 1. **Solve at the owner**: Put behavior in the code path that owns or observes it. For fixes, never guard a symptom with a staleness check, initialization flag, skip-first-call branch, or `try/except` around broken logic; relocate the trigger and delete the wrong path. For features, extend the existing owner rather than creating a parallel abstraction. From c3e66e15fa0c63f8c0694c55467bd968a64cda8f Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 8 Sep 2026 01:19:48 +0800 Subject: [PATCH 2/2] Place the release convention in the existing conventions list --- AGENTS.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 785c807..1622933 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,8 +4,6 @@ This file provides guidance to AI coding agents (Claude Code, etc.) when working ## Core Principles (CRITICAL) -**PyPI releases:** Ultralytics-owned packages must use three-number `MAJOR.MINOR.PATCH` versions only; increment the patch number, never add suffixes or bypass version guards. - **Less is more. The simplest solution is the best solution.** The action hierarchy for every change: **Delete > Replace > Add**. 1. **Solve at the owner**: Put behavior in the code path that owns or observes it. For fixes, never guard a symptom with a staleness check, initialization flag, skip-first-call branch, or `try/except` around broken logic; relocate the trigger and delete the wrong path. For features, extend the existing owner rather than creating a parallel abstraction. @@ -73,6 +71,7 @@ This repository is a standalone, general-purpose OpenAPI-to-SDK and API document ## Conventions +- Ultralytics-owned PyPI packages use `MAJOR.MINOR.PATCH` versions only; no suffixes. - License headers (`# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license`) are added automatically by Ultralytics Actions — don't add or revert them manually. - Generated output must be deterministic and is validated in CI. - Google-style docstrings, modern type hints, and a 120-character Python line length are formatted by Ruff.