build: reduce sdist below 5 MB with an identical wheel (W1-6) - #478
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.sdistexclut les sorties texte de variance BEAM, captureset 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
.gitignoreré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 avecseul
pyproject.tomldifférent, même Python 3.13.7, Hatchling 1.32.0 haché depuisrequirements/packaging.txt et
SOURCE_DATE_EPOCH=1788703230(date du commit).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/etrequirements/.Commandes de construction, avec l'environnement packaging haché :
Le script local reproductible et les manifestes se trouvent dans
/private/tmp/cortex-green-sdist-proof.shet/private/tmp/cortex-green-sdist.XsuIcl/(log, listes des membres, exigencesTwine 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.
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 soncontenu. 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.