Shared base #1

Open
Senrokai wants to merge 11 commits from shared-base into main
Owner
No description provided.
Senrokai added 8 commits 2026-10-01 16:02:20 +00:00
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 : base commune de l'organisation + couche Angular
CI / ci (pull_request) Failing after 1m54s
node / check (pull_request) Failing after 1m53s
243aa3bbce
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>
Senrokai added 1 commit 2026-10-01 16:24:10 +00:00
Test de texture : une assertion par classe au lieu de trois par octet
CI / ci (pull_request) Failing after 20m2s
node / check (pull_request) Failing after 20m2s
2965706b7e
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>
Senrokai added 1 commit 2026-10-01 16:48:18 +00:00
CI Gitea : sans e2e pour l'instant
CI / ci (pull_request) Successful in 2m21s
node / check (pull_request) Successful in 2m21s
6fee084d77
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>
Senrokai added 1 commit 2026-10-01 17:29:49 +00:00
Test de bissection : 90 s de délai au lieu de 30
CI / ci (pull_request) Successful in 2m35s
node / check (pull_request) Successful in 2m35s
e1b764ca31
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>
All checks were successful
node / check (pull_request) Successful in 2m35s
CI / ci (pull_request) Successful in 2m35s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin shared-base:shared-base
git checkout shared-base
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: avalon-vanguard/star-map#1