Repository navigation
Conversation
…reaking) Le développement, les mesures GC/reload des 2.6.x et tous les smoke tests de release tournaient déjà sur CPython 3.14, alors que la matrice CI ne testait que 3.12 et 3.13 : les versions annoncées n'étaient pas celles réellement exécutées. - requires-python >=3.14,<4.0 (était >=3.12) — breaking : pip sur 3.12/3.13 ne sélectionnera plus cette version ni les suivantes (reste sur XCoreRuntime<2.8) - CI : matrice Tests & Coverage ["3.14"] ; lint, docs, security, PR et les deux workflows de release passés en 3.14 (étaient 3.12 ou 3.13) - poetry.lock régénéré pour le nouveau plancher : seuls les marqueurs de version Python et les métadonnées changent, aucune version de paquet ne bouge - devcontainer python:3.14 ; pages d'installation, CLAUDE.md et GEMINI.md à jour - black reste en target-version py313 : avec py314 il réécrit `except (A, B):` en `except A, B:` (PEP 758) sur tout le code - limitation connue : l'extra [cpp] (xcorescanner 0.1.0) n'a pas de wheel cp314 (cp312/cp313 + sdist) — compilation depuis les sources en 3.14 - bump 2.8.0, entrée CHANGELOG dans les deux fichiers
Reviewer's GuideThis breaking release raises the minimum supported Python from 3.12 to 3.14 and standardizes CI, development, documentation, and release workflows on CPython 3.14, with a regenerated lockfile and 2.8.0 metadata/changelog updates; optional C++ installations may build xcorescanner from source until cp314 wheels are available. Sequence diagram for installing XCoreRuntime 2.8.0sequenceDiagram
actor User
participant Pip
participant PyPI
participant XCoreRuntime
participant XCoreScanner
User->>Pip: install XCoreRuntime 2.8.0
Pip->>PyPI: Resolve Requires-Python >=3.14
alt Python 3.14+
PyPI-->>Pip: XCoreRuntime 2.8.0
Pip->>XCoreRuntime: Install
opt cpp extra requested
Pip->>PyPI: Resolve xcorescanner 0.1.0
PyPI-->>Pip: Source distribution
Pip->>XCoreScanner: Build from source
end
else Python 3.12 or 3.13
PyPI-->>Pip: XCoreRuntime 2.7.x
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've reviewed your changes and they look great!
Sourcery assessment
Needs a human reviewer. The new requires-python floor and release/CI configuration make Python 3.14 support the package-wide policy, preventing Python 3.12 and 3.13 users from installing 2.8.0 or later. If that policy is wrong, the impact begins for every affected user at release time and reverting the source cannot undo the already-published package metadata.
…rt new thread en 3.14) TestMemoryLimiter.test_apply_positive appelait MemoryLimiter.apply(512) pour de bon dans le process pytest : setrlimit(RLIMIT_AS, 512 Mo) est irréversible (la limite dure baisse) et valable pour toute la session. Chaque thread créé ensuite réserve ~72 Mo d'espace d'adressage (pile + arène glibc) : après 8 threads, RuntimeError « can't start new thread » — reproduit en local. Les tests placés plus loin dans la session (TestClient de test_xcore_plugin_routes) échouaient selon l'empreinte mémoire de l'interpréteur : jamais en 3.12/3.13, systématiquement sur le runner en 3.14 (Quick Test : « can't start new thread » puis abort dans pydantic-core sur un thread de portail). - le test vérifie l'appel (resource.setrlimit patché) au lieu de l'exécuter, plus un test du cas d'échec (journalisé, pas levé) - tests/conftest.py : fixture autouse qui échoue si un test modifie RLIMIT_AS / RLIMIT_DATA / RLIMIT_CPU du process pytest
|
Abandonnée : on garde |
…hreads (#288) ## Résumé Garde `requires-python = ">=3.12,<4.0"` (pas de breaking change, pas de release) et corrige ce qui empêchait de tester sérieusement sur 3.14. Remplace la PR #287 (plancher Python 3.14), abandonnée au profit de « 3.12 et supérieur ». ## Changements - **CI : 3.14 ajouté à la matrice** (`3.12`, `3.13`, `3.14`). 3.14 est dans la plage supportée et c'est la version utilisée en développement, mais la matrice ne testait que 3.12 et 3.13. - **Test corrigé** : `TestMemoryLimiter.test_apply_positive` appelait `MemoryLimiter.apply(512)` pour de bon dans le process pytest. `setrlimit(RLIMIT_AS, 512 Mo)` est irréversible (la limite dure baisse) et valable pour toute la session : chaque thread créé ensuite réserve ~72 Mo d'espace d'adressage (pile + arène glibc) et, après 8 threads, `RuntimeError: can't start new thread` (reproduit en local). Les tests placés plus loin (les `TestClient` de `test_xcore_plugin_routes`) échouaient selon l'empreinte mémoire de l'interpréteur : jamais en 3.12/3.13, systématiquement sur le runner en 3.14 (dans `Quick Test`, avec en plus un abort dans pydantic-core sur un thread de portail). Le test vérifie maintenant l'appel avec `resource.setrlimit` patché. - **Garde-fou** dans `tests/conftest.py` : fixture autouse qui fait échouer tout test modifiant `RLIMIT_AS` / `RLIMIT_DATA` / `RLIMIT_CPU` du process pytest. ## À savoir - Les jobs `Tests & Coverage` lancent `make test-cov STRICT=0 || echo "Tests échoués"` sur toutes les branches sauf `main` : ils sont verts même quand un test échoue. Seul `Quick Test` (strict) bloque sur une PR. Politique inchangée ici ; vérifier les logs (`passed`/`FAILED`) plutôt que la coche. - Pas de bump de version ni de tag : aucun code du paquet ne change. ## Vérification Suite complète en local sur 3.14 : **1406 passed, 1 skipped** (avec un Redis local comme dans `Quick Test`). ## Summary by Sourcery Test the project on Python 3.14 and isolate process-wide resource-limit tests to keep the suite reliable. Bug Fixes: - Prevent resource-limit tests from altering the pytest process and causing later thread creation failures. - Add coverage for handling resource-limit application failures without raising. Enhancements: - Add an automatic test guard that detects and reports process-wide resource-limit leaks. CI: - Expand the CI Python test matrix to include Python 3.14. Tests: - Update memory limiter tests to mock resource-limit changes and verify the expected calls.
Résumé
Passe le minimum supporté de Python 3.12 à 3.14 et la CI sur 3.14 uniquement. Le développement, les mesures GC/reload des 2.6.x et tous les smoke tests de release tournaient déjà sur CPython 3.14, alors que la matrice CI ne testait que 3.12 et 3.13 : les versions annoncées n'étaient pas celles réellement exécutées.
Changements
requires-python = ">=3.14,<4.0"(était>=3.12).Tests & Coverage=["3.14"]; lint, docs, security, PR et les deux workflows de release passés en 3.14 (ils étaient en 3.12 ou 3.13). Aucune règle de statut requis ne référence les anciens noms de jobs (rulesetsentinel: suppression/non-fast-forward/Copilot review uniquement ;mainnon protégée).poetry.lockrégénéré pour le nouveau plancher : seuls les marqueurspython_versionet les métadonnées changent, aucune version de paquet ne bouge.python:3.14, pages d'installation,CLAUDE.md,GEMINI.md.À savoir avant de fusionner
pip install XCoreRuntimen'y sélectionnera plus la 2.8.0 ni les suivantes (pip retombe sur 2.7.x,XCoreRuntime<2.8).[cpp]:xcorescanner 0.1.0n'a pas de wheelcp314sur PyPI (cp312,cp313+ sdist) → compilation depuis les sources en 3.14 tant qu'un wheelcp314n'est pas publié. Sans l'extra, le scanner AST Python est utilisé.py313: avecpy314il réécritexcept (A, B):enexcept A, B:(PEP 758) dans tout le code.ci.ymlest toujours gardé parmatrix.python-version == '3.11'(reliquat qui n'est plus vrai depuis longtemps) : il ne tourne pas, je n'y ai pas touché.v2.8.0(donc une publication PyPI) reste une décision séparée.Vérification
mkdocs build --strictOK ;poetry check --lockOK ; flake8/black (xcore) propres.Summary by Sourcery
Adopt Python 3.14 as the minimum supported version, align automation and documentation with it, and release the changes as version 2.8.0.
Bug Fixes:
Enhancements:
Build:
CI:
Documentation:
Tests: