ci: --locked in check-rust and the release builds, cargo-xwin pinned, cargo metadata --locked in /release (#449) #469
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#469
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-449-cargo-locked"
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?
Resolves #449
Generated autonomously by /autopilot run of 2026-10-18
Résumé
Maillon 2 sur 8 de la pile
planned-2026-10-16-lot-v018, basé surissue-453-i18n-keys-guard(PR #468).La CI et le build de release compilaient sans
--locked: unCargo.lockdésaccordé deCargo.tomlétait réécrit dans le checkout du job sans aucun échec, et les deux gardes, l'audit et les binaires livrés partaient alors du lock réécrit, pas du commité. Désormais :check-rust.yml:cargo check --manifest-path src-tauri/Cargo.toml --all-targets --lockedetcargo test --manifest-path src-tauri/Cargo.toml --all-targets --locked. Le commentaire de la gardewindows-sysqui disait « the committed one unless cargo had to update it » est réécrit : le lock lu est le commité.release.yml:npx tauri build --bundles deb,rpm -- --lockedetnpx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc -- --locked. cargo-xwin est épinglé (cargo install --locked cargo-xwin --version 0.23.1) et l'étape affichecargo-xwin --version. 0.23.1 est la dernière stable de crates.io au 2026-10-18 (max_stable_version, publiée le 2026-08-13) et la version qu'a installée, sans épinglage, la release v0.17.2 (run 570 :Installed package cargo-xwin v0.23.1) : l'épinglage ne change pas l'outil./release, étape 2 :cargo metadata --manifest-path src-tauri/Cargo.toml --format-version 1 --locked > /dev/nulljuste après l'édition du lock, avant la gardewindows-sys, avec le message de refus réel de cargo ; étape 0 :--lockedsurcargo checketcargo test(décision MEDIUM ci-dessous) ; ligne au journal du skill,updated:à 2026-10-18.cargo checkl'a laissé » réécrite),CLAUDE.md(section CI/CD, avec la raison du miroir non aligné),REVIEW.md(tableau et bloc des « Commandes de vérification » avec--locked, phrase « #449 l'ajoute » retirée, et règle de la zone Release qui disait cargo-xwin installé sans version épinglée),docs/architecture.md(paragraphecheck-rust.yml, paragraphe « Lock commité, cargo-xwin épinglé » dansrelease.yml)..github/workflows/intact (décision de Max). Aucune entrée de CHANGELOG : rien de visible pour l'utilisateur.Le
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 (le premier commite le lock qu'il écrit, la seconde est vérifiée parcargo metadata --locked).Fichiers
.forgejo/workflows/check-rust.yml--lockedsurcargo checketcargo test, commentaires (#449).forgejo/workflows/release.yml-- --lockedsur les deuxnpx tauri build, cargo-xwin 0.23.1 épinglé,cargo-xwin --version.claude/skills/release/SKILL.mdcargo metadata --locked, étape 0--locked, journal,updated:docs/adr/0023-windows-sys-pinning.mdCLAUDE.mdREVIEW.mddocs/architecture.mdcheck-rust.yml,release.yml)Aucun déclencheur, aucune référence à
secrets, aucun workflow ajouté ;src-tauri/inchangé (git diff origin/main -- src-tauri/Cargo.tomlvide).Preuves
Désaccord utilisé partout :
urlencoding = "2"→urlencoding = "=2.1.2"danssrc-tauri/Cargo.toml. Le lock porte 2.1.3 etsimpl-resultest le seul dépendant deurlencoding: la borne déplacée se résout, seul le lock est en désaccord. Chaque essai local a été fait après les commits, puisgit checkout -- src-tauri/Cargo.toml src-tauri/Cargo.locketgit status --shortvide. Local : cargo 1.94.1,@tauri-apps/cli2.10.0, cargo-xwin 0.23.1.cargo check --manifest-path src-tauri/Cargo.toml --all-targets --lockederror: cannot update the lock file …/src-tauri/Cargo.lock because --locked was passed to prevent this; lock intactcargo test --manifest-path src-tauri/Cargo.toml --all-targets --lockednpx tauri build --bundles deb -- --lockedbeforeBuildCommandpasse, puis le même message de cargo etfailed to build app; lock intactnpx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc -- --lockedfailed to build app; lock intactcargo metadata --manifest-path src-tauri/Cargo.toml --format-version 1 --locked(étape 2 du skill)cargo check --manifest-path src-tauri/Cargo.toml --all-targetsLocking 1 package,Downgrading urlencoding v2.1.3 -> v2.1.2,Finished, etCargo.lockréécrit : le défaut de l'issue, que L1 refusenpx tauri build --bundles debsans-- --locked,cargoespion qui remplacecargo buildpar la résolution qu'il feraitcargo build --bins --features tauri/custom-protocol --release, sans--locked; la résolution passe (rc 0) etCargo.lockest réécritnpx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvcsans-- --locked, même espioncargo build --features tauri/custom-protocol --target x86_64-pc-windows-msvc --release --bins, sans--locked;Cargo.lockréécrit. Ni la CLI ni cargo-xwin n'ajoutent--lockedd'eux-mêmes : seul-- --lockedle portecargo install --locked cargo-xwin --version 0.23.99 --root /tmp/…(version inexistante, racine jetable)could not find cargo-xwin in registry crates-io with version =0.23.99: la version sans opérateur est lue comme=, sans repli sur une autre ; rien d'installé, cargo-xwin local toujours en 0.23.1check-rustparworkflow_dispatchsur la branche jetablecargo check, citation ci-dessousRelais des arguments jusqu'à
cargo build(le journal de release n'imprime jamais la ligne de cargo, d'où cette preuve) :npx tauri build -v --runner cargo-xwin …imprime :cargoespion placé en tête duPATH(il journalise ses arguments puis lance le vrai cargo) a enregistré, pour L4 : sixcargo metadata --no-deps --format-version 1, puiscargo build --features tauri/custom-protocol --target x86_64-pc-windows-msvc --locked --release --bins, dans l'ordre propre à cargo-xwin : c'est bien cargo-xwin qui passe--lockedàcargo build. Pour L3 : les mêmescargo metadata --no-deps, puiscargo build --locked --bins --features tauri/custom-protocol --release. Aucun autre appel à cargo ne résout les dépendances :--no-depsne touche pas au lock, si bien que ni la CLI de Tauri ni cargo-xwin ne réécrivent le lock avant le build.Preuve CI (run 572)
Branche
throwaway-449-lock-mismatch= tête de cette branche (14badbe) plus un commit (23d8190) qui porte le manifeste désaccordé ;check-rustlancé parPOST …/actions/workflows/check-rust.yml/dispatches(204), aucune PR ouverte. Run 572 (https://git.lacompagniemaximus.com/maximus/Simpl-Resultat/actions/runs/572), cargo 1.99.1, en échec à l'étapecargo check:C'est la seule commande cargo exécutée après la restauration du cache : la garde suivante n'a rien imprimé, « Install cargo-audit » a été sautée, et le post-step du cache n'a rien sauvegardé (cache partagé intact). Branche supprimée ensuite (
git push origin --delete,ls-remotevide, API 404).Vert
cargo check --manifest-path src-tauri/Cargo.toml --all-targets --lockedexit 0 ;cargo test --manifest-path src-tauri/Cargo.toml --all-targets --locked: 267 passed, 1 ignored ;cargo metadata … --lockedexit 0.check-rust(le diff touchecheck-rust.yml) avec--lockedsur le lock réel : c'est le critère «check-rustvert avec--lockedsur le lock actuel ». L'orchestrateur la surveille, je ne l'ai pas attendue.check-frontendtourne aussi (release.ymlet.claude/**).LockingniDowngradingdans les deux builds Tauri, et aucun fichier Cargo n'a changé depuis le tag : le lock commité y a servi tel quel,--lockedn'y aurait pas échoué. La preuve reste le prochain tag (ci-dessous).Tests
src/zz_tmp_probe.test.tsrouge, supprimé) ;npm run buildvert.cargo test --locked267 passed, 1 ignored (aucun code Rust touché).python3 scripts/review-levels.py --check: ok, 37 motifs (section « Niveaux » deREVIEW.mdnon touchée).scripts/build-latest-json.test.mjs, qui exécute l'étape « Publish » derelease.yml, passe (étape non touchée).Décisions
cargo help installdit qu'une version sans opérateur « will install exactly that version; it is not treated as a caret requirement ».REVIEW.md, zone « Release et mise à jour » : la règle disait cargo-xwin « installé à chaque tag sans version épinglée », fait rendu faux par cette PR, donc réécrit (règle deREVIEW.mdsur les faits cités) ; la lignerelease.ymldu tableau nomme l'épinglage et-- --locked./releaseaussi en--locked, au-delà de l'étape 2 demandée : sans lui, un lock que cargo réécrirait pendant le pré-vol, dans l'arbre de Max, partirait sans relecture dans le commit de release (Cargo.lockfait partie des sept fichiers commités), et lecargo metadata --lockedde l'étape 2 passerait sur ce lock réécrit, devenu cohérent. Écarté : laisser l'étape 0 telle quelle (diff plus petit, mais le trou reste sur le seul chemin sans PR).urlencoding) ; écartés : la version de l'app changée d'un seul côté (valable, mais lie la preuve au bump de release) et une dépendance ajoutée (plus de bruit).Vérifications manuelles dues (prochaine release)
release.ymldu prochain tag vert sur les deux cibles avec-- --locked. Dans le journal (route web, codes ANSI retirés), l'étape « Install Windows cross-compile dependencies » doit montrer l'installation de 0.23.1 puis la sortie decargo-xwin --version, et chaque build Tauri sa ligneFinished(Linux puis Windows), sans aucune lignecannot update the lock file: Comme le journal n'imprime pas la ligne de cargo, ce vert plus les preuves L3, L4 et l'espion ci-dessus constituent la preuve (critère post-merge de l'issue)./releaseau prochain tag :cargo metadata --manifest-path src-tauri/Cargo.toml --format-version 1 --locked > /dev/nullà exit 0 sur le lock édité à la main, avant la gardewindows-sys; étape 0 aveccargo check --locked && cargo test --locked./release(cycle réel de mise à jour,docs/qa-update-cycle.md) due à la prochaine release, puisque cette PR toucherelease.yml(règle deREVIEW.md, zone « Release et mise à jour ») : Linux et Windows, clé Base+, depuis une installation à la version précédente. Aucun écart n'est attendu (même lock, cargo-xwin 0.23.1 comme pour la v0.17.2), mais seul ce cycle le prouve. Il est déjà dû pour #455 et #447.Pour le relecteur
.forgejo/workflows/release.ymlet.claude/skills/release/**(Release et mise à jour, toujours), et deux étapes de verdict decheck-rust.ymlmodifiées (CI et gardes).release.yml» : cette PR ne couvre que la moitié cargo-xwin. La toolchain Rust reste surstablesans épinglage (rustup), ce queCLAUDE.md,REVIEW.mdetdocs/architecture.mddisent.Cargo.lockpublié de cargo-xwin (cargo install --locked) : c'était déjà le cas avant.23d8190reste visible dans l'historique du run.🤖 Generated with Claude Code
Niveau : haut —
.forgejo/workflows/release.yml(Release et mise à jour)Dossier de décision requis : /pr-brief 469 avant le merge.
Verdict : APPROVE
Auto-revue de l'auteur (worker
/autopilot), pas une revue indépendante. Checklist du skillpr-reviewà la profondeur du niveau haut, appliquée au diff complet de la PR contre sa baseissue-453-i18n-keys-guard(GET /pulls/469.diff, 7 fichiers, 52 lignes ajoutées), avecREVIEW.mdlu surmain. Une boucle de correction : un constat de la passe des zones, corrigé dans le corps de la PR (voir Constats). Tête relue :db625d02efc015ab8ef0ca28d84bbed79f5a7036.Niveau (Step 0bis)
.forgejo/workflows/release.ymlrelease.yml, « toujours » (Release et mise à jour).claude/skills/release/SKILL.md.claude/skills/release/**, « toujours » (Release et mise à jour).forgejo/workflows/check-rust.ymlcargo checketcargo testmodifiées (CI et gardes). La ligne.forgejo/workflows/**ne joue pas : ni fichier ajouté, ni référence àsecrets, nipull_request_targetCLAUDE.md,REVIEW.md(hors « Niveaux »),docs/adr/0023-windows-sys-pinning.md,docs/architecture.mdRésumé
--lockedsurcargo checketcargo testdecheck-rust.yml,-- --lockedsur les deuxnpx tauri buildderelease.yml, cargo-xwin épinglé à 0.23.1 aveccargo-xwin --versionau journal,cargo metadata --lockedà l'étape 2 de/release(et--lockedà l'étape 0), docs alignées. Le diff fait ce que disent l'issue, son plan d'exécution et sa note du 2026-10-18 ; il ne rend vert rien de ce qui était rouge : les deux étapes de verdict deviennent plus strictes.Mutations et sondes
Désaccord commun :
urlencoding = "2"→"=2.1.2"(lock en 2.1.3,simpl-resultseul dépendant). Chaque essai après les commits, arbre restauré pargit checkoutetgit status --shortvide ensuite.cargo check --locked(CI)workflow_dispatch)cargo check, cargo 1.99.1 :cannot update the lock file … because --locked was passed to prevent this, cache non sauvegardé--lockedDowngrading urlencoding v2.1.3 -> v2.1.2, lock réécrit : le défaut de l'issuecargo test --locked(CI)cargo check)-- --locked, build Linuxcargoespioncargo build --locked --bins --features tauri/custom-protocol --release, refus de cargo-- --locked, espion qui remplacecargo buildpar sa résolutioncargo build --bins --features tauri/custom-protocol --release, lock réécrit-- --locked, build Windows-v+ espioncargo-xwin build --locked …puis, côté cargo-xwin,cargo build --features tauri/custom-protocol --target x86_64-pc-windows-msvc --locked --release --bins, refus de cargo-- --lockedcargo build … --release --binssans--locked, lock réécrit. Ni la CLI ni cargo-xwin n'ajoutent--lockedd'eux-mêmestauri buildcargo metadata --no-deps --format-version 1, qui ne résolvent rien : aucun appel ne réécrit le lock avant le buildcargo install --locked cargo-xwin --version 0.23.99 --root /tmp/…with version =0.23.99: version sans opérateur lue comme exacte, pas de repli ; rien d'installé, cargo-xwin local inchangé (0.23.1)cargo-xwin --versioncargo-xwin 0.23.1/releasecargo metadata … --lockedVert local sur le lock réel :
cargo check … --all-targets --locked0,cargo test … --all-targets --locked267 passed et 1 ignored ; vitest 138 fichiers et 2305 tests (sonde rc=1) ;npm run build0 ;scripts/review-levels.py --checkok. Indice pour la release : le journal du run 570 (v0.17.2, même lock) n'a aucune ligneLockingniDowngrading.Passe sécurité (bloquante)
TAURI_SIGNING_PRIVATE_KEYn'y figure que par son nom, dans des commentaires et la doc. Aucun.env, aucun changement de mode, aucun fichier ajouté, renommé ou supprimé.cargo install --locked cargo-xwin --version 0.23.1,cargo-xwin --versionet les deuxnpx tauri build … -- --locked. Aucune expression de workflow (${{) ajoutée, même en commentaire, et rien d'interpolé.git diff origin/main -- src-tauri/Cargo.tomlvide).REVIEW.md:secrets, aucun workflow ajouté, aucunbranches:, aucuncontinue-on-errorni|| true.REVIEW.mdcite et que la PR change sont mis à jour (tableau, bloc local, cargo-xwin « sans version épinglée »).CLAUDE.md, ADR 0023 etarchitecture.mdà jour.Constats
REVIEW.md, zone « Release et mise à jour », dit qu'une release qui toucherelease.ymlexige le cycle réel de mise à jour (étape 10 de/release) et que la PR le signale. Le corps de la PR ne le faisait pas. Ajouté sous « Vérifications manuelles dues (prochaine release) » (PATCH du corps, relu identique à l'octet), avec les mutations M2, M3 et la sonde P1 dans le tableau des preuves.Aucun constat ouvert.
Critères d'acceptation
cargo checketcargo testdecheck-rust.ymlavec--locked; commentaire de la garde et ADR 0023 réécrits.release.ymlportent-- --locked.check-rustvert avec--lockedsur le lock actuel : run de cette PR, en attente au moment de ce commentaire (vert en local)./release:cargo metadata --locked.CLAUDE.mdà jour ; miroir.github/workflows/intact.cargo updateen PR et édition à la main de/releasetoujours possibles.Suggestions (non bloquantes)
npx tauri build -vl'imprimerait (Running [tauri_cli] Command …), mais le mode verbeux, avec la clé de signature dans l'environnement, n'a pas été audité : non proposé ici.stableplus récent qui voudrait réécrire le lock (format, résolution) fera désormais rougircheck-rustet le build du tag au lieu de passer en silence. La réparation est une PR qui commite le nouveau lock. Le lock est enversion = 4, accepté tel quel par cargo 1.99.1 au run 570.stable.CI lue par l'orchestrateur du run
/autopilotdu 2026-10-18 sur la têtedb625d0: les deux contrôles sont verts.check-frontend(run 573) : 138 fichiers et 2305 tests verts, dontscripts/build-latest-json.test.mjs(36 tests), qui exécute l'étape « Publish » derelease.yml.check-rust(run 574) :No cache found.), puisCache saved successfully;cargo checkterminé, puis les deux gardes : canariwebkit2gtktrouvé, etwindows-sys pinning: 9 checks, exit 0;cargo test: 267 passés, 1 ignoré ;cargo auditinformatif : 663 crates, aucune vulnérabilité, 18 avertissements autorisés.--lockedn'y apparaît pas en clair. Sa présence vient du fichier de workflow de la PR, et elle est démontrée par le run rouge ci-dessous, lancé avec ce même fichier.workflow_dispatchsurthrowaway-449-lock-mismatch,23d8190) échoue àcargo checkavecerror: cannot update the lock file … because --locked was passed to prevent this, code de sortie 101. La branche jetable n'existe plus sur le dépôt.Niveau : haut —
.forgejo/workflows/release.yml(Release et mise à jour) ; aussi.claude/skills/release/SKILL.md(Release et mise à jour) et les étapes de verdictcargo checketcargo testdecheck-rust.yml(CI et gardes)Dossier de décision requis : /pr-brief 469 avant le merge.
Verdict : APPROVE
Revue indépendante, distincte de l'auto-revue du worker (commentaire 25148).
--lockedarrive àcargo buildpar les deux runners de la release et fait échouercheck-rustsur un lock désaccordé, sans jamais le réécrire ; l'épinglage fige cargo-xwin à la version que la v0.17.2 avait installée. Tout est rejoué ci-dessous sur une copie hors dépôt de la têtedb625d0, avec un désaccord différent de celui de l'auteur. La passe sécurité ne relève rien.Rejoué (texte exact des étapes, extrait par PyYAML, lancé sous
bash --noprofile --norc -e -o pipefail)Désaccord : version de l'app montée dans
src-tauri/Cargo.tomlseul (0.17.2 → 0.17.3), l'oubli que l'étape 2 de/releasedoit attraper. L'auteur avait déplacé la borne d'urlencoding.cargo check(tête)cannot update the lock file … because --locked was passed to prevent this, lock intactcargo test(tête)cargo checkde la baseversion = "0.17.3"dans le blocsimpl-result) sans aucune ligneLockingdans la sortie, puis compilation (arrêtée à 45 s)node(CLI) : 6 ×cargo metadata --no-deps --format-version 1, puiscargo build --locked --bins --features tauri/custom-protocol --release; échec sur le message de cargo puisfailed to build app, lock intactnode: les mêmes 6metadata --no-deps;cargo-xwin:cargo build --features tauri/custom-protocol --target x86_64-pc-windows-msvc --locked --release --bins; même échec, lock intactcargo buildpar la résolution qu'il ferait--lockeddans l'appel ; lock réécrit dans les deux casSKILL.mdCargo.tomlmonté seul : 101, lock intact ; blocsimpl-resultcorrigé à la main : 0, lock non réécrit ; arêteurlencodingretirée du bloc (« strophe abîmée ») : 101--locked,Cargo.tomlmonté seulcargo-xwin --versionsous les options du runnercargo-xwin 0.23.1, code 0 : la ligne ajoutée ne fait pas tomber l'étapecargo install --locked cargo-xwin --version 0.23.99 --root /tmp/…with version =0.23.99: version exacte, sans repli ; rien d'installéVérifié aussi :
max_stable_versionetnewest_versionà 0.23.1 (2026-08-13), non retirée ; run 570 (v0.17.2) :Installed package cargo-xwin v0.23.1.23d8190=14badbeplus la seule ligneurlencoding = "=2.1.2"; échec àcargo check(101), cache non sauvegardé. De14badbeà la tête, seulsSKILL.mdetarchitecture.mdchangent : la preuve CI vaut pour les workflows relus.db625d0:check-frontendrun 573 vert (138 fichiers, 2305 tests, dont les 36 debuild-latest-json.test.mjs) ;check-rustrun 574 vert (267 tests, garde des suppressions 2/2,windows-sys9/9, audit sur 663 crates sans vulnérabilité, 18 avertissements autorisés).env:,uses:,if:et nombre d'étapes identiques à la base, seuls desrun:changent ;python3 scripts/review-levels.py --checkok (37 motifs), section « Niveaux » non touchée.CLAUDE.md,REVIEW.md, ADR 0023 etarchitecture.mddécrivent ce que font les workflows ; plus aucune mention de cargo-xwin non épinglé ni d'une CI sans--locked. Miroir : aucun miroir de poussée sur Forgejo, qui ignore.github/workflows/quand.forgejo/workflows/existe : « rien n'y tourne » tient.Passe sécurité : sans constat
TAURI_SIGNING_PRIVATE_KEYn'y apparaît que comme nom, en commentaire ou en doc.run:ajoutés, aucuncontinue-on-error,|| true, écriture de$GITHUB_ENVou$GITHUB_PATH, aucun TODO de sécurité.REVIEW.md: Release (clé dans l'environnement des deux builds inchangée,cargo-xwin --versiontourne dans une étape sans la clé, cycle réel signalé pour la prochaine release) ; CI et gardes (aucun workflow ajouté, aucune référence àsecrets, pas depull_request_target;--lockedne peut que faire rougir ce qui passait, voir R1, R2 et M1).Suggestions (non bloquantes)
closesde cette PR (Resolves #449dans le corps et dans deux des trois commits) : #449 se fermera au merge, avant sa « Vérification post-merge (au prochain tag) ». Pour #447 et #455, la PR était enRefset l'issue fermée à la main. Reformuler deux commits d'une pile de huit coûte plus que ça ne rapporte : au/merge-stack, reporter ce contrôle dans la puce « Vérifications dues à la release suivante » deSTATE.md(le plan du lot prévoit ce report au/merge-stack), ou rouvrir #449 enstatus:blockedjusqu'au tag, comme #421.-- --lockedn'arrive àcargo buildque par@tauri-apps/cli2.10.0 (lock npm) et cargo-xwin 0.23.1, et le journal du tag ne le montre jamais. Le commentaire de l'épinglage dit « Bump it on purpose, after reading what the new version changes » : y ajouter le rejeu de la preuve du relais (espion, lock désaccordé), et la même consigne pour une montée de@tauri-apps/clidansarchitecture.mdou dans la zone Release deREVIEW.md.cargo metadata --no-depsviennent tous de la CLI de Tauri (node) ; cargo-xwin ne lance quecargo build. « les autres appels à cargo de la CLI et de cargo-xwin » (architecture.md, message dedb625d0) n'est pas faux, mais prête à cargo-xwin des appels qu'il ne fait pas.simpl-resultdans le lock : l'absence de ligneLockingdans un journal ne prouve rien pour l'oubli que vise l'étape 2 de/release. Sans effet sur la v0.17.2 (son lock avait passécargo metadata --lockedavant le tag), et un argument de plus pour--locked.STATE.md. Horspaths-ignore, cette PR ne touche que.claude/skills/release/SKILL.mdetrelease.yml: le run 573 prouve que cette paire déclenchecheck-frontend, ce que l'entrée #419 deSTATE.mdlaissait « à prouver ». Chacun seul reste non prouvé.Actions faites
/tmp/pr469-copy(git archivededb625d0,npm ci), espioncargo, journaux des runs 570 à 574 et textes extraits : supprimés en fin de revue. Dépôt local intact (git statusvide, surmain), rien d'installé (/tmp/pr469-xrootjamais créé).status:review→status:approved.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.