CI : cargo check, cargo test et tauri build sans --locked — un Cargo.lock incohérent serait réécrit en silence avant les gardes #449
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#449
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Contexte
Suggestion non bloquante de la revue de la PR #448 (commentaire 23853) : la CI ne prouve pas elle-même que le lock audité est celui qu'on compile.
check-rust.ymllancecargo check --manifest-path src-tauri/Cargo.toml --all-targets(l. 130) etcargo test --manifest-path src-tauri/Cargo.toml --all-targets(l. 328), tous deux sans--locked. Si leCargo.lockcommité ne correspond plus àCargo.toml(édition à la main, conflit mal résolu, dépendance ajoutée sans son lock), cargo le réécrit dans le checkout du job, sans erreur, puis compile ce graphe-là. Les deux gardes qui suivent (cargo tree --locked, lecture du lock parawk) et l'étapecargo auditlisent alors le lock réécrit, pas le commité. Le commentaire de la gardewindows-sysl'admet (l. 215-217 : « the committed one unless cargo had to update it »), comme l'ADR 0023 (l. 76 : « il lit le lock tel quecargo checkl'a laissé »).release.ymlconstruit les binaires livrés parnpx tauri build --bundles deb,rpm(l. 56) etnpx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc(l. 63), sans--lockednon plus. L'étape 2 de/releaseéditeCargo.lockà la main (blocsimpl-result, « ne PAS regenerer avec cargo ») et le commit de release va surmainsans PR : seule la gardewindows-sysest rejouée, aucuncargo metadata --locked.audit.ymln'est pas concerné : il lit le lock commité (cargo-audit audit --file src-tauri/Cargo.lock), sans build.Analyse (2026-10-16,
maind8037be)cargo metadata --manifest-path src-tauri/Cargo.toml --format-version 1 --lockedest à exit 0 sur le lock actuel.npx tauri build --help(@tauri-apps/cli2.10.0,node_modules/@tauri-apps/cli/package.json) documente[ARGS]...: « Command line arguments passed to the runner. Use--to explicitly mark the start of the arguments », et-r, --runner <RUNNER>: « Binary to use to build the application, defaults tocargo». Le wrappertauri.jstransmet les arguments tels quels au binaire natif ; le relais parcargo-xwinvers cargo n'est pas vérifiable en lisant le code, il faut l'éprouver.Running beforeBuildCommand,Updating crates.io index,Finished release profile). Un journal de build vert ne prouve donc pas que--lockedest passé ; seule la preuve par un lock désaccordé qui fait échouer le build le prouve..github/workflows/check.ymlest déjà déphasé de 365 lignes (ancienne mise en page combinée, en-tête qui cite un.forgejo/workflows/check.ymldisparu) etrelease.ymlde 303 lignes. Dormant, aucune PR côté GitHub (CLAUDE.mdl. 170).scripts/build-latest-json.test.mjsne couvre quelatest.json). Le cacheSwatinem/rust-cache@v2(workspaces: "src-tauri -> target") hache le lock dans sa clé ;--lockedne change pas la clé.Décision de Max (2026-10-16) : portée CI + skill
/release. Le miroir.github/workflows/reste tel quel.Travail à faire
check-rust.yml: ajouter--lockedàcargo check(l. 130) et àcargo test(l. 328). Réécrire le commentaire de la gardewindows-sys(l. 215-217) : le lock lu est le commité,cargo check --lockedayant déjà refusé tout lock à réécrire. Même retouche à l'ADR 0023 (l. 76).release.yml:npx tauri build --bundles deb,rpm -- --locked(l. 56) etnpx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc -- --locked(l. 63).Cargo.tomlmodifié sans son lock (par exemple une borne de dépendance déplacée),cargo check --manifest-path src-tauri/Cargo.toml --all-targets --lockeddoit échouer avec le message de cargo sur un lock à mettre à jour malgré--locked, puisnpx tauri build --bundles deb -- --lockedsous Linux doit échouer de la même façon, ce qui prouve le relais des arguments à cargo. Le relais parcargo-xwinse prouve de même sicargo-xwinest installable localement ; sinon le noter « à confirmer au prochain tag ».check-rustdoit rougir à l'étapecargo check; citer le run. Puis vert sur le lock réel..claude/skills/release/SKILL.md, étape 2 : juste après l'édition deCargo.locket avant la gardewindows-sys, lancercargo metadata --manifest-path src-tauri/Cargo.toml --format-version 1 --locked > /dev/nullet exiger exit 0 (commande déjà dans l'ADR 0023, l. 103-106). Ajouter la ligne au journal des changements du skill.CLAUDE.md, section CI/CD :cargo check --lockedetcargo test --lockeddans la description decheck-rust.yml, et une phrase surrelease.yml(binaires bâtis sur le lock commité, jamais réécrit). Une ligne qui dit pourquoi le miroir.githubn'est pas aligné.Fichiers concernés
.forgejo/workflows/check-rust.yml: l. 130, 328, commentaire l. 215-217.forgejo/workflows/release.yml: l. 56, 63docs/adr/0023-windows-sys-pinning.md: l. 76.claude/skills/release/SKILL.md: étape 2CLAUDE.md: section CI/CDSurface de test
cargo check --locked,npx tauri build -- --locked), rouge CI sur branche jetable (run cité), vert CI sur le lock réel.Critères d'acceptation
cargo checketcargo testdecheck-rust.ymlpassent--locked; commentaire l. 215-217 et ADR 0023 l. 76 réécrits.release.ymlportent-- --locked.cargo check --lockedetnpx tauri build --bundles deb -- --lockedéchouent sur un lock désaccordé, sortie citée dans la PR (message de cargo). Relaiscargo-xwinprouvé ou marqué « à confirmer au prochain tag ».check-rust, run cité.check-rustvert avec--lockedsur le lock actuel./releaseétape 2 lancecargo metadata --lockedaprès l'édition du lock.CLAUDE.mdà jour ; miroir.github/workflows/intact.cargo updated'une PR et l'édition à la main de/releaserestent possibles :--lockedn'interdit que la réécriture implicite pendant la CI et le build.Vérification post-merge (au prochain tag)
-- --lockedsur les deux cibles ; comme le journal n'imprime pas la ligne cargo, le vert plus la preuve locale du point 3 constituent la preuve.Complexité
Simple.
Liens
windows-sys), ADR 0018 et.cargo/audit.toml/release, étape 2 (édition du lock à la main)Plan d'exécution — milestone lot-v018 (planifié le 2026-10-16)
Les sections ci-dessous viennent de la séance
/plan-rundu 2026-10-16 (revue/review-specSécurité, Architecture, Technique comprise). En cas de conflit avec le corps au-dessus, elles priment.Consignes communes
v0.17.2existe (git ls-remote --tags origin v0.17.2). Sinon, arrêt sans rien écrire.main065f580; #369, #419 et #421 les ont déplacés depuis. Repérer chaque site par son contenu (symbole, chaîne), jamais par son numéro.STATE.md: le report dansSTATE.mdse fait au/merge-stack.Depends on
Note : dépendance d'ordre de la pile (fichiers partagés), pas de dépendance de code.
Décisions prises en planification
throwaway-449-lock-mismatchpartant de la branche de l'issue, portant unsrc-tauri/Cargo.tomldésaccordé de son lock.check-rusty est lancé par l'API (POST /repos/maximus/simpl-resultat/actions/workflows/check-rust.yml/dispatchesavec{"ref": "throwaway-449-lock-mismatch"}, 204 attendu), sans ouvrir de PR. Le run rouge est cité dans la PR, puis la branche est supprimée (git push origin --delete throwaway-449-lock-mismatch). Sur la branche de l'issue,git diff main -- src-tauri/Cargo.tomldoit rester vide. Un run en échec ne sauvegarde pas de cache (Swatinem/rust-cache,cache-on-failureà false par défaut) : le cache partagé n'est pas touché.cargo install --locked cargo-xwin --version <X.Y.Z>dansrelease.yml, avec la dernière version stable publiée sur crates.io au moment du maillon, et ajouter une lignecargo-xwin --versionau journal. Raison : l'outil tourne dans l'étape qui porteTAURI_SIGNING_PRIVATE_KEY. Le relais de-- --lockedpar cargo-xwin n'est pas prouvé en local (SDK MSVC de plusieurs Go) : la PR le marque « à confirmer au prochain tag », et la vérification rejoint la liste de la release (le build Windows rougirait avant toute publication, l'updater ne bouge pas).CLAUDE.md, section CI/CD : mentionner aussi l'épinglage de cargo-xwin.Review caveats
check-rustne tourne pas sur un simple push de branche : d'où leworkflow_dispatchci-dessus.Spec source
spec-plan-lot-v018.md
Note du 2026-10-18 :
REVIEW.mdest mergéReprise du commentaire 24475, écrit avant le merge de
REVIEW.md(PR #460,main24da72b).REVIEW.mddécrit la CI sans--locked: la lignecheck-rust.ymldu tableau, les lignescargo checketcargo testdu bloc des commandes locales, et la phrase «cargo checketcargo testtournent sans--lockeddans la CI ; #449 l'ajoute, et sa PR met ce tableau à jour. » La PR de cette issue ajoute--lockedaux commandes du tableau et du bloc, puis retire cette phrase. Repérer ces passages par leur texte, pas par un numéro de ligne.REVIEW.md, cette PR est de niveau haut : elle modifie des étapes de verdict decheck-rust.ymlet toucherelease.yml.REVIEW.mds'ajoute aux fichiers concernés.Note pour la PR de cette issue.
REVIEW.md(PR #460, pas encore mergée) résume les commandes de la CI au 2026-10-17 et écrit, sous le tableau « Commandes de vérification » : «cargo checketcargo testtournent sans--lockeddans la CI ; #449 l'ajoute, et sa PR met ce tableau à jour. »Si #460 est mergée avant, la PR de #449 ajoute
--lockedaux commandes de ce tableau et du bloc des commandes locales, puis retire cette phrase. Selon les règles de #460, cette PR sera de niveau haut : elle modifie des étapes de verdict decheck-rust.yml.