Skip to content

build: reduce sdist below 5 MB with an identical wheel (W1-6) - #478

Merged
cdeust merged 6 commits into
mainfrom
build/green-sdist-scope
Sep 6, 2026
Merged

cdeust merged 6 commits into
mainfrom
build/green-sdist-scope

Conversation

@cdeust

@cdeust cdeust commented Sep 6, 2026 •

Copy link
Copy Markdown
Owner

Symptôme

W1-6 / ⚪7 : le sdist embarquait de gros journaux de benchmark et médias,
alors que le wheel ne contient que le package applicatif. PR empilée sur #477.

Cause racine

Hatch utilisait la sélection sdist par défaut sans exclusions propres à cette
cible ; la sélection du wheel était déjà limitée à mcp_server.

Changement

Une table targets.sdist exclut les sorties texte de variance BEAM, captures
et exports vidéo, PNG de documentation, dossiers de publications arXiv et
sorties JSON de campagnes. Les sources applicatives, tous les tests, scripts,
requirements et fixtures sont conservés. Le wheel conserve sa sélection.
Syntaxe de sélection Hatch.
Les exclusions arXiv ciblent explicitement les descendants : les exceptions
PDF du .gitignore réincluaient les fichiers avec un simple glob de dossier.

Preuve

CI externe : run 34038650838 entièrement vert sur la PR #478.

Base a284e473cc4a9d9bcf8c24a21b2e6832e741a245, deux worktrees propres avec
seul pyproject.toml différent, même Python 3.13.7, Hatchling 1.32.0 haché depuis
requirements/packaging.txt et SOURCE_DATE_EPOCH=1788703230 (date du commit).

Artefact Avant Après
sdist 32 062 803 octets 4 947 828 octets
wheel reconstruit depuis chaque sdist 1 827 801 octets 1 827 801 octets, identique octet par octet

SHA256 commun du wheel :
95ece0cda1fe09f7756b30cb4543a892f63fe5301c09354840350d43fc89bcc9.
SHA256 sdist après :
47b81e68992bbd2fba86caca9d0862afe8288d1c951fb2ebccd7a4c7fbf756a9.
twine 7.0.0 check --strict : PASSED sur le sdist et le wheel.
La comparaison des membres confirme les ensembles inchangés sous
mcp_server/, tests_py/, scripts/ et requirements/.

Commandes de construction, avec l'environnement packaging haché :

export SOURCE_DATE_EPOCH=1788703230
uv build "$tree" --sdist --no-build-isolation --python "$packaging_python" --out-dir "$out"
uv build "$out/"*.tar.gz --wheel --no-build-isolation --python "$packaging_python" --out-dir "$out"
cmp "$before_out/"*.whl "$after_out/"*.whl
"$twine_python" -m twine check --strict "$after_out/"*

Le script local reproductible et les manifestes se trouvent dans
/private/tmp/cortex-green-sdist-proof.sh et
/private/tmp/cortex-green-sdist.XsuIcl/ (log, listes des membres, exigences
Twine résolues puis hachées). Aucun upload PyPI effectué.
Charge de mesure 5,37 / 10 cœurs ; disque avant/après 65 GiB.

Gates locaux ordonnés verts : Ruff 1 416 fichiers, craftsmanship, Pyright zéro
diagnostic ; couche scripts 830 passed, 5 skipped, 292 subtests ; suite complète
7 577 passed, 221 skipped, 292 subtests en 156,16 s. Skips PostgreSQL locaux
explicites (localhost:1 indisponible). Charge initiale 4,70 / 10 cœurs,
65 GiB libres avant/après.

uv sync --locked --no-default-groups --extra dev --extra sqlite --group lint
.venv/bin/ruff check
.venv/bin/ruff format --check
.venv/bin/python scripts/check_craftsmanship.py
uv sync --locked --no-default-groups --extra dev --extra postgresql --extra sqlite --extra codebase --extra otel --group typecheck --group lint
.venv/bin/python -m pyright mcp_server/
export CORTEX_TEST_DATABASE_URL=postgresql://localhost:1/cortex_green_isolated
export CORTEX_MEMORY_STORE_BACKEND=sqlite DATABASE_URL=
export HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 CORTEX_RERANKER_OFFLINE=1
.venv/bin/python -m pytest tests_py/scripts/ -q --tb=short
.venv/bin/python -m pytest -q --tb=short

Log des gates : /private/tmp/cortex-green-w1-6-gates.log.

Conformité

Une seule table de configuration modifiée, pas de nouvelle dépendance projet,
aucune baseline ajoutée. Le lock et la cible wheel restent identiques. Tests
et données temporaires isolés, aucune lecture de production. Aucune fusion/issue.

Candidats issues

Le cache du plugin est un clone Git contrôlé par la source ./ de
.claude-plugin/marketplace.json ; les exclusions Hatch ne modifient pas son
contenu. Les médias et résultats exclus du sdist restent disponibles dans Git.
Le clone plugin de 122 Mo relevé par la revue reste un candidat distinct.

Runbook

Le propriétaire décide de la fusion. Aucune opération en production ni
modification du contenu du clone plugin.

@cdeust
cdeust changed the base branch from ci/green-dependency-caches to main September 6, 2026 21:52
@cdeust
cdeust merged commit 5925cfd into main Sep 6, 2026
28 checks passed
@cdeust
cdeust deleted the build/green-sdist-scope branch September 8, 2026 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant