npm 11.12.1 retire de lui-même ces entrées dès la première installation
(`npm install --package-lock-only` sur main donne exactement ce diff) : @babel/*,
istanbul-lib-*, rollup et ses binaires de plateforme, etc. Ce sont des pairs
optionnels (dev + optional + peer) de @angular/build, @angular/compiler-cli et
vitest, que `npm ci` n'installe pas : node_modules est identique avant et après.
Commit à part pour que le diff de l'adoption de @avalon-vanguard/config reste lisible.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- .npmrc : le scope @avalon-vanguard pointe vers le registre npm de Gitea (lecture
anonyme, aucune ligne _authToken).
- devDependency @avalon-vanguard/config ^1.0.0 (résolu depuis git.avalonvanguard.com).
- .prettierrc : "@avalon-vanguard/config/prettier/angular" (mêmes printWidth 100,
singleQuote et parser angular pour *.html ; les défauts de Prettier 3 deviennent
explicites).
- tsconfig.json étend @avalon-vanguard/config/tsconfig/angular.json ; files et
references restent ici. Les sous-configs (app, spec, worker, e2e, etl) étendent
toujours ../tsconfig.json, sans changement.
- .editorconfig : copie du fichier du paquet (seuls trois commentaires s'ajoutent).
Aucun changement de résultat, vérifié depuis un `npm ci` propre de chaque côté
(Node 24.15, rm -rf dist .angular/cache) contre main 822c699 :
- `ng build` de production : les 33 fichiers de dist/ ont le même sha256.
- `prettier --check .` : sortie identique (les mêmes 135 fichiers déjà signalés).
- etl, e2e et worker typecheck, tsc app et spec : propres avant et après ;
`tsc --showConfig` sémantiquement identique pour les 5 projets.
- `ng test` : 729 tests sur 41 fichiers, tous verts des deux côtés.
- `playwright test --list` : identique (17 tests, 8 fichiers).
- node_modules : seul @avalon-vanguard/config s'ajoute.
Note : index.html embarque la CSS de Google Fonts téléchargée au moment du build ;
deux builds de main à quelques minutes d'écart peuvent donc différer sur ce seul
fichier. Les deux builds comparés ici ont été faits à la suite.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- eslint.config.js reprend l'exemple du README du paquet (préfixe app, comme dans
angular.json), plus les sorties ignorées par .gitignore (out-tsc, rapports
Playwright, cache de l'ETL…) : ESLint ne lit pas .gitignore, et un
playwright-report/index.html local serait sinon lu comme un template Angular.
- devDependencies aux mêmes plages que web-site (main) : eslint ^10.10.0,
@eslint/js ^10.0.1, typescript-eslint ^8.70.0, angular-eslint ^22.5.0. Le paquet
partagé les déclare en pairs optionnels : chaque dépôt qui l'importe les garde.
- Script "lint" : eslint .
`npm run lint` signale 37 erreurs existantes (14 prefer-inject, 18 no-unused-vars,
4 no-useless-assignment, 1 no-unused-expressions), corrigées dans les commits
suivants.
package-lock.json : angular-eslint tire @angular-devkit/core 22.2, qui épingle
picomatch 4.0.7 ; npm remonte donc picomatch 4.0.4 → 4.0.7 (et retire la copie
4.0.5 de vite), @jridgewell/sourcemap-codec 1.5.5 → 1.6.0, et remonte ora.
Vérifié depuis un `npm ci` propre contre main 822c699 : les 33 fichiers du
`ng build` de production ont le même sha256, et prettier --check, les 5 typechecks,
`ng test` (729 tests verts) et `playwright test --list` (17 tests) sont identiques.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Corrige les 14 erreurs @angular-eslint/prefer-inject (EngineService,
BodyDetailSceneComponent, InfoPanelComponent, GalaxySystemSceneComponent,
SearchComponent). Chaque paramètre devient un champ `inject()` de même nom, même
visibilité (navigationStore reste public : le template le lit) et dans le même
ordre, placé avant les autres champs : les dépendances restent résolues avant tout
autre initialiseur, comme l'étaient les paramètres. Les corps de constructeur
(effects, buildIndex) ne changent pas.
engine.service.spec.ts construisait EngineService avec `new` et un faux NgZone :
il le fait maintenant dans runInInjectionContext, avec le même faux NgZone fourni
par un Injector.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Corrige les 23 erreurs restantes, sans changer le comportement :
- no-unused-vars (18)
- galaxy-system-scene.component.spec.ts : les 5 faux `links` déclaraient des
paramètres _rangePc, _drawn, _budget seulement pour typer mock.calls ; ils sont
typés par vi.fn<LinkScene['routing']['links']>(), même signature.
- body-detail-scene : `const viewModel = this.viewModel()` jamais lu (lecture de
signal hors contexte réactif, sans effet).
- galaxy-system-scene : `const camera = this.engine.getCamera()` jamais lu dans
swapToSystemSpace et swapToGalaxySpace. getCamera() ne lève que si le moteur
n'est pas initialisé, or ces fonctions ne tournent qu'en rappel de rig.flyTo,
piloté par le tick du moteur qui appelle déjà getCamera() à chaque image.
- grid-plane, star-field-renderer : imports cités seulement dans un {@link} de
JSDoc (SUN_HEIGHT_ABOVE_MIDPLANE_PC, REFERENCE_VIEWPORT_HEIGHT_PX). Les modules
restent importés pour leurs autres exports.
- no-useless-assignment (4) : valeurs initiales jamais lues (u, v, s de gaussian(),
affectés dans le do avant toute lecture ; raw de BookmarksStore.read(), affecté
dans le try dont le catch retourne). Les déclarations gardent leur type.
- no-unused-expressions (1) : `this.display().jumpLinks;` dans l'effect des liens
de saut est une lecture voulue (abonnement au signal) ; écrite
`void this.display().jumpLinks;`, même lecture.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
"typecheck" enchaîne etl:typecheck, e2e:typecheck et worker:typecheck : les trois
projets TypeScript que rien d'autre ne compile, et que la CI vérifiait en trois
étapes séparées. C'est le nom que lance le workflow partagé
avalon-vanguard/ci (node.yml).
App et specs n'y sont pas ajoutés : `ng build` vérifie déjà les types de
tsconfig.app.json et `ng test` ceux de tsconfig.spec.json. Vérifié en ajoutant une
erreur de type (TS2322) dans src/app/app.ts puis dans src/app/app.spec.ts : le
build, puis les tests, échouent avec [plugin angular-compiler].
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Portage de .github/workflows/ci.yml vers le workflow partagé, avec { e2e: true } :
mêmes déclencheurs (push sur main et develop, pull_request, workflow_dispatch),
même concurrency (groupe workflow + ref, cancel-in-progress), Node 22. node.yml
lance npm ci, lint, typecheck (etl, e2e, worker), npm test (sans watch : CI=true),
le build de production, puis Playwright (Chromium). secrets: inherit.
Différences assumées :
- un seul job séquentiel au lieu de deux jobs parallèles : l'e2e ne tourne plus
si une étape précédente échoue ;
- pas de bloc `permissions: contents: read` : dans Gitea 1.27.3, le jeton d'un
job appelé ne prend que les permissions déclarées par le workflow appelé
(services/actions/reusable_workflow.go), un bloc ici n'aurait aucun effet.
Ce dossier .gitea/workflows fait ignorer .github/workflows par Gitea :
data-refresh.yml et pages.yml (ainsi que junie-review.yml) restent pour l'instant
réservés à GitHub et seront portés plus tard. .github/workflows/ci.yml reste en
place pour GitHub, où data-refresh.yml le déclenche (`gh workflow run ci.yml`).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
renovate.json étend local>avalon-vanguard/renovate-config (planning du lundi
avant 6 h, outils de dev groupés, registre npm de Gitea pour @avalon-vanguard/*,
config partagée en PR à part) et sa couche :angular (@angular/* et angular-eslint
groupés, plafonds TypeScript 6.0 et Vitest 4). L'exécution est centrale
(avalon-vanguard/renovate) : aucun workflow renovate.yml dans ce dépôt.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
245 760 appels à expect() (10 classes × 8 192 octets × 3) dépassaient le délai de
5 s par défaut sur le runner Gitea (1,4 s ici) ; le test tombe à 11 ms. Même
vérification, même résultat.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Les tests de bout en bout rendent la carte 3D en logiciel sur ng serve : sur le
runner du VPS (2 CPU), 7 sur 17 dépassent leur délai. Lint, types, tests
unitaires et build restent vérifiés ; les e2e reviendront avec un runner plus
capable.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
7,5 s sur un poste récent, mais autour de 30 s sur le runner Gitea du VPS, même
seul : il échouait une fois sur deux. Le calcul vérifié ne change pas.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
npm run lintpasse a47b5d3d92Corrige les 23 erreurs restantes, sans changer le comportement : - no-unused-vars (18) - galaxy-system-scene.component.spec.ts : les 5 faux `links` déclaraient des paramètres _rangePc, _drawn, _budget seulement pour typer mock.calls ; ils sont typés par vi.fn<LinkScene['routing']['links']>(), même signature. - body-detail-scene : `const viewModel = this.viewModel()` jamais lu (lecture de signal hors contexte réactif, sans effet). - galaxy-system-scene : `const camera = this.engine.getCamera()` jamais lu dans swapToSystemSpace et swapToGalaxySpace. getCamera() ne lève que si le moteur n'est pas initialisé, or ces fonctions ne tournent qu'en rappel de rig.flyTo, piloté par le tick du moteur qui appelle déjà getCamera() à chaque image. - grid-plane, star-field-renderer : imports cités seulement dans un {@link} de JSDoc (SUN_HEIGHT_ABOVE_MIDPLANE_PC, REFERENCE_VIEWPORT_HEIGHT_PX). Les modules restent importés pour leurs autres exports. - no-useless-assignment (4) : valeurs initiales jamais lues (u, v, s de gaussian(), affectés dans le do avant toute lecture ; raw de BookmarksStore.read(), affecté dans le try dont le catch retourne). Les déclarations gardent leur type. - no-unused-expressions (1) : `this.display().jumpLinks;` dans l'effect des liens de saut est une lecture voulue (abonnement au signal) ; écrite `void this.display().jumpLinks;`, même lecture. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>Portage de .github/workflows/ci.yml vers le workflow partagé, avec { e2e: true } : mêmes déclencheurs (push sur main et develop, pull_request, workflow_dispatch), même concurrency (groupe workflow + ref, cancel-in-progress), Node 22. node.yml lance npm ci, lint, typecheck (etl, e2e, worker), npm test (sans watch : CI=true), le build de production, puis Playwright (Chromium). secrets: inherit. Différences assumées : - un seul job séquentiel au lieu de deux jobs parallèles : l'e2e ne tourne plus si une étape précédente échoue ; - pas de bloc `permissions: contents: read` : dans Gitea 1.27.3, le jeton d'un job appelé ne prend que les permissions déclarées par le workflow appelé (services/actions/reusable_workflow.go), un bloc ici n'aurait aucun effet. Ce dossier .gitea/workflows fait ignorer .github/workflows par Gitea : data-refresh.yml et pages.yml (ainsi que junie-review.yml) restent pour l'instant réservés à GitHub et seront portés plus tard. .github/workflows/ci.yml reste en place pour GitHub, où data-refresh.yml le déclenche (`gh workflow run ci.yml`). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.