fix(release): apply the review follow-ups of the release-deps stack, drop the linux-x86_64 key #418
No reviewers
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#418
Loading…
Reference in a new issue
No description provided.
Delete branch "review-followups-release-deps"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #320, #345, #376, #358
Corrections demandées par Max le 2026-10-11 (« retire le repli, corrige les suggestions puis merge »), après les quatre
/pr-review(commentaires 22219, 22287, 22437, 22470). Cette PR modifie la garde placée avant leDELETEdulatest.jsonpublié : selon/merge-stack, un tel changement passe par sa propre revue avant le merge de la pile.Ce qui change
Clé générique
linux-x86_64retirée delatest.json(décision de Max, #320) —230ecd8scripts/build-latest-json.shn'écrit plus quelinux-x86_64-deb,linux-x86_64-rpmetwindows-x86_64; le filtre de contrôle etverify-release.shexigent ces trois clés..deb,.rpmet Windows :get_urls(tauri-plugin-updater 2.10.0, relu) cherche d'abord{os}-{arch}-{installer}, et les 64 tags qui embarquent l'updater verrouillent tous plugin 2.10.0 et tauri-utils 2.8.2..debqu'elle servait : ils reçoivent désormaisTargetsNotFoundà la vérification, rien n'est installé. La v0.4.2 n'en était pas (son endpoint répond 404), correction du point 4 de la revue 22437.docs/qa-update-cycle.md,docs/architecture.md, skill/release,STATE.md(puce de release) et CHANGELOG FR/EN (phrase pour ces AppImage) à jour.Contrôle de
latest.jsonpartagé, version épinglée (revue 22437, points 1 et 2) —ba3db7cDELETEpasse derelease.ymlàscripts/check-latest-json.jq, appliqué parjq -e --arg version … -f.scripts/build-latest-json.test.mjsapplique ce même filtre à chaque PR : sortie du script, mauvaise version, dix manifestes fautifs, forme publiée jusqu'à la v0.17.1, JSON invalide. Il compare aussi les listes de clés du script, du filtre et deverify-release.sh.0.18.0doit ressortir en0.18.0, une version vide doit échouer (les deux mutations survivantes de la revue).ADR 0023 et garde
windows-sys(revue 22287) —08d54fdpython3(dépendance transitive des paquetsapt, run 517) ;awkreste, parce que mawk fait partie de l'image de base.awkdit ce que ce test attrape seul ; deux puces de procédure ajoutées (bloc sans arêtewindows-sys, second bloc hors borne) ; la limite du canari est écrite./releaserejoue le garde juste après l'édition deCargo.lock(étape 2), puisque le commit de release n'a pas de PR.Commentaires (revue 22219) —
d1d025daudit.yml: la mesure deconcurrencyne couvre passcheduleniworkflow_dispatch.reportService.test.ts: la CI tourne sous Node 24 depuis #376 (le harnaisnode:sqliterelève de #392)./release:/actions/tasksn'ignorelimitque sanspage(mesuré : 613 lignes sanspage, 5 avec?limit=5&page=2, 30 avec?page=2).npm audit(revue 22470) —9e8c41bCLAUDE.mdetdocs/architecture.md: aucun job n'échoue sur une advisory npm, maisnpm cien imprime le compte à chaque run decheck-frontend, et le Défenseur les relève de son côté.Preuves
9e8c41b, worktree avecnpm cipropre : sonde rouge rc=1,npm run buildvert, 1932 tests / 110 fichiers (1915 + 17).src-tauri/et.cargo/identiques àmainsur toute la pile. Gardewindows-sysrejoué sur le tip :9 checks, exit 0. Les quatre workflows se parsent (PyYAML).verify-release.sh; 3 qui remettent la clé générique (script, filtre,verify-release.sh). Toutes rouges.af986793…4c44, la version de la CI et du conteneur de release) comme sous jq 1.7.release.ymlrejouée sur son texte exact (curlfactice, jq 1.6) : manifeste nominal →DELETEpuisPUT; clé générique, forme publiée en v0.17.1, mauvaise version, JSON invalide → exit 1, aucun appelcurl.verify-release.sh v0.17.1 <fichier>sur des manifestes construits avec les vraies signatures de la v0.17.1 : trois clés →VERDICT : OK; clé générique →INATTENDUE,ÉCHEC; manifeste publié →ÉCHEC./release) : exit 0 sur le lock de la pile, exit 1 sur une arêtecoloreddérivée.Ce qui ne se prouve qu'au prochain tag
L'appel du filtre par
release.ymlet lelatest.jsonà trois clés publié :verify-release.shenVERDICT : OKet l'étape « Generate latest.json » du journal (puce deSTATE.md).Pour relire en priorité
scripts/check-latest-json.jqet son appel dansrelease.yml(garde duDELETE).EXPECTEDdeverify-release.shpar une regex./release.Restent à la synchro post-merge de
STATE.mdLes mentions périmées : #376 en
status:triage(revue 22219), « 2 restantes, acceptées » et #317 (revue 22470), la puce « Nouveau bug ouvert : #320 … ne pas tester » (revue 22437).🤖 Generated with Claude Code
Revue
/pr-review: APPROVERésumé. Le retrait de la clé
linux-x86_64est sûr pour toutes les installations empaquetées, la phrase du CHANGELOG sur les AppImage v0.4.3 à v0.4.5 tient, et le filtre partagé refuse tout ce que la PR annonce, sous jq 1.6 comme sous jq 1.7. Aucun bloquant. Cinq suggestions. La première touche la garde duDELETE: sous jq 1.6, unlatest.jsonvide la passe. Le cas n'est pas atteignable aujourd'hui, mais le correctif tient en trois lignes.Ce que j'ai rejoué (copie hors dépôt de
9e8c41b, supprimée depuis)HEAD is now at 9e8c41b, Nodev24.21.0,jq-1.6,found 0 vulnerabilitiesà l'étapenpm ci,tsc && vite build,scripts/build-latest-json.test.mjs (28 tests), 110 fichiers et 1932 tests,Job succeeded. Run 525 (rust, déclenché par le commentaire modifié decheck-rust.yml) :windows-sys pinning: 9 checks, exit 0, 255 tests Rust ;python3y est bien installé parapt, comme le dit maintenant l'ADR.npm cipropre) : 110 fichiers et 1932 tests verts sous jq 1.6 (binaire officiel, sha256af986793…4c44) ; le fichier du script passe à 28/28 sous jq 1.6 comme sous jq 1.7.get_urls(tauri-plugin-updater2.10.0) essaie{os}-{arch}-{installer}, puis{os}-{arch}, etcheck()l'appelle avant de comparer les versions : une installation sans clé à elle échoue donc même quand elle est à jour.Builder::new().build(),check()sans option dansuseUpdater.tsetErrorPage.tsx).tauri-utils2.8.2 et@tauri-apps/cli2.10.0, et v0.1.0 à v0.2.0 n'ont pas d'updater.appimagereste dansbundle.targetsjusqu'à la v0.7.3, mais aucune AppImage n'a été publiée après la v0.4.5.release.ymlne copie d'AppImage qu'en v0.4.2 et v0.4.3, puis passe--bundles deb,rpmdès la v0.4.4.…/releases/latest/download/latest.jsonen v0.4.2 (404, revérifié ce jour), le registre dès la v0.4.3. La plage « v0.4.3 à v0.4.5 » tient..debpassait etinstall_appimageécrivait ses octets.{"version":"0.17.1","keys":["linux-x86_64","windows-x86_64"]}.DELETE. J'ai extrait l'étape « Publish » derelease.ymlpar PyYAML et l'ai lancée telle quelle (bash --noprofile --norc -e -o pipefail,curlfactice qui journalise ses appels) :release-assets/latest.jsonDELETEpuisPUTDELETEpuisPUTDELETEpuisPUTverify-release.sh v0.17.1 <fichier>sur des manifestes construits avec les vraies signatures de la v0.17.1 : trois clés →VERDICT : OK, exit 0 ; clé générique ajoutée →clé INATTENDUE,ÉCHEC;latest.jsonpublié →INATTENDUEet deuxMANQUANT,ÉCHEC./release, lancée depuis la racine : exit 0, dernière lignewindows-sys pinning: 9 checks, exit 0. Une arêtecoloredpassée à0.48.0donneFAIL: colored 3.1.1 -> windows-sys 0.48.0, pinned at 0.61.2, exit 1. Le texte de l'étape ne lit jamais son entrée standard (awksur fichier, boucle sur<<<), donc le passage par un tube versbashne tronque rien./actions/tasks: sanspage, 615 lignes, avec ou sanslimit=5;?limit=5&page=2→ 5 ;?page=2→ 30. La phrase du skill tient.trueall(→any(length > 0→>= 0.rpmretirée.debretirée.exeretiréeendswith(".exe")→contains(".exe")and→oraprès la version0.17.1verify-release.sh: la clé générique réattendueverify-release.sh: clé Windows retiréeverify-release.sh: dictionnaire écrit endict(...)nullstartswith0.17.10contre0.17.1)Points examinés sans grief
ref_action: none. Chacune est fermée par sa propre PR : #376 par #414, #345 par #415, #320 par #416, #358 par #417. Les messages de commit disentRefs.src-tauri/et.cargo/sont identiques àmainsur toute la pile, etmain(87920ec) est ancêtre de la tête.audit.ymlest cohérent avec la mesure decheck-rust.yml(pushetpull_requestseulement). La phrase surnpm ciest confirmée par le run 524.pathsdecheck-rust.yml.Suggestions (non bloquantes)
DELETElaisse passer unlatest.jsonvide sous jq 1.6, la version du conteneur de release (ligne en gras du tableau 5).jq -esort en 0 quand il ne lit aucune valeur ; jq 1.7 sort en 4. Sous les deux versions, un fichier à deux documents dont le dernier est valide passe aussi, alors que l'updater le refuserait (serde : caractères en trop).-saux deux appels (release.ymletcheck()du test) et envelopper le filtre danslength == 1 and (.[0] | … ). Deux tests à ajouter :check("")et deux documents.-s, le filtre reçoit l'objet :lengthvaut alors 4, et l'échec est bruyant, pas silencieux.verify-release.sh.check-frontend.ymlignore.claude/**et.forgejo/workflows/release.yml. Une PR qui ne change que le dictionnaireEXPECTEDdeverify-release.sh, ou que l'appel du filtre dansrelease.yml, ne lance donc pas le test d'alignement.scripts/, le lancent toujours, et ce sont les deux listes qui comptent avant leDELETE. Une dérive deverify-release.shne se verrait qu'au verdict de l'étape 9, après la publication, sans dommage pour le registre.docs/architecture.md, dans l'en-tête decheck-latest-json.jqet dans le commentaire derelease.yml(« à chaque PR qui touchescripts/»), ou bien retirer.claude/**dupaths-ignore.release.yml, étape « Generate latest.json » (ligne 104) : « One key per Linux package, a .deb fallback and the NSIS installer ». Il n'y a plus de repli.release.ymlreste hors des tests (limite déjà écrite dans le corps de la PR).jq -eenjqdansrelease.yml: la suite reste à 28/28, alors que l'étape rejouée fait alors leDELETEpuis lePUTd'un manifeste à clé générique, ou d'une mauvaise version.release.ymlet la jouer avec uncurlfactice, comme au point 5.tauri devsous Linux. C'est un binaire sans marqueur : sa vérification échoue désormais avecTargetsNotFound, même quand il est à jour, puisqueget_urlspasse avant la comparaison des versions. Une ligne dansdocs/qa-update-cycle.mdévitera de prendre cette erreur pour une régression pendant le développement.Actions faites
9e8c41bdans/tmp/pr418-review, avec sonnpm ci), binaire jq 1.6, journaux des runs 524 et 525, signatures de la v0.17.1, répertoires de rejeu et script de mutations : supprimés (/tmp/pr418-*). Le dépôt principal et le worktree de l'auteur n'ont pas été touchés.status:approved, et cette PR n'en ferme aucune.